- 运行时分类体系:Shell/Python/JavaScript/Ruby/PHP 各含变体 - 用户注册/登录(JWT + bcrypt),首个注册用户为管理员 - 管理后台 /admin 动态管理分类和变体 - 脚本市场支持按分类筛选 - CodeMirror 语言模式根据分类名称自动切换 - 结果页展示该分类下所有变体的运行命令 - source 命令变体用于 Shell 类继承环境变量 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
76 lines
4.0 KiB
Go
76 lines
4.0 KiB
Go
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},
|
|
} |