add service
All checks were successful
Deploy Smart Search Backend / deploy (push) Successful in 1m47s

This commit is contained in:
vallyenfail
2026-01-20 19:02:06 +03:00
parent f8db0fd9e6
commit 8b9554720d
15 changed files with 2109 additions and 38 deletions

View File

@@ -9,6 +9,7 @@ import (
"git.techease.ru/Smart-search/smart-search-back/pkg/crypto"
"git.techease.ru/Smart-search/smart-search-back/pkg/errors"
"git.techease.ru/Smart-search/smart-search-back/pkg/jwt"
"git.techease.ru/Smart-search/smart-search-back/pkg/validation"
"github.com/jackc/pgx/v5"
)
@@ -40,8 +41,7 @@ func (s *authService) Login(ctx context.Context, email, password, ip, userAgent
return "", "", err
}
passwordHash := crypto.PasswordHash(password)
if user.PasswordHash != passwordHash {
if !crypto.PasswordVerify(password, user.PasswordHash) {
return "", "", errors.NewBusinessError(errors.AuthInvalidCredentials, "Invalid email or password")
}
@@ -71,22 +71,27 @@ func (s *authService) Login(ctx context.Context, email, password, ip, userAgent
return accessToken, refreshToken, nil
}
func (s *authService) Refresh(ctx context.Context, refreshToken string) (string, error) {
func (s *authService) Refresh(ctx context.Context, refreshToken string) (string, string, error) {
session, err := s.sessionRepo.FindByRefreshToken(ctx, refreshToken)
if err != nil {
return "", err
return "", "", err
}
newAccessToken, err := jwt.GenerateAccessToken(session.UserID, s.jwtSecret)
if err != nil {
return "", errors.NewInternalError(errors.InternalError, "failed to generate access token", err)
return "", "", errors.NewInternalError(errors.InternalError, "failed to generate access token", err)
}
if err := s.sessionRepo.UpdateAccessToken(ctx, refreshToken, newAccessToken); err != nil {
return "", err
newRefreshToken, err := jwt.GenerateRefreshToken(session.UserID, s.jwtSecret)
if err != nil {
return "", "", errors.NewInternalError(errors.InternalError, "failed to generate refresh token", err)
}
return newAccessToken, nil
if err := s.sessionRepo.UpdateTokens(ctx, refreshToken, newAccessToken, newRefreshToken); err != nil {
return "", "", err
}
return newAccessToken, newRefreshToken, nil
}
func (s *authService) Validate(ctx context.Context, accessToken string) (int, error) {
@@ -121,6 +126,10 @@ func (s *authService) Logout(ctx context.Context, accessToken string) error {
}
func (s *authService) Register(ctx context.Context, email, password, name, phone string, inviteCode int64, ip, userAgent string) (accessToken, refreshToken string, err error) {
if err := validation.ValidateRegistration(email, password, name, phone); err != nil {
return "", "", err
}
_, err = s.inviteRepo.FindActiveByCode(ctx, inviteCode)
if err != nil {
return "", "", err