update
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
package auth
|
||||
|
||||
import (
|
||||
"enaklo-pos-be/internal/common/errors"
|
||||
"enaklo-pos-be/internal/common/logger"
|
||||
"enaklo-pos-be/internal/common/mycontext"
|
||||
"enaklo-pos-be/internal/entity"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type Repository interface {
|
||||
FindByEmail(ctx mycontext.Context, email string) (*entity.Customer, error)
|
||||
}
|
||||
|
||||
type CryptoSvc interface {
|
||||
GenerateJWTCustomer(user *entity.Customer) (string, error)
|
||||
CompareHashAndPassword(hash string, password string) bool
|
||||
}
|
||||
|
||||
type Service interface {
|
||||
AuthCustomer(ctx mycontext.Context, email, password string) (*entity.AuthenticateUser, error)
|
||||
}
|
||||
|
||||
type authSvc struct {
|
||||
repo Repository
|
||||
crypt CryptoSvc
|
||||
}
|
||||
|
||||
func New(repo Repository, cryptSvc CryptoSvc) Service {
|
||||
return &authSvc{
|
||||
repo: repo,
|
||||
crypt: cryptSvc,
|
||||
}
|
||||
}
|
||||
|
||||
func (a authSvc) AuthCustomer(ctx mycontext.Context, email, password string) (*entity.AuthenticateUser, error) {
|
||||
user, err := a.repo.FindByEmail(ctx, email)
|
||||
if err != nil {
|
||||
logger.ContextLogger(ctx).Error("error when get user", zap.Error(err))
|
||||
return nil, errors.ErrorInternalServer
|
||||
}
|
||||
|
||||
if user == nil {
|
||||
return nil, errors.ErrorUserIsNotFound
|
||||
}
|
||||
|
||||
if ok := a.crypt.CompareHashAndPassword(user.Password, password); !ok {
|
||||
return nil, errors.ErrorUserInvalidLogin
|
||||
}
|
||||
|
||||
signedToken, err := a.crypt.GenerateJWTCustomer(user)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return user.ToUserAuthenticate(signedToken), nil
|
||||
}
|
||||
Reference in New Issue
Block a user