niki/benefactorapp/app.go

63 lines
1.8 KiB
Go

package benefactorapp
import (
"context"
benefactorHttp "git.gocasts.ir/ebhomengo/niki/benefactorapp/delivery/http"
repo "git.gocasts.ir/ebhomengo/niki/benefactorapp/repository/database"
benefactor "git.gocasts.ir/ebhomengo/niki/benefactorapp/service"
mySql "git.gocasts.ir/ebhomengo/niki/pkg/database/mysql"
httpserver "git.gocasts.ir/ebhomengo/niki/pkg/httpserver"
logger "git.gocasts.ir/ebhomengo/niki/pkg/logger"
)
type Application struct {
Config Config
HTTPServer benefactorHttp.Server
BenefactorService benefactor.Service
BenefactorHandler benefactorHttp.Handler
BenefactorRepo benefactor.Repository
DBConn mySql.DB
}
func Setup(ctx context.Context, config Config, DB mySql.DB) *Application {
log := logger.L()
log.Info("logger starting ...")
db := mySql.New(config.MySQLDB)
defer func() {
if err := db.CloseStatements(); err != nil {
log.Info("Error closing statements: %v\n", err)
}
}()
log.Info("mysql connection starting ...")
// Initialize repositories
benefactorRepo := repo.New(db)
benefactorValidator := benefactor.NewValidator(benefactorRepo)
benefactorSvc := benefactor.NewService(benefactorRepo, benefactorValidator)
benefactorHandler := benefactorHttp.NewHandler(benefactorSvc)
hServer, hErr := httpserver.New(config.HTTPServer)
if hErr != nil {
log.Error("Http Server error: %v,\n", hErr)
}
httpServer := benefactorHttp.NewServer(*hServer, *benefactorHandler)
return &Application{
Config: config,
HTTPServer: httpServer,
BenefactorService: benefactorSvc,
BenefactorHandler: *benefactorHandler,
BenefactorRepo: benefactorRepo,
DBConn: DB,
}
}
func (app *Application) Start() {
log := logger.L()
log.Info("app starting ...")
// TODO implementaion
}