forked from ebhomengo/niki
				
			✨ refactor: Clean up and modularize service initialization in main.go
- Organize service initialization into helper functions - Improve code readability and maintainability
This commit is contained in:
		
							parent
							
								
									4943e90d77
								
							
						
					
					
						commit
						430bd9a95c
					
				
							
								
								
									
										6
									
								
								go.mod
								
								
								
								
							
							
						
						
									
										6
									
								
								go.mod
								
								
								
								
							| 
						 | 
				
			
			@ -11,8 +11,10 @@ require (
 | 
			
		|||
	github.com/knadh/koanf v1.5.0
 | 
			
		||||
	github.com/labstack/echo-jwt/v4 v4.2.0
 | 
			
		||||
	github.com/labstack/echo/v4 v4.11.4
 | 
			
		||||
	github.com/oklog/ulid/v2 v2.1.0
 | 
			
		||||
	github.com/redis/go-redis/v9 v9.4.0
 | 
			
		||||
	github.com/rubenv/sql-migrate v1.6.0
 | 
			
		||||
	golang.org/x/crypto v0.17.0
 | 
			
		||||
	gopkg.in/natefinch/lumberjack.v2 v2.2.1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -21,7 +23,7 @@ require (
 | 
			
		|||
	github.com/cespare/xxhash/v2 v2.2.0 // indirect
 | 
			
		||||
	github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
 | 
			
		||||
	github.com/fatih/structs v1.1.0 // indirect
 | 
			
		||||
	github.com/fsnotify/fsnotify v1.4.9 // indirect
 | 
			
		||||
	github.com/fsnotify/fsnotify v1.7.0 // indirect
 | 
			
		||||
	github.com/go-gorp/gorp/v3 v3.1.0 // indirect
 | 
			
		||||
	github.com/golang-jwt/jwt v3.2.2+incompatible // indirect
 | 
			
		||||
	github.com/golang-jwt/jwt/v5 v5.0.0 // indirect
 | 
			
		||||
| 
						 | 
				
			
			@ -31,10 +33,8 @@ require (
 | 
			
		|||
	github.com/mitchellh/copystructure v1.2.0 // indirect
 | 
			
		||||
	github.com/mitchellh/mapstructure v1.5.0 // indirect
 | 
			
		||||
	github.com/mitchellh/reflectwalk v1.0.2 // indirect
 | 
			
		||||
	github.com/oklog/ulid/v2 v2.1.0 // indirect
 | 
			
		||||
	github.com/valyala/bytebufferpool v1.0.0 // indirect
 | 
			
		||||
	github.com/valyala/fasttemplate v1.2.2 // indirect
 | 
			
		||||
	golang.org/x/crypto v0.17.0 // indirect
 | 
			
		||||
	golang.org/x/net v0.19.0 // indirect
 | 
			
		||||
	golang.org/x/sys v0.15.0 // indirect
 | 
			
		||||
	golang.org/x/text v0.14.0 // indirect
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										3
									
								
								go.sum
								
								
								
								
							
							
						
						
									
										3
									
								
								go.sum
								
								
								
								
							| 
						 | 
				
			
			@ -55,8 +55,9 @@ github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5Kwzbycv
 | 
			
		|||
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
 | 
			
		||||
github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo=
 | 
			
		||||
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
 | 
			
		||||
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
 | 
			
		||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
 | 
			
		||||
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
 | 
			
		||||
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
 | 
			
		||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 | 
			
		||||
github.com/go-gorp/gorp/v3 v3.1.0 h1:ItKF/Vbuj31dmV4jxA1qblpSwkl9g1typ24xoe70IGs=
 | 
			
		||||
github.com/go-gorp/gorp/v3 v3.1.0/go.mod h1:dLEjIyyRNiXvNZ8PSmzpt1GsWAUK8kjVhEpjH8TixEw=
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,19 @@
 | 
			
		|||
package initial
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"git.gocasts.ir/ebhomengo/niki/config"
 | 
			
		||||
	authservice "git.gocasts.ir/ebhomengo/niki/service/auth"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type Auth struct {
 | 
			
		||||
	BenefactorAuthSvc authservice.Service
 | 
			
		||||
	AdminAuthSvc      authservice.Service
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func InitBenefactorAuthService(cfg config.Config) authservice.Service {
 | 
			
		||||
	return authservice.New(cfg.Auth)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func InitAdminAuthService(cfg config.Config) authservice.Service {
 | 
			
		||||
	return authservice.New(cfg.AdminAuth)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,37 @@
 | 
			
		|||
package initial
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"git.gocasts.ir/ebhomengo/niki/config"
 | 
			
		||||
	"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"
 | 
			
		||||
	mysqlkindbox "git.gocasts.ir/ebhomengo/niki/repository/mysql/kind_box"
 | 
			
		||||
	mysqlkindboxreq "git.gocasts.ir/ebhomengo/niki/repository/mysql/kind_box_req"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type Databases struct {
 | 
			
		||||
	BenefactorAddressDB    *mysqladdress.DB
 | 
			
		||||
	BenefactorKindBoxReqDB *mysqlkindboxreq.DB
 | 
			
		||||
	KindBoxRepo            *mysqlkindbox.DB
 | 
			
		||||
	AdminMysql             *mysqladmin.DB
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func InitMysql(cfg config.Config) *mysql.DB {
 | 
			
		||||
	return mysql.New(cfg.Mysql)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func InitBenefactorAddressDB(db *mysql.DB) *mysqladdress.DB {
 | 
			
		||||
	return mysqladdress.New(db)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func InitBenefactorKindBoxReqDB(db *mysql.DB) *mysqlkindboxreq.DB {
 | 
			
		||||
	return mysqlkindboxreq.New(db)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func InitKindBoxRepo(db *mysql.DB) *mysqlkindbox.DB {
 | 
			
		||||
	return mysqlkindbox.New(db)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func InitAdminMysql(db *mysql.DB) *mysqladmin.DB {
 | 
			
		||||
	return mysqladmin.New(db)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,62 @@
 | 
			
		|||
package initial
 | 
			
		||||
 | 
			
		||||
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"
 | 
			
		||||
	"git.gocasts.ir/ebhomengo/niki/repository/mysql"
 | 
			
		||||
	mysqladdress "git.gocasts.ir/ebhomengo/niki/repository/mysql/address"
 | 
			
		||||
	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"
 | 
			
		||||
	adminkindboxservice "git.gocasts.ir/ebhomengo/niki/service/admin/kind_box"
 | 
			
		||||
	adminkindboxreqservice "git.gocasts.ir/ebhomengo/niki/service/admin/kind_box_req"
 | 
			
		||||
	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"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type Services struct {
 | 
			
		||||
	BenefactorSvc           benefactorservice.Service
 | 
			
		||||
	BenefactorKindBoxReqSvc benefactorkindboxreqservice.Service
 | 
			
		||||
	BenefactorAddressSvc    benefactoraddressservice.Service
 | 
			
		||||
	AdminKindBoxSvc         adminkindboxservice.Service
 | 
			
		||||
	AdminSvc                adminservice.Service
 | 
			
		||||
	AdminKindBoxReqSvc      adminkindboxreqservice.Service
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func initSms(cfg config.Config) *kavenegarotp.Adapter {
 | 
			
		||||
	return kavenegarotp.New(smsprovider.New(cfg.KavenegarSmsProvider))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func InitAdminService(cfg config.Config, db *mysql.DB) adminservice.Service {
 | 
			
		||||
	return adminservice.New(InitAdminMysql(db), InitAdminAuthService(cfg))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func InitBenefactorService(cfg config.Config, redisAdapter redis.Adapter, db *mysql.DB) benefactorservice.Service {
 | 
			
		||||
	return benefactorservice.New(
 | 
			
		||||
		cfg.BenefactorSvc,
 | 
			
		||||
		redisotp.New(redisAdapter),
 | 
			
		||||
		initSms(cfg),
 | 
			
		||||
		InitBenefactorAuthService(cfg),
 | 
			
		||||
		mysqlbenefactor.New(db),
 | 
			
		||||
	)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func InitBenefactorAddressService(db *mysql.DB) benefactoraddressservice.Service {
 | 
			
		||||
	return benefactoraddressservice.New(mysqladdress.New(db))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func InitBenefactorKindBoxReqService(db *mysql.DB) benefactorkindboxreqservice.Service {
 | 
			
		||||
	return benefactorkindboxreqservice.New(mysqlkindboxreq.New(db))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func InitAdminKindBoxService(db *mysql.DB) adminkindboxservice.Service {
 | 
			
		||||
	return adminkindboxservice.New(InitKindBoxRepo(db))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func InitAdminKindBoxReqService(db *mysql.DB) adminkindboxreqservice.Service {
 | 
			
		||||
	return adminkindboxreqservice.New(InitBenefactorKindBoxReqDB(db), InitAdminKindBoxService(db))
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,48 @@
 | 
			
		|||
package initial
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"git.gocasts.ir/ebhomengo/niki/adapter/redis"
 | 
			
		||||
	"git.gocasts.ir/ebhomengo/niki/config"
 | 
			
		||||
	"git.gocasts.ir/ebhomengo/niki/repository/mysql"
 | 
			
		||||
	mysqlkindboxreq "git.gocasts.ir/ebhomengo/niki/repository/mysql/kind_box_req"
 | 
			
		||||
	adminvalidator "git.gocasts.ir/ebhomengo/niki/validator/admin/admin"
 | 
			
		||||
	adminkindboxreqvalidator "git.gocasts.ir/ebhomengo/niki/validator/admin/kind_box_req"
 | 
			
		||||
	benefactoraddressvalidator "git.gocasts.ir/ebhomengo/niki/validator/benefactor/address"
 | 
			
		||||
	benefactorvalidator "git.gocasts.ir/ebhomengo/niki/validator/benefactor/benefactor"
 | 
			
		||||
	benefactorkindboxreqvalidator "git.gocasts.ir/ebhomengo/niki/validator/benefactor/kind_box_req"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type Validators struct {
 | 
			
		||||
	BenefactorVld           benefactorvalidator.Validator
 | 
			
		||||
	BenefactorKindBoxReqVld benefactorkindboxreqvalidator.Validator
 | 
			
		||||
	BenefactorAddressVld    benefactoraddressvalidator.Validator
 | 
			
		||||
	AdminKindBoxReqVld      adminkindboxreqvalidator.Validator
 | 
			
		||||
	AdminVld                adminvalidator.Validator
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func InitAdminKindBoxReqValidator(db *mysql.DB) adminkindboxreqvalidator.Validator {
 | 
			
		||||
	return adminkindboxreqvalidator.New(InitBenefactorKindBoxReqDB(db))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func InitAdminValidator(db *mysql.DB) adminvalidator.Validator {
 | 
			
		||||
	return adminvalidator.New(InitAdminMysql(db))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func InitBenefactorValidator() benefactorvalidator.Validator {
 | 
			
		||||
	return benefactorvalidator.New()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func InitBenefactorKindBoxReqValidator(cfg config.Config, redisAdapter redis.Adapter, db *mysql.DB) benefactorkindboxreqvalidator.Validator {
 | 
			
		||||
	return benefactorkindboxreqvalidator.New(
 | 
			
		||||
		mysqlkindboxreq.New(db),
 | 
			
		||||
		InitBenefactorService(cfg, redisAdapter, db),
 | 
			
		||||
		InitBenefactorAddressService(db),
 | 
			
		||||
	)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func InitBenefactorAddressValidator(cfg config.Config, redisAdapter redis.Adapter, db *mysql.DB) benefactoraddressvalidator.Validator {
 | 
			
		||||
	return benefactoraddressvalidator.New(
 | 
			
		||||
		InitBenefactorService(cfg, redisAdapter, db),
 | 
			
		||||
		InitBenefactorAddressDB(db),
 | 
			
		||||
	)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										142
									
								
								main.go
								
								
								
								
							
							
						
						
									
										142
									
								
								main.go
								
								
								
								
							| 
						 | 
				
			
			@ -2,97 +2,83 @@ 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/internal/initial"
 | 
			
		||||
	"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"
 | 
			
		||||
	mysqlkindbox "git.gocasts.ir/ebhomengo/niki/repository/mysql/kind_box"
 | 
			
		||||
	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"
 | 
			
		||||
	adminkindboxservice "git.gocasts.ir/ebhomengo/niki/service/admin/kind_box"
 | 
			
		||||
	adminkindboxreqservice "git.gocasts.ir/ebhomengo/niki/service/admin/kind_box_req"
 | 
			
		||||
	authservice "git.gocasts.ir/ebhomengo/niki/service/auth"
 | 
			
		||||
	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"
 | 
			
		||||
	benefactoraddressvalidator "git.gocasts.ir/ebhomengo/niki/validator/benefactor/address"
 | 
			
		||||
	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"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type Dependencies struct {
 | 
			
		||||
	initial.Auth
 | 
			
		||||
	initial.Databases
 | 
			
		||||
	initial.Validators
 | 
			
		||||
	initial.Services
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	cfg := config.C()
 | 
			
		||||
	// TODO - add command for migrations
 | 
			
		||||
	mgr := migrator.New(cfg.Mysql)
 | 
			
		||||
	mgr.Up()
 | 
			
		||||
	db := initDatabase(cfg)
 | 
			
		||||
	redisAdapter := initRedis(cfg)
 | 
			
		||||
 | 
			
		||||
	authSvc,
 | 
			
		||||
		benefactorSvc,
 | 
			
		||||
		benefactorVld,
 | 
			
		||||
		benefactorKindBoxReqSvc,
 | 
			
		||||
		benefactorKindBoxReqVld,
 | 
			
		||||
		benefactorAddressSvc,
 | 
			
		||||
		benefactorAddressVld,
 | 
			
		||||
		adminSvc,
 | 
			
		||||
		adminVld,
 | 
			
		||||
		adminAuthSvc,
 | 
			
		||||
		adminKindBoxReqSvc,
 | 
			
		||||
		adminKindBoxReqVld := setupServices(cfg)
 | 
			
		||||
	server := httpserver.New(cfg, benefactorSvc, benefactorVld, authSvc, benefactorKindBoxReqSvc, benefactorKindBoxReqVld,
 | 
			
		||||
		benefactorAddressSvc, benefactorAddressVld, adminSvc, adminVld, adminAuthSvc, adminKindBoxReqSvc, adminKindBoxReqVld)
 | 
			
		||||
	dependencies := initDependencies(cfg, redisAdapter, db)
 | 
			
		||||
 | 
			
		||||
	initAndRunServer(cfg, dependencies)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func initDependencies(cfg config.Config, redisAdapter redis.Adapter, db *mysql.DB) *Dependencies {
 | 
			
		||||
	return &Dependencies{
 | 
			
		||||
		initial.Auth{
 | 
			
		||||
			BenefactorAuthSvc: initial.InitBenefactorAuthService(cfg),
 | 
			
		||||
			AdminAuthSvc:      initial.InitAdminAuthService(cfg),
 | 
			
		||||
		},
 | 
			
		||||
		initial.Databases{
 | 
			
		||||
			BenefactorAddressDB:    initial.InitBenefactorAddressDB(db),
 | 
			
		||||
			BenefactorKindBoxReqDB: initial.InitBenefactorKindBoxReqDB(db),
 | 
			
		||||
			KindBoxRepo:            initial.InitKindBoxRepo(db),
 | 
			
		||||
			AdminMysql:             initial.InitAdminMysql(db),
 | 
			
		||||
		},
 | 
			
		||||
		initial.Validators{
 | 
			
		||||
			BenefactorVld:           initial.InitBenefactorValidator(),
 | 
			
		||||
			BenefactorKindBoxReqVld: initial.InitBenefactorKindBoxReqValidator(cfg, redisAdapter, db),
 | 
			
		||||
			BenefactorAddressVld:    initial.InitBenefactorAddressValidator(cfg, redisAdapter, db),
 | 
			
		||||
			AdminKindBoxReqVld:      initial.InitAdminKindBoxReqValidator(db),
 | 
			
		||||
			AdminVld:                initial.InitAdminValidator(db),
 | 
			
		||||
		},
 | 
			
		||||
		initial.Services{
 | 
			
		||||
			BenefactorSvc:           initial.InitBenefactorService(cfg, redisAdapter, db),
 | 
			
		||||
			BenefactorKindBoxReqSvc: initial.InitBenefactorKindBoxReqService(db),
 | 
			
		||||
			BenefactorAddressSvc:    initial.InitBenefactorAddressService(db),
 | 
			
		||||
			AdminKindBoxSvc:         initial.InitAdminKindBoxService(db),
 | 
			
		||||
			AdminKindBoxReqSvc:      initial.InitAdminKindBoxReqService(db),
 | 
			
		||||
			AdminSvc:                initial.InitAdminService(cfg, db),
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func initAndRunServer(cfg config.Config, dependencies *Dependencies) {
 | 
			
		||||
	server := httpserver.New(cfg,
 | 
			
		||||
		dependencies.BenefactorSvc, dependencies.BenefactorVld, dependencies.BenefactorAuthSvc,
 | 
			
		||||
		dependencies.BenefactorKindBoxReqSvc, dependencies.BenefactorKindBoxReqVld,
 | 
			
		||||
		dependencies.BenefactorAddressSvc, dependencies.BenefactorAddressVld,
 | 
			
		||||
		dependencies.AdminSvc, dependencies.AdminVld, dependencies.AdminAuthSvc,
 | 
			
		||||
		dependencies.AdminKindBoxReqSvc, dependencies.AdminKindBoxReqVld)
 | 
			
		||||
 | 
			
		||||
	server.Serve()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//nolint:nakedret,gocritic // we are sure of this
 | 
			
		||||
func setupServices(cfg config.Config) (
 | 
			
		||||
	benefactorAuthSvc authservice.Service, benefactorSvc benefactorservice.Service, benefactorVld benefactorvalidator.Validator,
 | 
			
		||||
	benefactorKindBoxReqSvc benefactorkindboxreqservice.Service, benefactorKindBoxReqVld benefactorkindboxreqvalidator.Validator,
 | 
			
		||||
	benefactorAddressSvc benefactoraddressservice.Service,
 | 
			
		||||
	benefactorAddressVld benefactoraddressvalidator.Validator,
 | 
			
		||||
	adminSvc adminservice.Service, adminVld adminvalidator.Validator,
 | 
			
		||||
	adminAuthSvc authservice.Service,
 | 
			
		||||
	adminKindBoxReqSvc adminkindboxreqservice.Service, adminKindBoxReqVld adminkindboxreqvalidator.Validator,
 | 
			
		||||
) {
 | 
			
		||||
	benefactorAuthSvc = authservice.New(cfg.Auth)
 | 
			
		||||
func initDatabase(cfg config.Config) *mysql.DB {
 | 
			
		||||
	migrateDatabase(cfg)
 | 
			
		||||
 | 
			
		||||
	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)
 | 
			
		||||
	benefactorAddressVld = benefactoraddressvalidator.New(benefactorSvc, benefactorAddressMysql)
 | 
			
		||||
	benefactorVld = benefactorvalidator.New()
 | 
			
		||||
 | 
			
		||||
	benefactorKindBoxReqMysql := mysqlkindboxreq.New(MysqlRepo)
 | 
			
		||||
	benefactorKindBoxReqSvc = benefactorkindboxreqservice.New(benefactorKindBoxReqMysql)
 | 
			
		||||
	benefactorKindBoxReqVld = benefactorkindboxreqvalidator.New(benefactorKindBoxReqMysql, benefactorSvc, benefactorAddressSvc)
 | 
			
		||||
	mysqlkindboxRepo := mysqlkindbox.New(MysqlRepo)
 | 
			
		||||
	adminkindboxsvc := adminkindboxservice.New(mysqlkindboxRepo)
 | 
			
		||||
	adminKindBoxReqSvc = adminkindboxreqservice.New(benefactorKindBoxReqMysql, adminkindboxsvc)
 | 
			
		||||
	adminKindBoxReqVld = adminkindboxreqvalidator.New(benefactorKindBoxReqMysql)
 | 
			
		||||
 | 
			
		||||
	adminAuthSvc = authservice.New(cfg.AdminAuth)
 | 
			
		||||
	adminMysql := mysqladmin.New(MysqlRepo)
 | 
			
		||||
	adminVld = adminvalidator.New(adminMysql)
 | 
			
		||||
	adminSvc = adminservice.New(adminMysql, adminAuthSvc)
 | 
			
		||||
 | 
			
		||||
	return
 | 
			
		||||
	return initial.InitMysql(cfg)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func initRedis(cfg config.Config) redis.Adapter {
 | 
			
		||||
	return redis.New(cfg.Redis)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func migrateDatabase(cfg config.Config) {
 | 
			
		||||
	migratorDB := migrator.New(cfg.Mysql)
 | 
			
		||||
	migratorDB.Up()
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,13 +26,13 @@ func (s Service) Accept(ctx context.Context, req param.KindBoxReqAcceptRequest)
 | 
			
		|||
		return param.KindBoxReqAcceptResponse{}, richerror.New(op).WithErr(gErr)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_, kErr := s.kindBoxClient.AddKindBoxAfterAcceptingRequest(ctx, adminkindboxparam.KindBoxAddAfterAcceptingReqRequest{
 | 
			
		||||
	_, aErr := s.kindBoxClient.AddKindBoxAfterAcceptingRequest(ctx, adminkindboxparam.KindBoxAddAfterAcceptingReqRequest{
 | 
			
		||||
		BenefactorID: kindBoxReq.BenefactorID,
 | 
			
		||||
		KindBoxReqID: kindBoxReq.ID,
 | 
			
		||||
		Type:         kindBoxReq.KindBoxType,
 | 
			
		||||
		Count:        kindBoxReq.CountAccepted,
 | 
			
		||||
	})
 | 
			
		||||
	if kErr != nil {
 | 
			
		||||
	if aErr != nil {
 | 
			
		||||
		// rollback kind box request status
 | 
			
		||||
		rErr := s.repo.RollbackKindBoxRequestStatus(ctx, req.ID)
 | 
			
		||||
		if rErr != nil {
 | 
			
		||||
| 
						 | 
				
			
			@ -40,7 +40,7 @@ func (s Service) Accept(ctx context.Context, req param.KindBoxReqAcceptRequest)
 | 
			
		|||
			logger.L().Error(rErr.Error())
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return param.KindBoxReqAcceptResponse{}, richerror.New(op).WithErr(kErr)
 | 
			
		||||
		return param.KindBoxReqAcceptResponse{}, richerror.New(op).WithErr(aErr)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return param.KindBoxReqAcceptResponse{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue