* TP-55555 | document client and kafka integration * TP-55555 | introduce service concept refactor code * TP-55555 | s3 and kafka producer integrated and tested * TP-55555 | s3 and kafka producer integrated and tested * TP-55555 | fixed kafka for subsequent request * TP-55555 | fixed kafka for subsequent request
86 lines
2.2 KiB
Go
86 lines
2.2 KiB
Go
package dependencies
|
|
|
|
import (
|
|
"cybertron/configs"
|
|
"cybertron/internal/client/aws"
|
|
"cybertron/internal/client/document"
|
|
"cybertron/internal/database"
|
|
"cybertron/internal/transport/handler"
|
|
"cybertron/pkg/db"
|
|
httpclient "cybertron/pkg/httpClient"
|
|
"cybertron/pkg/kafka/producer"
|
|
"cybertron/pkg/log"
|
|
"cybertron/service"
|
|
"go.uber.org/zap"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type Dependencies struct {
|
|
Service *Service
|
|
DBClient *gorm.DB
|
|
Logger *zap.Logger
|
|
Handler *Handler
|
|
Repositories *Repositories
|
|
}
|
|
|
|
type Service struct {
|
|
DocumentService *document.HttpClient
|
|
ProjectService *service.ProjectCreator
|
|
S3Client *aws.Actions
|
|
// Add your service here
|
|
}
|
|
|
|
type Handler struct {
|
|
ProjectHandler *handler.ProjectHandler
|
|
}
|
|
|
|
type Repositories struct {
|
|
ProjectRepository *gorm.DB
|
|
}
|
|
|
|
func InitDependencies() *Dependencies {
|
|
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)
|
|
services := initServices(documentServiceClient, projectServiceClient)
|
|
handlers := initHandlers(projectServiceClient)
|
|
return &Dependencies{
|
|
Service: services,
|
|
DBClient: dbClient,
|
|
Logger: logger.GetLog(),
|
|
Handler: handlers,
|
|
Repositories: repositories,
|
|
}
|
|
}
|
|
|
|
func initServices(documentService *document.HttpClient, projectService *service.ProjectCreator) *Service {
|
|
return &Service{
|
|
DocumentService: documentService,
|
|
ProjectService: projectService,
|
|
}
|
|
}
|
|
|
|
func initRepositories(dbClient *gorm.DB) *Repositories {
|
|
return &Repositories{
|
|
ProjectRepository: database.InitProjectRepository(dbClient),
|
|
}
|
|
}
|
|
|
|
func initHandlers(projectService *service.ProjectCreator) *Handler {
|
|
projectHandler := handler.NewProjectHandler(projectService)
|
|
return &Handler{
|
|
ProjectHandler: projectHandler,
|
|
}
|
|
}
|
|
|
|
func initKafkaProducer() producer.KProducer {
|
|
kafkaProducer := producer.NewKProducer(configs.GetEnv(), configs.GetKafkaConfig())
|
|
return kafkaProducer
|
|
}
|