forked from ebhomengo/niki
80 lines
4.1 KiB
Go
80 lines
4.1 KiB
Go
package main
|
|
|
|
import (
|
|
"git.gocasts.ir/ebhomengo/niki/adapter/redis"
|
|
smsprovider "git.gocasts.ir/ebhomengo/niki/adapter/sms_provider/kavenegar"
|
|
kavenegarotp "git.gocasts.ir/ebhomengo/niki/adapter/sms_provider/kavenegar/otp"
|
|
"git.gocasts.ir/ebhomengo/niki/config"
|
|
httpserver "git.gocasts.ir/ebhomengo/niki/delivery/http_server"
|
|
"git.gocasts.ir/ebhomengo/niki/repository/migrator"
|
|
"git.gocasts.ir/ebhomengo/niki/repository/mysql"
|
|
mysqladdress "git.gocasts.ir/ebhomengo/niki/repository/mysql/address"
|
|
mysqladmin "git.gocasts.ir/ebhomengo/niki/repository/mysql/admin"
|
|
mysqlbenefactor "git.gocasts.ir/ebhomengo/niki/repository/mysql/benefactor"
|
|
mysqlkindboxreq "git.gocasts.ir/ebhomengo/niki/repository/mysql/kind_box_req"
|
|
redisotp "git.gocasts.ir/ebhomengo/niki/repository/redis/redis_otp"
|
|
adminservice "git.gocasts.ir/ebhomengo/niki/service/admin/admin"
|
|
adminkindboxreqservice "git.gocasts.ir/ebhomengo/niki/service/admin/kind_box_req"
|
|
adminauthservice "git.gocasts.ir/ebhomengo/niki/service/auth/admin"
|
|
authservice "git.gocasts.ir/ebhomengo/niki/service/auth/benefactor"
|
|
benefactoraddressservice "git.gocasts.ir/ebhomengo/niki/service/benefactor/address"
|
|
benefactorservice "git.gocasts.ir/ebhomengo/niki/service/benefactor/benefactor"
|
|
benefactorkindboxreqservice "git.gocasts.ir/ebhomengo/niki/service/benefactor/kind_box_req"
|
|
adminvalidator "git.gocasts.ir/ebhomengo/niki/validator/admin/admin"
|
|
adminkindboxreqvalidator "git.gocasts.ir/ebhomengo/niki/validator/admin/kind_box_req"
|
|
benefactorvalidator "git.gocasts.ir/ebhomengo/niki/validator/benefactor/benefactor"
|
|
benefactorkindboxreqvalidator "git.gocasts.ir/ebhomengo/niki/validator/benefactor/kind_box_req"
|
|
_ "github.com/go-sql-driver/mysql"
|
|
)
|
|
|
|
func main() {
|
|
cfg := config.C()
|
|
// TODO - add command for migrations
|
|
mgr := migrator.New(cfg.Mysql)
|
|
mgr.Up()
|
|
|
|
authSvc, benefactorSvc, benefactorVld, benefactorKindBoxReqSvc, benefactorKindBoxReqVld, benefactorAddressSvc,
|
|
adminSvc, adminVld, adminAuthSvc, adminKindBoxReqSvc, adminKindBoxReqVld := setupServices(cfg)
|
|
server := httpserver.New(cfg, benefactorSvc, benefactorVld, authSvc, benefactorKindBoxReqSvc, benefactorKindBoxReqVld,
|
|
benefactorAddressSvc, adminSvc, adminVld, adminAuthSvc, adminKindBoxReqSvc, adminKindBoxReqVld)
|
|
server.Serve()
|
|
}
|
|
|
|
//nolint:nakedret,gocritic // we are sure of this
|
|
func setupServices(cfg config.Config) (
|
|
authSvc authservice.Service, benefactorSvc benefactorservice.Service, benefactorVld benefactorvalidator.Validator,
|
|
benefactorKindBoxReqSvc benefactorkindboxreqservice.Service, benefactorKindBoxReqVld benefactorkindboxreqvalidator.Validator,
|
|
benefactorAddressSvc benefactoraddressservice.Service, adminSvc adminservice.Service, adminVld adminvalidator.Validator, adminAuthSvc adminauthservice.Service,
|
|
adminKindBoxReqSvc adminkindboxreqservice.Service, adminKindBoxReqVld adminkindboxreqvalidator.Validator,
|
|
) {
|
|
authSvc = authservice.New(cfg.Auth)
|
|
|
|
MysqlRepo := mysql.New(cfg.Mysql)
|
|
|
|
redisAdapter := redis.New(cfg.Redis)
|
|
RedisOtp := redisotp.New(redisAdapter)
|
|
benefactorMysql := mysqlbenefactor.New(MysqlRepo)
|
|
kavenegarSmsProvider := smsprovider.New(cfg.KavenegarSmsProvider)
|
|
otpSmsProvider := kavenegarotp.New(kavenegarSmsProvider)
|
|
authGenerator := authservice.New(cfg.Auth)
|
|
|
|
benefactorSvc = benefactorservice.New(cfg.BenefactorSvc, RedisOtp, otpSmsProvider, authGenerator, benefactorMysql)
|
|
benefactorAddressMysql := mysqladdress.New(MysqlRepo)
|
|
benefactorAddressSvc = benefactoraddressservice.New(benefactorAddressMysql)
|
|
benefactorVld = benefactorvalidator.New(benefactorSvc, benefactorAddressSvc)
|
|
|
|
benefactorKindBoxReqMysql := mysqlkindboxreq.New(MysqlRepo)
|
|
benefactorKindBoxReqSvc = benefactorkindboxreqservice.New(benefactorKindBoxReqMysql)
|
|
benefactorKindBoxReqVld = benefactorkindboxreqvalidator.New(benefactorKindBoxReqMysql, benefactorSvc, benefactorAddressSvc)
|
|
|
|
adminKindBoxReqSvc = adminkindboxreqservice.New(benefactorKindBoxReqMysql)
|
|
adminKindBoxReqVld = adminkindboxreqvalidator.New(benefactorKindBoxReqMysql)
|
|
|
|
adminAuthSvc = adminauthservice.New(cfg.AdminAuth)
|
|
adminMysql := mysqladmin.New(MysqlRepo)
|
|
adminVld = adminvalidator.New(adminMysql)
|
|
adminSvc = adminservice.New(adminMysql, adminAuthSvc)
|
|
|
|
return
|
|
}
|