forked from ebhomengo/niki
46 lines
1.2 KiB
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
|
|
}
|