Overview
Project setting types allow configuration of project-specific options like webhook notifications and GitHub integration features.
ProjectSetting
Represents a project setting with key-value storage.
type ProjectSetting struct {
ID string `json:"id"`
ProjectID string `json:"-"`
Key string `json:"key"`
Value json.RawMessage `json:"value"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
Unique setting identifier
Setting key (see ProjectSettingKey constants)
When the setting was created
When the setting was last updated
ProjectSettingKey
Defined keys for project settings.
type ProjectSettingKey string
const (
ProjectSettingKeyWebhookEnabledIssueClasses ProjectSettingKey = "webhook_enabled_issue_classes"
ProjectSettingKeyEnabledGithubCommentPR ProjectSettingKey = "enabled_github_comment_pr"
)
Available Keys
webhook_enabled_issue_classes - Controls which issue classes trigger webhooks
enabled_github_comment_pr - Enables/disables GitHub PR commenting
Methods
String() string - Returns string representation
IsValid() bool - Checks if the key is valid
ProjectSettingCreate
Request to create a project setting.
type ProjectSettingCreate struct {
Key string `json:"key"`
Value json.RawMessage `json:"value"`
}
Methods
Validate() error - Validates key and value
Validation Rules
- Key cannot be empty
- Key must be valid (defined in ProjectSettingKey constants)
- Key length must not exceed 255 characters
- Value cannot be empty
ProjectSettingCreated
Response after creating a setting.
type ProjectSettingCreated struct {
ID string `json:"id"`
Key string `json:"key"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
ProjectSettingUpdate
Request to update a project setting.
type ProjectSettingUpdate struct {
Value json.RawMessage `json:"value"`
}
Methods
Validate() error - Validates value is not empty
ProjectSettingUpdated
Response after updating a setting.
type ProjectSettingUpdated struct {
ID string `json:"id"`
Key string `json:"key"`
UpdatedAt time.Time `json:"updated_at"`
}
ListProjectSettings
Request to list project settings.
type ListProjectSettings struct {
PageArgs
ProjectID string `json:"-"`
}
WebhookEnabledIssueClasses
Value type for webhook_enabled_issue_classes setting.
type WebhookEnabledIssueClasses struct {
Classes []IssueClass `json:"classes"`
}
List of enabled issue classes. If nil, all classes are enabled (default).
Methods
Validate() error - Validates all classes are valid
IsIssueClassEnabled(class IssueClass) bool - Checks if a specific class is enabled
Behavior
nil classes means all issue classes trigger webhooks (default)
- Empty array means no issue classes trigger webhooks
- Non-empty array specifies which classes trigger webhooks
Example Usage
Enable Webhooks for Specific Issue Classes
import "encoding/json"
// Create setting to enable webhooks only for critical issues
enabledClasses := types.WebhookEnabledIssueClasses{
Classes: []types.IssueClass{
types.IssueClassNetworkExfiltration,
types.IssueClassCryptoMiner,
},
}
valueJSON, err := json.Marshal(enabledClasses)
if err != nil {
// Handle error
}
setting := types.ProjectSettingCreate{
Key: string(types.ProjectSettingKeyWebhookEnabledIssueClasses),
Value: valueJSON,
}
if err := setting.Validate(); err != nil {
// Handle validation error
}
// Create setting to enable GitHub PR comments
enabled := true
valueJSON, err := json.Marshal(enabled)
if err != nil {
// Handle error
}
setting := types.ProjectSettingCreate{
Key: string(types.ProjectSettingKeyEnabledGithubCommentPR),
Value: valueJSON,
}
Check if Issue Class is Enabled
var webhookClasses types.WebhookEnabledIssueClasses
if err := json.Unmarshal(setting.Value, &webhookClasses); err != nil {
// Handle error
}
if webhookClasses.IsIssueClassEnabled(types.IssueClassCryptoMiner) {
// Send webhook for crypto miner issue
}
Error Constants
const (
ErrProjectSettingNotFound = errs.NotFoundError("project setting not found")
ErrInvalidProjectSettingKey = errs.InvalidArgumentError("invalid project setting key")
ErrInvalidProjectSettingValue = errs.InvalidArgumentError("invalid project setting value")
ErrUnauthorizedProjectSetting = errs.UnauthorizedError("permission denied for project setting")
ErrProjectSettingAlreadyExists = errs.ConflictError("project setting already exists")
)