功能更新

This commit is contained in:
李琦
2026-08-15 17:04:47 +08:00
parent d9475ac9da
commit b71b99a60d
49 changed files with 4976 additions and 438 deletions

50
internal/model/admin.go Normal file
View File

@@ -0,0 +1,50 @@
package model
// UserDailyActive 对应 user_daily_active。
type UserDailyActive struct {
UserID int64 `gorm:"primaryKey" json:"userId"`
ActiveDate string `gorm:"primaryKey;size:10" json:"activeDate"`
LastIP string `gorm:"column:last_ip;size:64;not null;default:''" json:"lastIp"`
LastSeenAt string `gorm:"column:last_seen_at;size:32;not null;default:''" json:"lastSeenAt"`
}
func (UserDailyActive) TableName() string { return "user_daily_active" }
// AIUsageDaily 对应 ai_usage_daily。
type AIUsageDaily struct {
UserID int64 `gorm:"primaryKey" json:"userId"`
TeamID int64 `gorm:"primaryKey;default:0" json:"teamId"`
UsageDate string `gorm:"primaryKey;size:10" json:"usageDate"`
Provider string `gorm:"primaryKey;size:32;not null;default:''" json:"provider"`
PromptTokens int64 `gorm:"not null;default:0" json:"promptTokens"`
CompletionTokens int64 `gorm:"not null;default:0" json:"completionTokens"`
Calls int `gorm:"not null;default:0" json:"calls"`
Estimated int `gorm:"not null;default:0" json:"estimated"`
}
func (AIUsageDaily) TableName() string { return "ai_usage_daily" }
// AppRelease 对应 app_releases。
type AppRelease struct {
ID int64 `gorm:"primaryKey" json:"id"`
Version string `gorm:"size:32;not null" json:"version"`
Channel string `gorm:"size:16;not null;default:stable" json:"channel"`
Filename string `gorm:"size:255;not null" json:"filename"`
SHA256 string `gorm:"column:sha256;size:64;not null;default:''" json:"sha256"`
SizeBytes int64 `gorm:"column:size_bytes;not null;default:0" json:"sizeBytes"`
Changelog string `gorm:"type:mediumtext;not null" json:"changelog"`
CreatedAt string `gorm:"size:32;not null" json:"createdAt"`
IsLatest int `gorm:"column:is_latest;not null;default:0" json:"isLatest"`
}
func (AppRelease) TableName() string { return "app_releases" }
// AdminStepup 对应 admin_stepup。
type AdminStepup struct {
UserID int64 `gorm:"primaryKey" json:"userId"`
TokenHash string `gorm:"column:token_hash;size:64;not null" json:"-"`
ClientIP string `gorm:"column:client_ip;size:64;not null;default:''" json:"clientIp"`
ExpiresAt string `gorm:"column:expires_at;size:32;not null" json:"expiresAt"`
}
func (AdminStepup) TableName() string { return "admin_stepup" }

View File

@@ -0,0 +1,12 @@
package model
// UserAvatarHistory 用户头像历史,对应 user_avatar_history。
type UserAvatarHistory struct {
ID int64 `gorm:"primaryKey;autoIncrement" json:"id"`
UserID int64 `gorm:"not null;index:idx_uah_user_id" json:"userId"`
Mode string `gorm:"size:16;not null;default:url" json:"mode"` // url | base64
Value string `gorm:"type:mediumtext;not null" json:"value"`
CreatedAt string `gorm:"size:32;not null" json:"createdAt"`
}
func (UserAvatarHistory) TableName() string { return "user_avatar_history" }

15
internal/model/profile.go Normal file
View File

@@ -0,0 +1,15 @@
package model
// UserProfile 对应 user_profiles。
type UserProfile struct {
UserID int64 `gorm:"primaryKey" json:"userId"`
Nickname string `gorm:"size:64;not null;default:''" json:"nickname"`
Title string `gorm:"size:64;not null;default:''" json:"title"`
Email string `gorm:"size:128;not null;default:''" json:"email"`
Bio string `gorm:"size:500;not null;default:''" json:"bio"`
TechTags string `gorm:"size:1000;not null;default:'[]'" json:"techTags"`
AvatarThumb string `gorm:"type:mediumtext;not null" json:"avatarThumb"`
UpdatedAt string `gorm:"size:32;not null" json:"updatedAt"`
}
func (UserProfile) TableName() string { return "user_profiles" }

62
internal/model/sync.go Normal file
View File

@@ -0,0 +1,62 @@
package model
// SyncTodo 对应 sync_todos。
type SyncTodo struct {
UserID int64 `gorm:"primaryKey" json:"userId"`
UUID string `gorm:"primaryKey;size:36" json:"uuid"`
Title string `gorm:"type:text;not null" json:"title"`
Content string `gorm:"type:mediumtext;not null" json:"content"`
ProjectName string `gorm:"size:255;not null;default:''" json:"projectName"`
DueAt string `gorm:"size:32;not null;default:''" json:"dueAt"`
Priority string `gorm:"size:16;not null;default:medium" json:"priority"`
Status string `gorm:"size:16;not null;default:open" json:"status"`
History string `gorm:"type:mediumtext;not null" json:"history"`
TeamID int64 `gorm:"not null;default:0;index" json:"teamId"`
CreatedAt string `gorm:"size:32;not null;default:''" json:"createdAt"`
UpdatedAt string `gorm:"size:32;not null" json:"updatedAt"`
Deleted int `gorm:"not null;default:0" json:"deleted"`
}
func (SyncTodo) TableName() string { return "sync_todos" }
// SyncTicket 对应 sync_tickets。
type SyncTicket struct {
UserID int64 `gorm:"primaryKey" json:"userId"`
UUID string `gorm:"primaryKey;size:36" json:"uuid"`
Title string `gorm:"type:text;not null" json:"title"`
Description string `gorm:"type:mediumtext;not null" json:"description"`
Type string `gorm:"size:16;not null;default:task" json:"type"`
ProjectName string `gorm:"size:255;not null;default:''" json:"projectName"`
StartAt string `gorm:"size:32;not null;default:''" json:"startAt"`
DueAt string `gorm:"size:32;not null;default:''" json:"dueAt"`
Status string `gorm:"size:16;not null;default:open" json:"status"`
Priority string `gorm:"size:16;not null;default:medium" json:"priority"`
History string `gorm:"type:mediumtext;not null" json:"history"`
TeamID int64 `gorm:"not null;default:0;index" json:"teamId"`
CreatedAt string `gorm:"size:32;not null;default:''" json:"createdAt"`
UpdatedAt string `gorm:"size:32;not null" json:"updatedAt"`
Deleted int `gorm:"not null;default:0" json:"deleted"`
}
func (SyncTicket) TableName() string { return "sync_tickets" }
// SyncNote 对应 sync_notes。
type SyncNote struct {
UserID int64 `gorm:"primaryKey" json:"userId"`
UUID string `gorm:"primaryKey;size:36" json:"uuid"`
Content string `gorm:"type:mediumtext;not null" json:"content"`
UpdatedAt string `gorm:"size:32;not null" json:"updatedAt"`
Deleted int `gorm:"not null;default:0" json:"deleted"`
}
func (SyncNote) TableName() string { return "sync_notes" }
// SyncSetting 对应 sync_settings。
type SyncSetting struct {
UserID int64 `gorm:"primaryKey" json:"userId"`
Name string `gorm:"primaryKey;size:64" json:"name"`
Value string `gorm:"type:mediumtext;not null" json:"value"`
UpdatedAt string `gorm:"size:32;not null" json:"updatedAt"`
}
func (SyncSetting) TableName() string { return "sync_settings" }

80
internal/model/team.go Normal file
View File

@@ -0,0 +1,80 @@
package model
// Team 对应 teams。
type Team struct {
ID int64 `gorm:"primaryKey" json:"id"`
Name string `gorm:"size:64;not null" json:"name"`
OwnerID int64 `gorm:"not null" json:"ownerId"`
DigestTime string `gorm:"size:8;not null;default:21:00" json:"digestTime"`
AIBanned int `gorm:"column:ai_banned;not null;default:0" json:"aiBanned"`
CreatedAt string `gorm:"size:32;not null" json:"createdAt"`
}
func (Team) TableName() string { return "teams" }
// TeamMember 对应 team_members。
type TeamMember struct {
TeamID int64 `gorm:"primaryKey" json:"teamId"`
UserID int64 `gorm:"primaryKey" json:"userId"`
Role string `gorm:"size:16;not null;default:member" json:"role"`
JoinedAt string `gorm:"size:32;not null" json:"joinedAt"`
}
func (TeamMember) TableName() string { return "team_members" }
// TeamTask 对应 team_tasks。
type TeamTask struct {
ID int64 `gorm:"primaryKey" json:"id"`
TeamID int64 `gorm:"not null;index" json:"teamId"`
Kind string `gorm:"size:16;not null;default:todo" json:"kind"`
Title string `gorm:"type:text;not null" json:"title"`
Description string `gorm:"type:mediumtext;not null" json:"description"`
Priority string `gorm:"size:16;not null;default:medium" json:"priority"`
Status string `gorm:"size:16;not null;default:open" json:"status"`
CreatorID int64 `gorm:"not null" json:"creatorId"`
AssigneeID int64 `gorm:"not null;default:0;index" json:"assigneeId"`
StartAt string `gorm:"size:32;not null;default:''" json:"startAt"`
DueAt string `gorm:"size:32;not null;default:''" json:"dueAt"`
UrgedAt string `gorm:"size:32;not null;default:''" json:"urgedAt"`
History string `gorm:"type:mediumtext;not null" json:"history"`
UpdatedAt string `gorm:"size:32;not null" json:"updatedAt"`
Deleted int `gorm:"not null;default:0" json:"deleted"`
}
func (TeamTask) TableName() string { return "team_tasks" }
// TeamReport 对应 team_reports。
type TeamReport struct {
TeamID int64 `gorm:"primaryKey" json:"teamId"`
UserID int64 `gorm:"primaryKey" json:"userId"`
Date string `gorm:"primaryKey;size:10" json:"date"`
Content string `gorm:"type:mediumtext;not null" json:"content"`
SubmittedAt string `gorm:"size:32;not null" json:"submittedAt"`
}
func (TeamReport) TableName() string { return "team_reports" }
// TeamDigest 对应 team_digests。
type TeamDigest struct {
TeamID int64 `gorm:"primaryKey" json:"teamId"`
Date string `gorm:"primaryKey;size:10" json:"date"`
Content string `gorm:"type:mediumtext;not null" json:"content"`
Provider string `gorm:"size:32;not null;default:''" json:"provider"`
GeneratedAt string `gorm:"size:32;not null" json:"generatedAt"`
}
func (TeamDigest) TableName() string { return "team_digests" }
// TeamNotice 对应 team_notices。
type TeamNotice struct {
ID int64 `gorm:"primaryKey" json:"id"`
TeamID int64 `gorm:"not null" json:"teamId"`
ToUser int64 `gorm:"not null;index" json:"toUser"`
FromUser int64 `gorm:"not null" json:"fromUser"`
Kind string `gorm:"size:16;not null" json:"kind"`
RefID string `gorm:"size:64;not null;default:''" json:"refId"`
Content string `gorm:"type:text;not null" json:"content"`
CreatedAt string `gorm:"size:32;not null" json:"createdAt"`
}
func (TeamNotice) TableName() string { return "team_notices" }

17
internal/model/user.go Normal file
View File

@@ -0,0 +1,17 @@
package model
// User 对应 users 表。
type User struct {
ID int64 `gorm:"primaryKey" json:"id"`
Username string `gorm:"size:64;uniqueIndex;not null" json:"username"`
PasswordHash string `gorm:"size:100;not null" json:"-"`
TOTPSecret string `gorm:"column:totp_secret;size:64;not null;default:''" json:"-"`
TOTPEnabled int `gorm:"column:totp_enabled;not null;default:0" json:"totpEnabled"`
LastLoginIP string `gorm:"column:last_login_ip;size:64;not null;default:''" json:"lastLoginIp"`
LastSeenAt string `gorm:"column:last_seen_at;size:32;not null;default:''" json:"lastSeenAt"`
AIBanned int `gorm:"column:ai_banned;not null;default:0" json:"aiBanned"`
Disabled int `gorm:"not null;default:0" json:"disabled"`
CreatedAt string `gorm:"size:32;not null" json:"createdAt"`
}
func (User) TableName() string { return "users" }