Files
web/server/models/user.go
2026-03-17 01:00:11 +08:00

78 lines
2.8 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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"`
}