package admin import ( "cls-server/internal/application/crypto" "cls-server/internal/domain/admin" "cls-server/pkg/logger" ) type AdminService struct { repo admin.AdminRepository phoneEncryption *crypto.PhoneEncryptionService passwordHash *crypto.PasswordHashService log logger.Logger } func NewAdminService(repo admin.AdminRepository, phoneEncryption *crypto.PhoneEncryptionService, passwordHash *crypto.PasswordHashService, log logger.New) *AdminService { return &AdminService{repo, phoneEncryption, passwordHash, log("cls-server:application:admin")} } func (a *AdminService) Register(dto *AdminDto) error { err := a.repo.Create(&admin.Admin{ Username: dto.Username, Phone: dto.Phone, Password: dto.Password, Salt: a.passwordHash.GenerateSalt(dto.Username, dto.Password, dto.Phone), }) if err != nil { a.log.Error(err) } return err } func (a *AdminService) GetAdminProfile(data *AdminDto) error { if data.Username == "" { return nil } au, err := a.repo.FindAdminByUsername(data.Username) if err != nil { a.log.Error(err) return err } sP, err := a.phoneEncryption.StringPhone(au.Phone) if err != nil { a.log.Error(err) sP = "" } data.AdminId = au.Id data.Phone = sP return nil } func (a *AdminService) UpdatePassword(dto *AdminDto) error { ad, err := a.repo.FindAdminByUsername(dto.Username) if err != nil { a.log.Error(err.Error()) return err } ad.Password, err = a.passwordHash.Hash(dto.Password) if err != nil { a.log.Error(err.Error()) return err } err = a.repo.UpdatePassword(ad) if err != nil { a.log.Error(err.Error()) } return err } func (a *AdminService) UpdatePhone(dto *AdminDto) error { ad, err := a.repo.FindAdminByUsername(dto.Username) if err != nil { a.log.Error(err.Error()) return err } ad.Phone, err = a.phoneEncryption.Encrypt(dto.Phone) if err != nil { a.log.Error(err.Error()) return err } err = a.repo.UpdatePhone(ad) if err != nil { a.log.Error(err.Error()) } return err }