Spaces:
Sleeping
Sleeping
| package services | |
| import ( | |
| "errors" | |
| uuid "github.com/satori/go.uuid" | |
| "gorm.io/gorm" | |
| "pweb-api.abdanhafidz.com/models" | |
| "pweb-api.abdanhafidz.com/repositories" | |
| ) | |
| type RegisterService struct { | |
| Service[models.Account, models.Account] | |
| } | |
| func (s *RegisterService) Create() { | |
| if len(s.Constructor.Password) < 8 { | |
| s.Exception.InvalidPasswordLength = true | |
| s.Exception.Message = "Password must have at least 8 characters!" | |
| return | |
| } | |
| hashed_password, err_hash := HashPassword(s.Constructor.Password) | |
| s.Error = err_hash | |
| s.Constructor.Password = hashed_password | |
| s.Constructor.UUID = uuid.NewV4() | |
| accountCreated := repositories.CreateAccount(s.Constructor) | |
| if errors.Is(accountCreated.RowsError, gorm.ErrDuplicatedKey) { | |
| s.Exception.DataDuplicate = true | |
| s.Exception.Message = "Account with email " + s.Constructor.Email + " already exists!" | |
| return | |
| } else if errors.Is(accountCreated.RowsError, gorm.ErrModelAccessibleFieldsRequired) || errors.Is(accountCreated.RowsError, gorm.ErrInvalidData) || errors.Is(accountCreated.RowsError, gorm.ErrInvalidValue) || errors.Is(accountCreated.RowsError, gorm.ErrInvalidField) { | |
| s.Exception.BadRequest = true | |
| s.Exception.Message = "Bad request!" | |
| return | |
| } | |
| userProfile := UserProfileService{} | |
| userProfile.Constructor.AccountId = accountCreated.Result.Id | |
| userProfile.Create() | |
| if userProfile.Error != nil { | |
| s.Error = userProfile.Error | |
| return | |
| } | |
| s.Error = accountCreated.RowsError | |
| s.Result = accountCreated.Result | |
| s.Result.Password = "SECRET" | |
| } | |