宇恒一号官网

This commit is contained in:
whm
2026-03-17 00:59:32 +08:00
commit eb56519df7
105 changed files with 10783 additions and 0 deletions

77
server/models/user.go Normal file
View File

@@ -0,0 +1,77 @@
package models
import (
"fmt"
"time"
"go.mongodb.org/mongo-driver/v2/bson"
)
const (
RoleIDSuperAdmin = 9527 // 超级管理员(后台登录)
RoleIDSuperUser = 0 // 超级用户role_id=0 且 role=admin可配置短信平台
RoleIDUser = 1 // 普通用户
)
// FlexDate 可解码 BSON DateTime 或 string统一以 string 输出(兼容库中既有日期类型又有字符串的情况)
type FlexDate string
func (d *FlexDate) UnmarshalBSONValue(typ byte, data []byte) error {
rv := bson.RawValue{Type: bson.Type(typ), Value: data}
switch bson.Type(typ) {
case bson.TypeDateTime:
if dt, ok := rv.DateTimeOK(); ok {
*d = FlexDate(time.UnixMilli(dt).Format("2006-01-02"))
}
return nil
case bson.TypeString:
if s, ok := rv.StringValueOK(); ok {
*d = FlexDate(s)
}
return nil
case bson.TypeNull, bson.TypeUndefined:
*d = ""
return nil
default:
return fmt.Errorf("FlexDate: cannot decode type %v", typ)
}
}
type User struct {
ID bson.ObjectID `bson:"_id,omitempty" json:"id,omitempty"`
Username string `bson:"username" json:"username"`
Mobile string `bson:"mobile,omitempty" json:"mobile,omitempty"`
Email string `bson:"email" json:"email"`
Password string `bson:"password" json:"-"` // 不返回给前端
Role string `bson:"role" json:"role"`
RoleID int `bson:"role_id,omitempty" json:"role_id"` // 9527=超级管理员 1=普通用户
IsBeta bool `bson:"is_beta,omitempty" json:"is_beta"`
TrialStartDate FlexDate `bson:"trial_start_date,omitempty" json:"trial_start_date,omitempty"`
TrialEndDate FlexDate `bson:"trial_end_date,omitempty" json:"trial_end_date,omitempty"`
LastLogin string `bson:"lastLogin,omitempty" json:"last_login,omitempty"`
LLM string `bson:"llm,omitempty" json:"llm,omitempty"`
}
type UserCreateInput struct {
Username string `json:"username" binding:"required"`
Email string `json:"email" binding:"required"`
Password string `json:"password" binding:"required"`
Role string `json:"role"`
RoleID int `json:"role_id"` // 9527=超级管理员 1=普通用户
IsBeta bool `json:"is_beta"`
TrialStartDate string `json:"trial_start_date"`
TrialEndDate string `json:"trial_end_date"`
LLM string `json:"llm"`
}
type UserUpdateInput struct {
Username *string `json:"username"`
Email *string `json:"email"`
Password *string `json:"password"` // 若提供则更新
Role *string `json:"role"`
RoleID *int `json:"role_id"`
IsBeta *bool `json:"is_beta"`
TrialStartDate *string `json:"trial_start_date"`
TrialEndDate *string `json:"trial_end_date"`
LLM *string `json:"llm"`
}