niki/service/benefactor/benefactor/login.go

46 lines
1.2 KiB
Go

package benefactorservice
import (
"fmt"
"gameapp/param"
"gameapp/pkg/richerror"
)
func (s Service) Login(req param.LoginRequest) (param.LoginResponse, error) {
const op = "benefactorservice.Login"
// TODO - it would be better to user two separate method for existence check and getUserByPhoneNumber
user, err := s.repo.GetUserByPhoneNumber(req.PhoneNumber)
if err != nil {
return param.LoginResponse{}, richerror.New(op).WithErr(err).
WithMeta(map[string]interface{}{"phone_number": req.PhoneNumber})
}
if user.Password != getMD5Hash(req.Password) {
return param.LoginResponse{}, fmt.Errorf("username or password isn't correct")
}
accessToken, err := s.auth.CreateAccessToken(user)
if err != nil {
return param.LoginResponse{}, fmt.Errorf("unexpected error: %w", err)
}
refreshToken, err := s.auth.CreateRefreshToken(user)
if err != nil {
return param.LoginResponse{}, fmt.Errorf("unexpected error: %w", err)
}
return param.LoginResponse{
User: param.UserInfo{
ID: user.ID,
PhoneNumber: user.PhoneNumber,
Name: user.Name,
},
Tokens: param.Tokens{
AccessToken: accessToken,
RefreshToken: refreshToken,
},
}, nil
}