package main import ( "context" log "github.com/sirupsen/logrus" "merch-parser-api/config" _ "merch-parser-api/docs" //for swagger "merch-parser-api/internal/api/merch" "merch-parser-api/internal/api/user" "merch-parser-api/internal/app" "merch-parser-api/internal/grpcService" "merch-parser-api/internal/imagesProvider" "merch-parser-api/internal/interfaces" "merch-parser-api/internal/mediaStorage" "merch-parser-api/internal/provider/auth" "merch-parser-api/internal/provider/token" "merch-parser-api/internal/router" "merch-parser-api/pkg/db" "merch-parser-api/pkg/utils" ) // @Title Merch Parser // @BasePath /api/v2 // @Version 2.0.0-alpha // @SecurityDefinitions.apikey BearerAuth // @In header // @Name Authorization // @Description Введите "Bearer {your_token}" для аутентификации func main() { log.Debug("Starting merch-parser-api") //setup config c := config.NewConfig() ctx := context.Background() //log level config.LogSetup(c.AppConf.LogLvl) database, err := db.Connection(c) if err != nil { log.WithError(err).Fatal("Main | Error connecting to database") } //base providers jwtProvider := token.NewJWT(token.Deps{ SecretKey: c.JWTConf.Secret, Issuer: c.JWTConf.Issuer, AccessExpire: c.JWTConf.AccessExpire, RefreshExpire: c.JWTConf.RefreshExpire, }) log.Debug("JWT provider initialized") utilsProvider := utils.NewUtils() log.Debug("Utils provider initialized") mediaProvider := mediaStorage.NewHandler(mediaStorage.Deps{ Endpoint: c.MediaConf.Endpoint, User: c.MediaConf.User, Password: c.MediaConf.Password, Secure: c.MediaConf.Secure, }) log.WithFields(log.Fields{ "endpoint": c.MediaConf.Endpoint, "provider": mediaProvider, }).Debug("Media storage | Minio client created") imageProvider := imagesProvider.NewClient(c.ImageConf.Host + ":" + c.ImageConf.Port) //deps providers routerHandler := router.NewRouter(router.Deps{ ApiPrefix: c.AppConf.ApiPrefix, GinMode: c.AppConf.GinMode, TokenProv: jwtProvider, AllowedOrigins: c.AppConf.AllowedOrigins, }) log.Debug("Router handler initialized") authProvider := auth.NewHandler(auth.Deps{ DB: database, JwtProvider: jwtProvider, Utils: utilsProvider, }) log.Debug("Auth provider initialized") tasksRepo := merch.NewTaskRepository(database) tasksProvider := merch.NewTaskProvider(tasksRepo) grpcServer := grpcService.NewGrpcServer(tasksProvider) //register app modules users := user.NewHandler(user.Deps{ Auth: authProvider, DB: database, Utils: utilsProvider, ApiPrefix: c.AppConf.ApiPrefix, }) merchModule := merch.NewHandler(merch.Deps{ DB: database, Utils: utilsProvider, Media: mediaProvider, ImageStorage: imageProvider, }) //collect modules modules := []interfaces.Module{ users, merchModule, } //keep last appl := app.NewApp(app.Deps{ Host: c.AppConf.Host, Port: c.AppConf.Port, ApiPrefix: c.AppConf.ApiPrefix, RouterHandler: routerHandler, Modules: modules, GrpcServer: grpcServer, GrpcServerPort: c.GrpcConf.GrpcServerPort, GrpcClientPort: c.GrpcConf.GrpcClientPort, }) err = appl.Run(ctx) if err != nil { log.WithError(err).Fatal("Main | Error starting app") return } }