Files
Datarush/internal/auth/handler/grpc/auth.go
T
2025-12-17 17:33:02 +03:00

78 lines
2.0 KiB
Go

package grpc
import (
"context"
"log"
"datarush/internal/auth/domain"
"datarush/internal/auth/service"
pb "datarush/pkg/api/auth"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
type AuthHandler struct {
pb.UnimplementedAuthServiceServer
authService *service.AuthService
}
func NewAuthHandler(authService *service.AuthService) *AuthHandler {
return &AuthHandler{
authService: authService,
}
}
func (h *AuthHandler) SignUp(ctx context.Context, req *pb.SignUpRequest) (*pb.SignUpResponse, error) {
token, err := h.authService.SignUp(ctx, req.Email, req.Username, req.Password)
if err != nil {
log.Printf("signup error: %v", err)
switch err {
case domain.ErrUserAlreadyExists:
return nil, status.Error(codes.AlreadyExists, "user already exists")
default:
return nil, status.Error(codes.Internal, "internal error")
}
}
return &pb.SignUpResponse{Token: token}, nil
}
func (h *AuthHandler) SignIn(ctx context.Context, req *pb.SignInRequest) (*pb.SignInResponse, error) {
token, err := h.authService.SignIn(ctx, req.Email, req.Password)
if err != nil {
log.Printf("signin error: %v", err)
switch err {
case domain.ErrInvalidPassword, domain.ErrUserNotFound:
return nil, status.Error(codes.Unauthenticated, "invalid credentials")
default:
return nil, status.Error(codes.Internal, "internal error")
}
}
return &pb.SignInResponse{Token: token}, nil
}
func (h *AuthHandler) ValidateToken(
ctx context.Context,
req *pb.ValidateTokenRequest,
) (*pb.ValidateTokenResponse, error) {
token := req.Token
if token == "" {
return nil, status.Error(codes.Unauthenticated, "missing token")
}
if token == "" {
return nil, status.Error(codes.Unauthenticated, "missing token")
}
user, err := h.authService.ValidateToken(ctx, token)
if err != nil {
log.Printf("validate token error: %v", err)
return nil, status.Error(codes.Unauthenticated, "invalid token")
}
return &pb.ValidateTokenResponse{UserId: user.ID.String()}, nil
}