feat: user: allow to query profile and create if not exists (transaction)

This commit is contained in:
Paul Pan 2024-01-03 00:54:15 +08:00
parent 97c0eed6ef
commit 09611857c9
Signed by: Paul
GPG Key ID: D639BDF5BA578AF4
2 changed files with 20 additions and 0 deletions

View File

@ -22,3 +22,22 @@ func (s *service) Profile(uid uint) (*model.User, e.Status) {
return user, e.Success return user, e.Success
} }
func (s *service) ProfileOrCreate(data *CreateData) (*model.User, e.Status) {
user := &model.User{
UserName: data.UserName,
NickName: data.NickName,
Role: model.RoleGeneral,
IsEnabled: true,
}
// Notice: FirstOrCreate will not update the record if it exists, and also we should not update the record
// Notice: OAuth2 created user will not have password
err := s.db.Get().Where(model.User{UserName: data.UserName}).FirstOrCreate(&user, data).Error
if err != nil {
s.log.Warn("DatabaseError", zap.Error(err), zap.Any("user", user))
return nil, e.DatabaseError
}
return user, e.Success
}

View File

@ -17,6 +17,7 @@ type Service interface {
Login(data *LoginData) (*model.User, e.Status) Login(data *LoginData) (*model.User, e.Status)
IncrVersion(uid uint) (int64, e.Status) IncrVersion(uid uint) (int64, e.Status)
Profile(uid uint) (*model.User, e.Status) Profile(uid uint) (*model.User, e.Status)
ProfileOrCreate(data *CreateData) (*model.User, e.Status)
HealthCheck() error HealthCheck() error
} }