Files
smart-search-back/cmd/server/main.go
vallyenfail 33b70d1ee4
All checks were successful
Deploy Smart Search Backend Test / deploy (push) Successful in 2m55s
add service
2026-01-19 17:20:21 +03:00

92 lines
2.5 KiB
Go

package main
import (
"context"
"os"
"github.com/jackc/pgx/v5/pgxpool"
_ "github.com/jackc/pgx/v5/stdlib"
rkboot "github.com/rookie-ninja/rk-boot/v2"
rkentry "github.com/rookie-ninja/rk-entry/v2/entry"
rkgrpc "github.com/rookie-ninja/rk-grpc/v2/boot"
"go.uber.org/zap"
"google.golang.org/grpc"
"git.techease.ru/Smart-search/smart-search-back/internal/config"
"git.techease.ru/Smart-search/smart-search-back/internal/database"
grpcServer "git.techease.ru/Smart-search/smart-search-back/internal/grpc"
"git.techease.ru/Smart-search/smart-search-back/internal/repository"
"git.techease.ru/Smart-search/smart-search-back/internal/worker"
)
func main() {
boot := rkboot.NewBoot(rkboot.WithBootConfigPath("config/boot.yaml", nil))
loggerEntry := rkentry.GlobalAppCtx.GetLoggerEntry("smart-search-logger")
if loggerEntry == nil {
loggerEntry = rkentry.GlobalAppCtx.GetLoggerEntryDefault()
}
logger := loggerEntry.Logger
cfg, err := config.Load("config/config.yaml")
if err != nil {
logger.Fatal("Failed to load config", zap.Error(err))
}
ctx := context.Background()
if err := database.RunMigrations(cfg.DatabaseURL(), logger); err != nil {
logger.Fatal("Failed to run migrations", zap.Error(err))
}
pool, err := pgxpool.New(ctx, cfg.DatabaseURL())
if err != nil {
logger.Fatal("Failed to connect to database", zap.Error(err))
}
defer pool.Close()
if err := pool.Ping(ctx); err != nil {
logger.Fatal("Failed to ping database", zap.Error(err))
}
logger.Info("Successfully connected to database")
grpcEntry := rkgrpc.GetGrpcEntry("smart-search-service")
if grpcEntry == nil {
logger.Fatal("Failed to get gRPC entry from rk-boot")
os.Exit(1)
}
sessionRepo := repository.NewSessionRepository(pool)
inviteRepo := repository.NewInviteRepository(pool)
sessionCleaner := worker.NewSessionCleaner(ctx, sessionRepo, logger)
sessionCleaner.Start()
defer sessionCleaner.Stop()
inviteCleaner := worker.NewInviteCleaner(ctx, inviteRepo, logger)
inviteCleaner.Start()
defer inviteCleaner.Stop()
authHandler, userHandler, inviteHandler, requestHandler, supplierHandler := grpcServer.NewHandlers(
pool,
cfg.Security.JWTSecret,
cfg.Security.CryptoSecret,
cfg.AI.OpenAIKey,
cfg.AI.PerplexityKey,
logger,
)
grpcEntry.AddRegFuncGrpc(func(s *grpc.Server) {
grpcServer.RegisterServices(s, authHandler, userHandler, inviteHandler, requestHandler, supplierHandler)
})
boot.Bootstrap(ctx)
logger.Info("gRPC server started via rk-boot")
boot.WaitForShutdownSig(ctx)
logger.Info("Server stopped gracefully")
}