feat: user: allow to query profile and create if not exists (transaction)
This commit is contained in:
parent
97c0eed6ef
commit
09611857c9
@ -22,3 +22,22 @@ func (s *service) Profile(uid uint) (*model.User, e.Status) {
|
||||
|
||||
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
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ type Service interface {
|
||||
Login(data *LoginData) (*model.User, e.Status)
|
||||
IncrVersion(uid uint) (int64, e.Status)
|
||||
Profile(uid uint) (*model.User, e.Status)
|
||||
ProfileOrCreate(data *CreateData) (*model.User, e.Status)
|
||||
|
||||
HealthCheck() error
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user