package model import "time" type User struct { ID uint `gorm:"primaryKey;autoIncrement"` Username string `gorm:"uniqueIndex;size:32;not null"` PasswordHash string `gorm:"size:128;not null"` Email string `gorm:"size:128"` Role string `gorm:"size:16;not null;default:user"` GiteaID int `gorm:"uniqueIndex"` CreatedAt time.Time `gorm:"autoCreateTime"` } type RuntimeCategory struct { ID uint `gorm:"primaryKey;autoIncrement"` Name string `gorm:"uniqueIndex;size:32;not null"` Label string `gorm:"size:64;not null"` Icon string `gorm:"size:8"` SortOrder int `gorm:"default:0"` Variants []RuntimeVariant `gorm:"foreignKey:CategoryID"` } type RuntimeVariant struct { ID uint `gorm:"primaryKey;autoIncrement"` CategoryID uint `gorm:"not null;index"` Name string `gorm:"size:32;not null"` Label string `gorm:"size:64;not null"` Extension string `gorm:"size:8;not null"` MIMEType string `gorm:"size:64;not null"` CommandTemplate string `gorm:"size:128;not null"` SourceTemplate string `gorm:"size:128"` IsDefault bool `gorm:"default:false"` SortOrder int `gorm:"default:0"` } type Script struct { ID string `gorm:"primaryKey;size:8"` Title string `gorm:"size:128;not null"` Description string `gorm:"size:512"` Content string `gorm:"type:text;not null"` CategoryID uint `gorm:"not null;index"` UserID uint `gorm:"index"` AdminToken string `gorm:"size:64;not null"` Status string `gorm:"size:16;not null;default:draft;index"` ExpiresAt time.Time `gorm:"not null;index"` CreatedAt time.Time `gorm:"not null;autoCreateTime"` PublishedAt *time.Time `gorm:"index"` } // Default seed data var DefaultCategories = []RuntimeCategory{ {Name: "shell", Label: "Shell 脚本", Icon: "🐚", SortOrder: 1}, {Name: "python", Label: "Python", Icon: "🐍", SortOrder: 2}, {Name: "javascript", Label: "JavaScript", Icon: "🟨", SortOrder: 3}, {Name: "ruby", Label: "Ruby", Icon: "💎", SortOrder: 4}, {Name: "php", Label: "PHP", Icon: "🐘", SortOrder: 5}, } var DefaultVariants = []RuntimeVariant{ // Shell variants {CategoryID: 1, Name: "bash", Label: "Bash", Extension: ".sh", MIMEType: "text/x-shellscript", CommandTemplate: "curl {url} | bash", SourceTemplate: "source <(curl {url})", IsDefault: true, SortOrder: 1}, {CategoryID: 1, Name: "zsh", Label: "Zsh", Extension: ".zsh", MIMEType: "text/x-shellscript", CommandTemplate: "curl {url} | zsh", SourceTemplate: "source <(curl {url})", SortOrder: 2}, {CategoryID: 1, Name: "sh", Label: "Sh", Extension: ".sh", MIMEType: "text/x-shellscript", CommandTemplate: "curl {url} | sh", SourceTemplate: ". <(curl {url})", SortOrder: 3}, {CategoryID: 1, Name: "fish", Label: "Fish", Extension: ".fish", MIMEType: "text/x-shellscript", CommandTemplate: "curl {url} | fish", SourceTemplate: "curl {url} | source", SortOrder: 4}, // Python variants {CategoryID: 2, Name: "python3", Label: "Python 3", Extension: ".py", MIMEType: "text/x-python", CommandTemplate: "curl {url} | python3", IsDefault: true, SortOrder: 1}, {CategoryID: 2, Name: "python", Label: "Python", Extension: ".py", MIMEType: "text/x-python", CommandTemplate: "curl {url} | python", SortOrder: 2}, // JavaScript variants {CategoryID: 3, Name: "node", Label: "Node.js", Extension: ".js", MIMEType: "text/javascript", CommandTemplate: "curl {url} | node", IsDefault: true, SortOrder: 1}, {CategoryID: 3, Name: "bun", Label: "Bun", Extension: ".js", MIMEType: "text/javascript", CommandTemplate: "curl {url} | bun", SortOrder: 2}, // Ruby variants {CategoryID: 4, Name: "ruby", Label: "Ruby", Extension: ".rb", MIMEType: "text/x-ruby", CommandTemplate: "curl {url} | ruby", IsDefault: true, SortOrder: 1}, // PHP variants {CategoryID: 5, Name: "php", Label: "PHP", Extension: ".php", MIMEType: "text/x-php", CommandTemplate: "curl {url} | php", IsDefault: true, SortOrder: 1}, }