package grpc import ( "git.techease.ru/Smart-search/smart-search-back/internal/ai" "git.techease.ru/Smart-search/smart-search-back/internal/repository" "git.techease.ru/Smart-search/smart-search-back/internal/service" authpb "git.techease.ru/Smart-search/smart-search-back/pkg/pb/auth" invitepb "git.techease.ru/Smart-search/smart-search-back/pkg/pb/invite" requestpb "git.techease.ru/Smart-search/smart-search-back/pkg/pb/request" supplierpb "git.techease.ru/Smart-search/smart-search-back/pkg/pb/supplier" userpb "git.techease.ru/Smart-search/smart-search-back/pkg/pb/user" "github.com/jackc/pgx/v5/pgxpool" "go.uber.org/zap" "google.golang.org/grpc" ) type AuthHandler struct { authpb.UnimplementedAuthServiceServer authService service.AuthService logger *zap.Logger } type UserHandler struct { userpb.UnimplementedUserServiceServer userService service.UserService logger *zap.Logger } type InviteHandler struct { invitepb.UnimplementedInviteServiceServer inviteService service.InviteService logger *zap.Logger } type RequestHandler struct { requestpb.UnimplementedRequestServiceServer requestService service.RequestService logger *zap.Logger } type SupplierHandler struct { supplierpb.UnimplementedSupplierServiceServer supplierService service.SupplierService logger *zap.Logger } func NewHandlers(pool *pgxpool.Pool, jwtSecret, cryptoSecret, openAIKey, perplexityKey string, logger *zap.Logger) (*AuthHandler, *UserHandler, *InviteHandler, *RequestHandler, *SupplierHandler) { userRepo := repository.NewUserRepository(pool, cryptoSecret) sessionRepo := repository.NewSessionRepository(pool) inviteRepo := repository.NewInviteRepository(pool) requestRepo := repository.NewRequestRepository(pool) supplierRepo := repository.NewSupplierRepository(pool) tokenUsageRepo := repository.NewTokenUsageRepository(pool) txManager := repository.NewTxManager(pool) openAIClient := ai.NewOpenAIClient(openAIKey) perplexityClient := ai.NewPerplexityClient(perplexityKey) authService := service.NewAuthService(userRepo, sessionRepo, jwtSecret, cryptoSecret) userService := service.NewUserService(userRepo, requestRepo, cryptoSecret) inviteService := service.NewInviteService(inviteRepo, userRepo, txManager) requestService := service.NewRequestService(requestRepo, supplierRepo, tokenUsageRepo, userRepo, openAIClient, perplexityClient, txManager) supplierService := service.NewSupplierService(supplierRepo) return &AuthHandler{authService: authService, logger: logger}, &UserHandler{userService: userService, logger: logger}, &InviteHandler{inviteService: inviteService, logger: logger}, &RequestHandler{requestService: requestService, logger: logger}, &SupplierHandler{supplierService: supplierService, logger: logger} } func RegisterServices(s *grpc.Server, authH *AuthHandler, userH *UserHandler, inviteH *InviteHandler, requestH *RequestHandler, supplierH *SupplierHandler) { authpb.RegisterAuthServiceServer(s, authH) userpb.RegisterUserServiceServer(s, userH) invitepb.RegisterInviteServiceServer(s, inviteH) requestpb.RegisterRequestServiceServer(s, requestH) supplierpb.RegisterSupplierServiceServer(s, supplierH) }