user.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package model
  2. import (
  3. "time"
  4. "github.com/quagmt/udecimal"
  5. "github.com/uptrace/bun"
  6. )
  7. // User 用户模型
  8. type User struct {
  9. bun.BaseModel `bun:"table:users,alias:u"`
  10. ID int `bun:"id,pk,autoincrement" json:"id"`
  11. Name string `bun:"name,notnull" json:"name"`
  12. Description *string `bun:"description" json:"description"`
  13. Role string `bun:"role,default:'user'" json:"role"` // admin, user
  14. Tags []string `bun:"tags,type:jsonb" json:"tags"`
  15. // 供应商组
  16. ProviderGroup *string `bun:"provider_group" json:"providerGroup"`
  17. // 配额限制
  18. RPMLimit *int `bun:"rpm_limit" json:"rpmLimit"`
  19. LimitConcurrentSessions *int `bun:"limit_concurrent_sessions" json:"limitConcurrentSessions"`
  20. DailyLimitUSD *udecimal.Decimal `bun:"daily_limit_usd,type:numeric(10,2)" json:"dailyLimitUsd"`
  21. Limit5hUSD *udecimal.Decimal `bun:"limit_5h_usd,type:numeric(10,2)" json:"limit5hUsd"`
  22. LimitWeeklyUSD *udecimal.Decimal `bun:"limit_weekly_usd,type:numeric(10,2)" json:"limitWeeklyUsd"`
  23. LimitMonthlyUSD *udecimal.Decimal `bun:"limit_monthly_usd,type:numeric(10,2)" json:"limitMonthlyUsd"`
  24. LimitTotalUSD *udecimal.Decimal `bun:"limit_total_usd,type:numeric(10,2)" json:"limitTotalUsd"`
  25. // 日配额重置设置
  26. DailyResetMode string `bun:"daily_reset_mode,notnull,default:'fixed'" json:"dailyResetMode"` // fixed, rolling
  27. DailyResetTime string `bun:"daily_reset_time,notnull,default:'00:00'" json:"dailyResetTime"` // HH:mm 格式
  28. // 权限
  29. AllowedClients []string `bun:"allowed_clients,type:jsonb" json:"allowedClients"`
  30. AllowedModels []string `bun:"allowed_models,type:jsonb" json:"allowedModels"`
  31. // 状态
  32. IsEnabled *bool `bun:"is_enabled,notnull,default:true" json:"isEnabled"`
  33. ExpiresAt *time.Time `bun:"expires_at" json:"expiresAt"`
  34. DeletedAt *time.Time `bun:"deleted_at,soft_delete" json:"deletedAt"`
  35. CreatedAt time.Time `bun:"created_at,notnull,default:current_timestamp" json:"createdAt"`
  36. UpdatedAt time.Time `bun:"updated_at,notnull,default:current_timestamp" json:"updatedAt"`
  37. // 关联
  38. Keys []Key `bun:"rel:has-many,join:id=user_id" json:"keys,omitempty"`
  39. }
  40. // IsExpired 检查用户是否已过期
  41. func (u *User) IsExpired() bool {
  42. if u.ExpiresAt == nil {
  43. return false
  44. }
  45. return time.Now().After(*u.ExpiresAt)
  46. }
  47. // IsActive 检查用户是否处于活跃状态
  48. func (u *User) IsActive() bool {
  49. enabled := true
  50. if u.IsEnabled != nil {
  51. enabled = *u.IsEnabled
  52. }
  53. return enabled && !u.IsExpired() && u.DeletedAt == nil
  54. }
  55. // IsAdmin 检查用户是否是管理员
  56. func (u *User) IsAdmin() bool {
  57. return u.Role == "admin"
  58. }