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/knadh/koanf v1.5.0
 | 
				
			||||||
	github.com/labstack/echo-jwt/v4 v4.2.0
 | 
						github.com/labstack/echo-jwt/v4 v4.2.0
 | 
				
			||||||
	github.com/labstack/echo/v4 v4.11.4
 | 
						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/redis/go-redis/v9 v9.4.0
 | 
				
			||||||
	github.com/rubenv/sql-migrate v1.6.0
 | 
						github.com/rubenv/sql-migrate v1.6.0
 | 
				
			||||||
 | 
						golang.org/x/crypto v0.17.0
 | 
				
			||||||
	gopkg.in/natefinch/lumberjack.v2 v2.2.1
 | 
						gopkg.in/natefinch/lumberjack.v2 v2.2.1
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,7 +23,7 @@ require (
 | 
				
			||||||
	github.com/cespare/xxhash/v2 v2.2.0 // indirect
 | 
						github.com/cespare/xxhash/v2 v2.2.0 // indirect
 | 
				
			||||||
	github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
 | 
						github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
 | 
				
			||||||
	github.com/fatih/structs v1.1.0 // 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/go-gorp/gorp/v3 v3.1.0 // indirect
 | 
				
			||||||
	github.com/golang-jwt/jwt v3.2.2+incompatible // indirect
 | 
						github.com/golang-jwt/jwt v3.2.2+incompatible // indirect
 | 
				
			||||||
	github.com/golang-jwt/jwt/v5 v5.0.0 // 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/copystructure v1.2.0 // indirect
 | 
				
			||||||
	github.com/mitchellh/mapstructure v1.5.0 // indirect
 | 
						github.com/mitchellh/mapstructure v1.5.0 // indirect
 | 
				
			||||||
	github.com/mitchellh/reflectwalk v1.0.2 // 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/bytebufferpool v1.0.0 // indirect
 | 
				
			||||||
	github.com/valyala/fasttemplate v1.2.2 // 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/net v0.19.0 // indirect
 | 
				
			||||||
	golang.org/x/sys v0.15.0 // indirect
 | 
						golang.org/x/sys v0.15.0 // indirect
 | 
				
			||||||
	golang.org/x/text v0.14.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/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 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo=
 | 
				
			||||||
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
 | 
					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.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/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 h1:ItKF/Vbuj31dmV4jxA1qblpSwkl9g1typ24xoe70IGs=
 | 
				
			||||||
github.com/go-gorp/gorp/v3 v3.1.0/go.mod h1:dLEjIyyRNiXvNZ8PSmzpt1GsWAUK8kjVhEpjH8TixEw=
 | 
					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 (
 | 
					import (
 | 
				
			||||||
	"git.gocasts.ir/ebhomengo/niki/adapter/redis"
 | 
						"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/config"
 | 
				
			||||||
	httpserver "git.gocasts.ir/ebhomengo/niki/delivery/http_server"
 | 
						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/migrator"
 | 
				
			||||||
	"git.gocasts.ir/ebhomengo/niki/repository/mysql"
 | 
						"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"
 | 
						_ "github.com/go-sql-driver/mysql"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Dependencies struct {
 | 
				
			||||||
 | 
						initial.Auth
 | 
				
			||||||
 | 
						initial.Databases
 | 
				
			||||||
 | 
						initial.Validators
 | 
				
			||||||
 | 
						initial.Services
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func main() {
 | 
					func main() {
 | 
				
			||||||
	cfg := config.C()
 | 
						cfg := config.C()
 | 
				
			||||||
	// TODO - add command for migrations
 | 
						db := initDatabase(cfg)
 | 
				
			||||||
	mgr := migrator.New(cfg.Mysql)
 | 
						redisAdapter := initRedis(cfg)
 | 
				
			||||||
	mgr.Up()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	authSvc,
 | 
						dependencies := initDependencies(cfg, redisAdapter, db)
 | 
				
			||||||
		benefactorSvc,
 | 
					
 | 
				
			||||||
		benefactorVld,
 | 
						initAndRunServer(cfg, dependencies)
 | 
				
			||||||
		benefactorKindBoxReqSvc,
 | 
					}
 | 
				
			||||||
		benefactorKindBoxReqVld,
 | 
					
 | 
				
			||||||
		benefactorAddressSvc,
 | 
					func initDependencies(cfg config.Config, redisAdapter redis.Adapter, db *mysql.DB) *Dependencies {
 | 
				
			||||||
		benefactorAddressVld,
 | 
						return &Dependencies{
 | 
				
			||||||
		adminSvc,
 | 
							initial.Auth{
 | 
				
			||||||
		adminVld,
 | 
								BenefactorAuthSvc: initial.InitBenefactorAuthService(cfg),
 | 
				
			||||||
		adminAuthSvc,
 | 
								AdminAuthSvc:      initial.InitAdminAuthService(cfg),
 | 
				
			||||||
		adminKindBoxReqSvc,
 | 
							},
 | 
				
			||||||
		adminKindBoxReqVld := setupServices(cfg)
 | 
							initial.Databases{
 | 
				
			||||||
	server := httpserver.New(cfg, benefactorSvc, benefactorVld, authSvc, benefactorKindBoxReqSvc, benefactorKindBoxReqVld,
 | 
								BenefactorAddressDB:    initial.InitBenefactorAddressDB(db),
 | 
				
			||||||
		benefactorAddressSvc, benefactorAddressVld, adminSvc, adminVld, adminAuthSvc, adminKindBoxReqSvc, adminKindBoxReqVld)
 | 
								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()
 | 
						server.Serve()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//nolint:nakedret,gocritic // we are sure of this
 | 
					func initDatabase(cfg config.Config) *mysql.DB {
 | 
				
			||||||
func setupServices(cfg config.Config) (
 | 
						migrateDatabase(cfg)
 | 
				
			||||||
	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)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	MysqlRepo := mysql.New(cfg.Mysql)
 | 
						return initial.InitMysql(cfg)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
	redisAdapter := redis.New(cfg.Redis)
 | 
					
 | 
				
			||||||
	RedisOtp := redisotp.New(redisAdapter)
 | 
					func initRedis(cfg config.Config) redis.Adapter {
 | 
				
			||||||
	benefactorMysql := mysqlbenefactor.New(MysqlRepo)
 | 
						return redis.New(cfg.Redis)
 | 
				
			||||||
	kavenegarSmsProvider := smsprovider.New(cfg.KavenegarSmsProvider)
 | 
					}
 | 
				
			||||||
	otpSmsProvider := kavenegarotp.New(kavenegarSmsProvider)
 | 
					
 | 
				
			||||||
	authGenerator := authservice.New(cfg.Auth)
 | 
					func migrateDatabase(cfg config.Config) {
 | 
				
			||||||
 | 
						migratorDB := migrator.New(cfg.Mysql)
 | 
				
			||||||
	benefactorSvc = benefactorservice.New(cfg.BenefactorSvc, RedisOtp, otpSmsProvider, authGenerator, benefactorMysql)
 | 
						migratorDB.Up()
 | 
				
			||||||
 | 
					 | 
				
			||||||
	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
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,13 +26,13 @@ func (s Service) Accept(ctx context.Context, req param.KindBoxReqAcceptRequest)
 | 
				
			||||||
		return param.KindBoxReqAcceptResponse{}, richerror.New(op).WithErr(gErr)
 | 
							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,
 | 
							BenefactorID: kindBoxReq.BenefactorID,
 | 
				
			||||||
		KindBoxReqID: kindBoxReq.ID,
 | 
							KindBoxReqID: kindBoxReq.ID,
 | 
				
			||||||
		Type:         kindBoxReq.KindBoxType,
 | 
							Type:         kindBoxReq.KindBoxType,
 | 
				
			||||||
		Count:        kindBoxReq.CountAccepted,
 | 
							Count:        kindBoxReq.CountAccepted,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	if kErr != nil {
 | 
						if aErr != nil {
 | 
				
			||||||
		// rollback kind box request status
 | 
							// rollback kind box request status
 | 
				
			||||||
		rErr := s.repo.RollbackKindBoxRequestStatus(ctx, req.ID)
 | 
							rErr := s.repo.RollbackKindBoxRequestStatus(ctx, req.ID)
 | 
				
			||||||
		if rErr != nil {
 | 
							if rErr != nil {
 | 
				
			||||||
| 
						 | 
					@ -40,7 +40,7 @@ func (s Service) Accept(ctx context.Context, req param.KindBoxReqAcceptRequest)
 | 
				
			||||||
			logger.L().Error(rErr.Error())
 | 
								logger.L().Error(rErr.Error())
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return param.KindBoxReqAcceptResponse{}, richerror.New(op).WithErr(kErr)
 | 
							return param.KindBoxReqAcceptResponse{}, richerror.New(op).WithErr(aErr)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return param.KindBoxReqAcceptResponse{
 | 
						return param.KindBoxReqAcceptResponse{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue