package router import ( "database/sql" "github.com/gin-gonic/gin" "github.com/luxsin/app-api/internal/cache" "github.com/luxsin/app-api/internal/config" "github.com/luxsin/app-api/internal/handler" "github.com/luxsin/app-api/internal/middleware" "github.com/luxsin/app-api/internal/repository" "github.com/luxsin/app-api/internal/search" "github.com/luxsin/app-api/internal/storage" "github.com/redis/go-redis/v9" "go.uber.org/zap" ) func New(log *zap.Logger, db *sql.DB, searchClient *search.Client, rdb *redis.Client, eqCfg config.EqualizeConfig, s3 *storage.S3Storage) *gin.Engine { r := gin.New() r.Use(gin.Recovery()) r.Use(middleware.RequestID()) r.Use(middleware.Logger(log)) r.Use(middleware.CORS()) // Cache brandCache := cache.NewBrandCache(rdb) modelCache := cache.NewModelCache(rdb) curveCache := cache.NewCurveCache(rdb) // Repository brandRepo := repository.NewBrandRepository(db, brandCache) modelRepo := repository.NewModelRepository(db, modelCache) otaRepo := repository.NewOTARepository(db) curveRepo := repository.NewCurveRepository(db) // Handler health := handler.NewHealthHandler() brand := handler.NewBrandHandler(brandRepo, log) model := handler.NewModelHandler(modelRepo, log) modelList := handler.NewModelListHandler(searchClient, log) device := handler.NewDeviceHandler(rdb, log) ota := handler.NewOTAHandler(otaRepo, log) curve := handler.NewCurveHandler(curveRepo, curveCache, eqCfg, s3, log) modelCSV := handler.NewModelCSVHandler(s3, log) v1 := r.Group("/api/v1") { v1.GET("/health", health.Check) } audio := r.Group("/audio") { audio.GET("/getBrand", brand.GetBrand) audio.GET("/getModel", model.GetModel) audio.GET("/modelList", modelList.ModelList) audio.GET("/reportDevInfo", device.ReportDevInfo) audio.GET("/ota", ota.GetOTA) audio.GET("/getCurve", curve.GetCurve) audio.GET("/modelCurve", curve.ModelCurve) audio.GET("/getModelCSV", modelCSV.GetModelCSV) } return r }