user_group_rate.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package service
  2. import "context"
  3. // UserGroupRateEntry 分组下用户专属倍率/RPM 条目。
  4. // RateMultiplier 与 RPMOverride 均为指针以支持"未设置"语义(NULL)。
  5. type UserGroupRateEntry struct {
  6. UserID int64 `json:"user_id"`
  7. UserName string `json:"user_name"`
  8. UserEmail string `json:"user_email"`
  9. UserNotes string `json:"user_notes"`
  10. UserStatus string `json:"user_status"`
  11. RateMultiplier *float64 `json:"rate_multiplier,omitempty"`
  12. RPMOverride *int `json:"rpm_override,omitempty"`
  13. }
  14. // GroupRateMultiplierInput 批量设置分组倍率的输入条目
  15. type GroupRateMultiplierInput struct {
  16. UserID int64 `json:"user_id"`
  17. RateMultiplier float64 `json:"rate_multiplier"`
  18. }
  19. // GroupRPMOverrideInput 批量设置分组 RPM override 的输入条目。
  20. // RPMOverride 为 *int 以支持清除(nil)语义。
  21. type GroupRPMOverrideInput struct {
  22. UserID int64 `json:"user_id"`
  23. RPMOverride *int `json:"rpm_override"`
  24. }
  25. // UserGroupRateRepository 用户专属分组倍率/RPM 仓储接口。
  26. // 允许管理员为特定用户设置分组的专属计费倍率与 RPM 上限,覆盖分组默认值。
  27. type UserGroupRateRepository interface {
  28. // GetByUserID 获取用户所有专属分组 rate_multiplier(仅返回非 NULL 的条目)
  29. GetByUserID(ctx context.Context, userID int64) (map[int64]float64, error)
  30. // GetByUserAndGroup 获取用户在特定分组的专属 rate_multiplier(NULL 返回 nil)
  31. GetByUserAndGroup(ctx context.Context, userID, groupID int64) (*float64, error)
  32. // GetRPMOverrideByUserAndGroup 获取用户在特定分组的 rpm_override(NULL 返回 nil)
  33. GetRPMOverrideByUserAndGroup(ctx context.Context, userID, groupID int64) (*int, error)
  34. // GetByGroupID 获取指定分组下所有用户的专属配置(rate 与 rpm_override 任一非 NULL 即返回)
  35. GetByGroupID(ctx context.Context, groupID int64) ([]UserGroupRateEntry, error)
  36. // SyncUserGroupRates 同步用户的分组专属倍率;nil 表示清空该分组的 rate_multiplier
  37. SyncUserGroupRates(ctx context.Context, userID int64, rates map[int64]*float64) error
  38. // SyncGroupRateMultipliers 批量同步分组的用户专属倍率(替换整组 rate 部分)
  39. SyncGroupRateMultipliers(ctx context.Context, groupID int64, entries []GroupRateMultiplierInput) error
  40. // SyncGroupRPMOverrides 批量同步分组的用户专属 RPM(替换整组 rpm_override 部分)。
  41. // 条目中 RPMOverride 为 nil 时清空对应行的 rpm_override;非 nil 时 upsert。
  42. SyncGroupRPMOverrides(ctx context.Context, groupID int64, entries []GroupRPMOverrideInput) error
  43. // ClearGroupRPMOverrides 清空指定分组的所有 rpm_override(整组 rpm 部分归 NULL)
  44. ClearGroupRPMOverrides(ctx context.Context, groupID int64) error
  45. // DeleteByGroupID 删除指定分组的所有用户专属条目(分组删除时调用)
  46. DeleteByGroupID(ctx context.Context, groupID int64) error
  47. // DeleteByUserID 删除指定用户的所有专属条目(用户删除时调用)
  48. DeleteByUserID(ctx context.Context, userID int64) error
  49. }