* H-289: add Captain Skill management API * H-289: guard Captain Skill updates with CAS * H-289: version all Captain Skill updates --------- Co-authored-by: Rogee <rogee@ipao.vip>
49 lines
2.5 KiB
Go
49 lines
2.5 KiB
Go
package model
|
|
|
|
import "time"
|
|
|
|
type CaptainSkillStatus string
|
|
|
|
const (
|
|
CaptainSkillStatusDraft CaptainSkillStatus = "draft"
|
|
CaptainSkillStatusActive CaptainSkillStatus = "active"
|
|
CaptainSkillStatusArchived CaptainSkillStatus = "archived"
|
|
)
|
|
|
|
type CaptainSkill struct {
|
|
ID uint `gorm:"primaryKey;autoIncrement" json:"id"`
|
|
AccountID uint `gorm:"not null;uniqueIndex:idx_captain_skills_account_name" json:"account_id"`
|
|
Name string `gorm:"size:255;not null;uniqueIndex:idx_captain_skills_account_name" json:"name"`
|
|
Description string `gorm:"size:1024;not null" json:"description"`
|
|
InstructionsMD string `gorm:"type:text;not null" json:"instructions_md"`
|
|
Status CaptainSkillStatus `gorm:"size:20;not null;default:draft;index" json:"status"`
|
|
Version uint `gorm:"not null;default:1" json:"version"`
|
|
References []CaptainSkillReference `gorm:"foreignKey:SkillID;constraint:OnDelete:CASCADE" json:"references,omitempty"`
|
|
CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"`
|
|
UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at"`
|
|
}
|
|
|
|
func (CaptainSkill) TableName() string { return "captain_skills" }
|
|
|
|
type CaptainSkillReference struct {
|
|
ID uint `gorm:"primaryKey;autoIncrement" json:"id"`
|
|
SkillID uint `gorm:"not null;uniqueIndex:idx_captain_skill_refs_key;uniqueIndex:idx_captain_skill_refs_position" json:"skill_id"`
|
|
ReferenceKey string `gorm:"size:255;not null;uniqueIndex:idx_captain_skill_refs_key" json:"reference_key"`
|
|
ContentMD string `gorm:"type:text;not null" json:"content_md"`
|
|
Position int `gorm:"not null;uniqueIndex:idx_captain_skill_refs_position" json:"position"`
|
|
CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"`
|
|
UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at"`
|
|
}
|
|
|
|
func (CaptainSkillReference) TableName() string { return "captain_skill_references" }
|
|
|
|
type CaptainAssistantSkill struct {
|
|
ID uint `gorm:"primaryKey;autoIncrement" json:"id"`
|
|
AccountID uint `gorm:"not null;index" json:"account_id"`
|
|
AssistantID uint `gorm:"not null;uniqueIndex:idx_captain_assistant_skill" json:"assistant_id"`
|
|
SkillID uint `gorm:"not null;uniqueIndex:idx_captain_assistant_skill;index" json:"skill_id"`
|
|
CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"`
|
|
}
|
|
|
|
func (CaptainAssistantSkill) TableName() string { return "captain_assistant_skills" }
|