New warehouse

This commit is contained in:
2025-10-24 00:09:45 +08:00
commit ac07e27908
75 changed files with 26814 additions and 0 deletions

97
models/api.go Normal file
View File

@@ -0,0 +1,97 @@
package models
import (
"time"
"github.com/google/uuid"
"gorm.io/gorm"
)
// API 接口表模型
// 用于管理API接口的配置信息
// 包含加密算法配置、密钥管理等功能
// 支持多种加密算法不加密、RC4、RSA、RSA动态
type API struct {
// ID主键自增
ID uint `gorm:"primaryKey;comment:API接口ID自增主键" json:"id"`
// API类型int型
APIType int `gorm:"not null;comment:API类型" json:"api_type"`
// API密钥
APIKey string `gorm:"size:255;not null;uniqueIndex;comment:API密钥唯一标识" json:"api_key"`
// 应用UUID关联到App表
AppUUID string `gorm:"size:36;not null;index;comment:关联的应用UUID" json:"app_uuid"`
// 接口状态1=启用0=禁用)
Status int `gorm:"default:1;not null;comment:接口状态1=启用0=禁用" json:"status"`
// 接口提交算法
// 支持的算法0=不加密1=RC42=RSA3=RSA动态
SubmitAlgorithm int `gorm:"default:0;not null;comment:提交算法0=不加密1=RC42=RSA3=RSA动态" json:"submit_algorithm"`
// 接口返回算法
// 支持的算法0=不加密1=RC42=RSA3=RSA动态
ReturnAlgorithm int `gorm:"default:0;not null;comment:返回算法0=不加密1=RC42=RSA3=RSA动态" json:"return_algorithm"`
// 提交算法公钥base64编码存储
SubmitPublicKey string `gorm:"type:text;comment:提交算法公钥base64编码" json:"submit_public_key"`
// 提交算法私钥base64编码存储
SubmitPrivateKey string `gorm:"type:text;comment:提交算法私钥base64编码" json:"submit_private_key"`
// 返回算法公钥base64编码存储
ReturnPublicKey string `gorm:"type:text;comment:返回算法公钥base64编码" json:"return_public_key"`
// 返回算法私钥base64编码存储
ReturnPrivateKey string `gorm:"type:text;comment:返回算法私钥base64编码" json:"return_private_key"`
// 时间字段
CreatedAt time.Time `gorm:"comment:创建时间" json:"created_at"`
UpdatedAt time.Time `gorm:"comment:更新时间" json:"updated_at"`
}
// BeforeCreate 在创建记录前自动生成API密钥
func (api *API) BeforeCreate(tx *gorm.DB) error {
if api.APIKey == "" {
// 生成唯一的API密钥
api.APIKey = "api_" + uuid.New().String()
}
return nil
}
// TableName 指定表名
func (API) TableName() string {
return "apis"
}
// 算法类型常量
const (
AlgorithmNone = 0 // 不加密
AlgorithmRC4 = 1 // RC4
AlgorithmRSA = 2 // RSA
AlgorithmRSADynamic = 3 // RSA动态
)
// GetAlgorithmName 获取算法名称
func GetAlgorithmName(algorithm int) string {
switch algorithm {
case AlgorithmNone:
return "不加密"
case AlgorithmRC4:
return "RC4"
case AlgorithmRSA:
return "RSA"
case AlgorithmRSADynamic:
return "RSA动态"
default:
return "未知算法"
}
}
// IsValidAlgorithm 验证算法类型是否有效
func IsValidAlgorithm(algorithm int) bool {
return algorithm >= AlgorithmNone && algorithm <= AlgorithmRSADynamic
}

63
models/app.go Normal file
View File

@@ -0,0 +1,63 @@
package models
import (
"crypto/rand"
"encoding/hex"
"strings"
"time"
"github.com/google/uuid"
"gorm.io/gorm"
)
// App 应用表模型
// 用于管理应用程序的基本信息
// UUID 为应用的唯一标识符,自动生成
// Status 为应用状态1:启用 0:禁用默认为1
// Name 为应用名称
// Secret 为应用密钥用于API认证
// Version 为应用版本号
// CreatedAt/UpdatedAt 由 GORM 自动维护
type App struct {
// ID主键自增同时通过 json 标签保证前端接收为 id
ID uint `gorm:"primaryKey;comment:应用ID自增主键" json:"id"`
// UUID应用唯一标识符自动生成
UUID string `gorm:"uniqueIndex;size:36;not null;comment:应用UUID唯一标识符" json:"uuid"`
// Status状态1=启用0=禁用json 名称与前端一致
Status int `gorm:"default:1;not null;comment:应用状态1=启用0=禁用" json:"status"`
// Name应用名称json 名称与前端一致
Name string `gorm:"size:100;not null;comment:应用名称" json:"name"`
// Secret应用密钥用于API认证
Secret string `gorm:"size:255;not null;comment:应用密钥用于API认证" json:"secret"`
// Version应用版本号
Version string `gorm:"size:50;default:'1.0.0';comment:应用版本号" json:"version"`
// ForceUpdate强制更新0=不开启1=开启)
ForceUpdate int `gorm:"default:0;not null;comment:强制更新0=不开启1=开启" json:"force_update"`
// DownloadType下载方式0=不启用更新1=自动更新2=手动下载)
DownloadType int `gorm:"default:0;not null;comment:更新方式0=不启用更新1=自动更新2=手动下载" json:"download_type"`
// DownloadURL下载地址
DownloadURL string `gorm:"size:500;comment:下载地址" json:"download_url"`
// CreatedAt/UpdatedAt时间字段返回为 created_at/updated_at便于前端展示
CreatedAt time.Time `gorm:"comment:创建时间" json:"created_at"`
UpdatedAt time.Time `gorm:"comment:更新时间" json:"updated_at"`
}
// BeforeCreate 在创建记录前自动生成UUID和密钥
func (app *App) BeforeCreate(tx *gorm.DB) error {
if app.UUID == "" {
app.UUID = uuid.New().String()
}
if app.Secret == "" {
// 生成32位大写16进制随机字符
bytes := make([]byte, 16) // 16字节 = 32位16进制字符
rand.Read(bytes)
app.Secret = strings.ToUpper(hex.EncodeToString(bytes))
}
return nil
}
// TableName 指定表名
func (App) TableName() string {
return "apps"
}

27
models/card.go Normal file
View File

@@ -0,0 +1,27 @@
package models
import (
"time"
)
// Card 卡密模型
// 用于存储和管理系统中的卡密信息,包括卡密号码、状态、使用情况等
type Card struct {
// ID主键自增
ID uint `gorm:"primaryKey;comment:卡密ID自增主键" json:"id"`
// CardNumber卡密号码唯一且非空
CardNumber string `gorm:"size:200;not null;comment:卡密号码(十六进制字符串)" json:"card_number"`
// CardTypeID所属卡密类型ID外键
CardTypeID uint `gorm:"not null;index;comment:所属卡密类型ID外键" json:"card_type_id"`
// Status状态0=未使用1=已使用2=禁用)
Status int `gorm:"default:0;not null;comment:状态0=未使用1=已使用2=禁用" json:"status"`
// Batch批次标识用于区分导入或生成批次
Batch string `gorm:"size:100;comment:批次标识" json:"batch"`
// Remark备注信息
Remark string `gorm:"size:255;comment:备注信息" json:"remark"`
// UsedAt使用时间未使用为NULL调整到创建时间前面以便前端展示顺序一致
UsedAt *time.Time `gorm:"comment:使用时间" json:"used_at"`
// CreatedAt/UpdatedAt时间字段
CreatedAt time.Time `gorm:"comment:创建时间" json:"created_at"`
UpdatedAt time.Time `gorm:"comment:更新时间" json:"updated_at"`
}

24
models/card_type.go Normal file
View File

@@ -0,0 +1,24 @@
package models
import "time"
// CardType 卡密类型表模型
// 用于管理不同类型的卡密ChatGPT、Claude、Suno、Grok等
// ID 为自增主键
// Name 为卡密类型名称,唯一索引
// Status 为状态1:启用 0:禁用默认为1
// CreatedAt/UpdatedAt 由 GORM 自动维护
type CardType struct {
// ID主键自增同时通过 json 标签保证前端接收为 id
ID uint `gorm:"primaryKey;comment:卡密类型ID自增主键" json:"id"`
// Name名称唯一json 名称与前端一致
Name string `gorm:"uniqueIndex;size:100;not null;comment:卡密类型名称,唯一索引" json:"name"`
// Status状态1=启用0=禁用json 名称与前端一致
Status int `gorm:"default:1;not null;comment:状态1=启用0=禁用" json:"status"`
// LoginTypes登录方式逗号分隔json 使用 login_types
LoginTypes string `gorm:"type:varchar(500);default:'';comment:登录方式,多个用逗号分隔" json:"login_types"`
// CreatedAt/UpdatedAt时间字段返回为 created_at/updated_at便于前端展示
CreatedAt time.Time `gorm:"comment:创建时间" json:"created_at"`
UpdatedAt time.Time `gorm:"comment:更新时间" json:"updated_at"`
}

24
models/login_type.go Normal file
View File

@@ -0,0 +1,24 @@
package models
import "time"
// LoginType 登录类型表模型
// 用于管理不同的登录方式如直登、Google、Microsoft、Apple等
// ID 为自增主键
// Name 为登录类型名称,唯一索引
// Status 为状态1:启用 0:禁用默认为1
// CreatedAt/UpdatedAt 由 GORM 自动维护
type LoginType struct {
// ID主键自增同时通过 json 标签保证前端接收为 id
ID uint `gorm:"primaryKey;comment:登录类型ID自增主键" json:"id"`
// Name名称唯一json 名称与前端一致
Name string `gorm:"uniqueIndex;size:100;not null;comment:登录类型名称,唯一索引" json:"name"`
// Status状态1=启用0=禁用json 名称与前端一致
Status int `gorm:"default:1;not null;comment:状态1=启用0=禁用" json:"status"`
// VerifyTypes验证方式逗号分隔json 使用 verify_types用于记录多种验证方式输入内容用多个用逗号分隔
VerifyTypes string `gorm:"type:varchar(500);default:'';comment:验证方式,输入内容用多个用逗号分隔" json:"verify_types"`
// CreatedAt/UpdatedAt时间字段返回为 created_at/updated_at便于前端展示
CreatedAt time.Time `gorm:"comment:创建时间" json:"created_at"`
UpdatedAt time.Time `gorm:"comment:更新时间" json:"updated_at"`
}

19
models/settings.go Normal file
View File

@@ -0,0 +1,19 @@
package models
import "time"
// Settings 系统设置表模型
// 用于存储应用的配置参数
// Name 为配置项名称,唯一索引
// Value 为配置项的值
// Description 为配置项描述说明
// CreatedAt/UpdatedAt 由 GORM 自动维护
type Settings struct {
ID uint `gorm:"primaryKey;comment:设置ID自增主键"`
Name string `gorm:"uniqueIndex;size:64;not null;comment:配置项名称,唯一索引"`
Value string `gorm:"type:text;comment:配置项的值"`
Description string `gorm:"size:255;comment:配置项描述说明"`
CreatedAt time.Time `gorm:"comment:创建时间"`
UpdatedAt time.Time `gorm:"comment:更新时间"`
}

16
models/user.go Normal file
View File

@@ -0,0 +1,16 @@
package models
import "time"
// User 用户表模型
// 说明PasswordSalt 使用 32 字节随机盐(以 16 进制存储为 64 个字符),因此列长度设置为 64
type User struct {
ID uint `gorm:"primaryKey;comment:用户ID自增主键"`
Username string `gorm:"uniqueIndex;size:64;not null;comment:用户名,唯一索引"`
Password string `gorm:"size:255;not null;comment:密码哈希值"`
PasswordSalt string `gorm:"size:64;not null;comment:密码加密盐值"`
Role int `gorm:"not null;comment:用户角色0=管理员1=普通用户"`
CreatedAt time.Time `gorm:"comment:创建时间"`
UpdatedAt time.Time `gorm:"comment:更新时间"`
}