Files
gochat/backend/internal/model/captain_skill.go
T
Rogeeandrogee 0f2b8d7857 H-289: add Captain Skill management API (#46)
* 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>
2026-08-18 14:29:10 +08:00

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" }