niki/driverapp/app.go

48 lines
1.4 KiB
Go

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()
}