package seed import ( "context" "errors" "log" "github.com/jackc/pgx/v5/pgconn" "booklib/internal/auth" "booklib/internal/store" ) func Admin(ctx context.Context, s *store.Store, user, pass string) error { if user == "" || pass == "" { return nil } if len(pass) < 8 { // 与 API 建户口令下限一致 log.Printf("seed admin skipped: ADMIN_PASSWORD must be >= 8 chars") return nil } n, err := s.CountUsers(ctx) if err != nil || n > 0 { return err } h, err := auth.HashPassword(pass) if err != nil { return err } if _, err := s.CreateUser(ctx, user, h, "admin"); err != nil { var pgErr *pgconn.PgError if errors.As(err, &pgErr) && pgErr.Code == "23505" { log.Printf("seed admin %q may already exist: %v", user, err) return nil } return err } log.Printf("seeded initial admin user %q", user) return nil }