package driverapp import ( "git.gocasts.ir/ebhomengo/niki/adapter/kavenegar" "git.gocasts.ir/ebhomengo/niki/adapter/redis" "git.gocasts.ir/ebhomengo/niki/driverapp/delivery/http" repo "git.gocasts.ir/ebhomengo/niki/driverapp/repository/mysql" otp "git.gocasts.ir/ebhomengo/niki/driverapp/repository/redis" "git.gocasts.ir/ebhomengo/niki/driverapp/service" "git.gocasts.ir/ebhomengo/niki/pkg/http_server" "git.gocasts.ir/ebhomengo/niki/repository/mysql" ) type Application struct { driverSvc service.Service driverRepo repo.DriverRepo driverRepoOtp otp.RepositoryOtp driverHandler http.Handler driverHttpServer http.Server driverConfig Config } func Setup(config Config, conn *mysql.DB) Application { driverRepo := repo.New(conn) connRedis := redis.New(config.Redis) driverRepoOtp := otp.NewRepositoryOtp(connRedis) kavenegarSms := kavenegar.New(config.Kavenegar) driverValidator := service.NewValidator() driverSvc := service.NewService(config.DriverSvc, driverRepoOtp, driverRepo, kavenegarSms, driverValidator) driverHandler := http.NewHandler(driverSvc) httpServer := http_server.NewServer(config.HttpServer) return Application{ driverSvc: driverSvc, driverRepo: driverRepo, driverRepoOtp: driverRepoOtp, driverHandler: driverHandler, driverHttpServer: http.New(httpServer, driverHandler), driverConfig: config, } } func (app Application) Start() { app.driverHttpServer.Serve() }