Files
cybertron/internal/dependencies/dependencies.go

101 lines
3.2 KiB
Go
Raw Normal View History

2024-07-23 14:16:26 +05:30
package dependencies
import (
"cybertron/configs"
"cybertron/internal/client/aws"
"cybertron/internal/client/document"
2024-07-23 17:55:23 +05:30
"cybertron/internal/database"
"cybertron/internal/transport/handler"
"cybertron/pkg/db"
httpclient "cybertron/pkg/httpClient"
"cybertron/pkg/kafka/producer"
2024-07-23 14:16:26 +05:30
"cybertron/pkg/log"
"cybertron/service"
2024-07-23 14:16:26 +05:30
"go.uber.org/zap"
"gorm.io/gorm"
)
type Dependencies struct {
2024-07-23 17:55:23 +05:30
Service *Service
DBClient *gorm.DB
Logger *zap.Logger
Handler *Handler
Repositories *Repositories
2024-07-23 14:16:26 +05:30
}
type Service struct {
DocumentService *document.HttpClient
ProjectService *service.ProjectCreator
ReleaseService *service.ReleaseService
ExceptionService *service.ExceptionService
S3Client *aws.Actions
2024-07-23 14:16:26 +05:30
// Add your service here
}
2024-07-23 17:55:23 +05:30
type Handler struct {
ProjectHandler *handler.ProjectHandler
ReleaseHandler *handler.ReleasesHandler
ExceptionHandler *handler.ExceptionHandler
2024-07-23 17:55:23 +05:30
}
type Repositories struct {
2024-07-24 12:30:35 +05:30
ProjectRepository *gorm.DB
2024-07-27 17:02:42 +05:30
ReleaseRepository *gorm.DB
2024-07-23 17:55:23 +05:30
}
2024-07-23 14:16:26 +05:30
func InitDependencies() *Dependencies {
2024-07-23 17:55:23 +05:30
dbClient := db.NewDBClient()
repositories := initRepositories(dbClient)
logger := log.Log
httpClient := httpclient.NewHttpClient(*configs.GetHttpConfig())
s3Client := aws.NewS3client(*configs.GetAWSConfig())
kafkaProducer := initKafkaProducer()
documentServiceClient := document.NewDocumentServiceHttpClient(httpClient, logger, configs.GetDocumentServiceHttpClientConfigs())
projectServiceClient := service.NewProjectCreator(logger, dbClient, s3Client, kafkaProducer)
releaseServiceClient := service.NewReleaseService(logger, dbClient)
exceptionServiceClient := service.NewExceptionService(logger, dbClient, kafkaProducer)
services := initServices(documentServiceClient, projectServiceClient, releaseServiceClient, exceptionServiceClient)
handlers := initHandlers(projectServiceClient, releaseServiceClient, exceptionServiceClient)
2024-07-23 14:16:26 +05:30
return &Dependencies{
2024-07-23 17:55:23 +05:30
Service: services,
DBClient: dbClient,
Logger: logger.GetLog(),
2024-07-23 17:55:23 +05:30
Handler: handlers,
Repositories: repositories,
2024-07-23 14:16:26 +05:30
}
}
func initServices(documentService *document.HttpClient, projectService *service.ProjectCreator, releaseService *service.ReleaseService, exceptionService *service.ExceptionService) *Service {
2024-07-23 14:16:26 +05:30
return &Service{
DocumentService: documentService,
ProjectService: projectService,
ReleaseService: releaseService,
ExceptionService: exceptionService,
2024-07-23 14:16:26 +05:30
}
}
2024-07-23 17:55:23 +05:30
func initRepositories(dbClient *gorm.DB) *Repositories {
return &Repositories{
2024-07-24 12:30:35 +05:30
ProjectRepository: database.InitProjectRepository(dbClient),
2024-07-27 17:02:42 +05:30
ReleaseRepository: database.InitReleaseRepository(dbClient),
2024-07-23 17:55:23 +05:30
}
}
func initHandlers(projectService *service.ProjectCreator, releaseService *service.ReleaseService, exceotionService *service.ExceptionService) *Handler {
projectHandler := handler.NewProjectHandler(projectService)
releaseHandler := handler.NewReleaseHandler(releaseService)
exceptionHandler := handler.NewExceptionHandler(exceotionService)
2024-07-23 17:55:23 +05:30
return &Handler{
ProjectHandler: projectHandler,
ReleaseHandler: releaseHandler,
ExceptionHandler: exceptionHandler,
2024-07-23 17:55:23 +05:30
}
}
func initKafkaProducer() producer.KProducer {
kafkaProducer := producer.NewKProducer(configs.GetEnv(), configs.GetKafkaConfig())
return kafkaProducer
}