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
|
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)
|
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
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user