| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- package repository
- import (
- "context"
- "fmt"
- "time"
- dbent "github.com/Wei-Shaw/sub2api/ent"
- "github.com/Wei-Shaw/sub2api/ent/setting"
- dbuser "github.com/Wei-Shaw/sub2api/ent/user"
- "github.com/Wei-Shaw/sub2api/internal/service"
- )
- const (
- simpleModeAdminConcurrencyUpgradeKey = "simple_mode_admin_concurrency_upgraded_30"
- simpleModeLegacyAdminConcurrency = 5
- simpleModeTargetAdminConcurrency = 30
- )
- func ensureSimpleModeAdminConcurrency(ctx context.Context, client *dbent.Client) error {
- if client == nil {
- return fmt.Errorf("nil ent client")
- }
- upgraded, err := client.Setting.Query().Where(setting.KeyEQ(simpleModeAdminConcurrencyUpgradeKey)).Exist(ctx)
- if err != nil {
- return fmt.Errorf("check admin concurrency upgrade marker: %w", err)
- }
- if upgraded {
- return nil
- }
- if _, err := client.User.Update().
- Where(
- dbuser.RoleIn(service.RoleAdmin, service.RoleSuperAdmin),
- dbuser.ConcurrencyEQ(simpleModeLegacyAdminConcurrency),
- ).
- SetConcurrency(simpleModeTargetAdminConcurrency).
- Save(ctx); err != nil {
- return fmt.Errorf("upgrade simple mode admin concurrency: %w", err)
- }
- now := time.Now()
- if err := client.Setting.Create().
- SetKey(simpleModeAdminConcurrencyUpgradeKey).
- SetValue(now.Format(time.RFC3339)).
- SetUpdatedAt(now).
- OnConflictColumns(setting.FieldKey).
- UpdateNewValues().
- Exec(ctx); err != nil {
- return fmt.Errorf("persist admin concurrency upgrade marker: %w", err)
- }
- return nil
- }
|