Skip to main content

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"`
}
id
string
required
Unique setting identifier
key
string
required
Setting key (see ProjectSettingKey constants)
value
json.RawMessage
required
Setting value as JSON
created_at
time.Time
required
When the setting was created
updated_at
time.Time
required
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"`
}
classes
IssueClass[]
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
}

Enable GitHub PR Comments

// 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")
)

Build docs developers (and LLMs) love