78 lines
2.8 KiB
Go
78 lines
2.8 KiB
Go
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"`
|
||
}
|