diff --git a/app/users/rpc/admin_init.go b/app/users/rpc/admin_init.go index 38b4190..fb40bf4 100644 --- a/app/users/rpc/admin_init.go +++ b/app/users/rpc/admin_init.go @@ -4,6 +4,7 @@ import ( "context" "os" "strings" + "time" "juwan-backend/app/snowflake/rpc/snowflake" "juwan-backend/app/users/rpc/internal/models/users" @@ -21,40 +22,53 @@ func initAdmin(svcCtx *svc.ServiceContext) { return } - ctx := context.Background() - exists, _ := svcCtx.UsersModelRW.Users.Query().Where(users.UsernameEQ(username)).Exist(ctx) - if exists { - return - } + go func() { + ctx := context.Background() + for i := range 30 { + exists, err := svcCtx.UsersModelRW.Users.Query().Where(users.UsernameEQ(username)).Exist(ctx) + if err != nil { + if i < 29 { + time.Sleep(time.Second) + continue + } + logx.Errorf("check admin user: %v", err) + return + } + if exists { + return + } + break + } - hashedPassword, err := pwdUtils.HashPassword(password) - if err != nil { - logx.Errorf("hash admin password: %v", err) - return - } + hashedPassword, err := pwdUtils.HashPassword(password) + if err != nil { + logx.Errorf("hash admin password: %v", err) + return + } - resp, err := svcCtx.Snowflake.NextId(ctx, &snowflake.NextIdReq{}) - if err != nil { - logx.Errorf("generate admin user ID: %v", err) - return - } + resp, err := svcCtx.Snowflake.NextId(ctx, &snowflake.NextIdReq{}) + if err != nil { + logx.Errorf("generate admin user ID: %v", err) + return + } - _, err = svcCtx.UsersModelRW.Users.Create(). - SetID(resp.Id). - SetUsername(username). - SetPasswordHash(hashedPassword). - SetEmail(email). - SetPhone(""). - SetBio(""). - SetAvatar(""). - SetCurrentRole("consumer"). - SetNickname(username). - SetIsAdmin(true). - Save(ctx) - if err != nil { - logx.Errorf("create admin user: %v", err) - return - } + _, err = svcCtx.UsersModelRW.Users.Create(). + SetID(resp.Id). + SetUsername(username). + SetPasswordHash(hashedPassword). + SetEmail(email). + SetPhone(""). + SetBio(""). + SetAvatar(""). + SetCurrentRole("consumer"). + SetNickname(username). + SetIsAdmin(true). + Save(ctx) + if err != nil { + logx.Errorf("create admin user: %v", err) + return + } - logx.Infof("initialized admin user: %s", username) + logx.Infof("initialized admin user: %s", username) + }() }