niki/domain/account/app.go

44 lines
1.2 KiB
Go

package account
import (
"log"
"git.gocasts.ir/ebhomengo/niki/adapter/kavenegar"
"git.gocasts.ir/ebhomengo/niki/adapter/redis"
grpcAccountDelivery "git.gocasts.ir/ebhomengo/niki/domain/account/delivery/grpc"
"git.gocasts.ir/ebhomengo/niki/domain/account/repository/mysql"
redisRepo "git.gocasts.ir/ebhomengo/niki/domain/account/repository/redis"
database "git.gocasts.ir/ebhomengo/niki/pkg/database/mysql"
rpcPkg "git.gocasts.ir/ebhomengo/niki/pkg/grpc"
"git.gocasts.ir/ebhomengo/niki/domain/account/service"
)
type Application struct {
GrpcServer grpcAccountDelivery.Server
Config Config
accountSvc service.Service
}
func Setup(cfg Config, db *database.DB) Application {
redisConn := redis.New(cfg.Redis)
otpRepo := redisRepo.NewRepositoryOtp(redisConn)
mysqlRepo := mysql.New(db)
smsAdapter := kavenegar.New(cfg.Kavenegar)
accountSvc := service.NewService(cfg.accountSvc, otpRepo, mysqlRepo, smsAdapter)
return Application{
accountSvc: accountSvc,
Config: cfg,
GrpcServer: grpcAccountDelivery.New(rpcPkg.New(), cfg.grpcServerCfg),
}
}
func (app *Application) Start() {
err := app.GrpcServer.Start()
if err != nil {
log.Fatalf("error in serving GRPC server: %v", err)
}
}