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 }