Tp 55555/integrate document service client (#5)

* TP-55555 | document client and kafka integration

* TP-55555 | introduce service concept refactor code
This commit is contained in:
Varnit Goyal
2024-07-27 17:00:47 +05:30
committed by GitHub
parent f75297880d
commit f20af81520
21 changed files with 764 additions and 103 deletions

View File

@@ -0,0 +1,25 @@
package document
import (
"cybertron/configs"
httpclient "cybertron/pkg/httpClient"
"cybertron/pkg/log"
)
type Client interface {
}
type HttpClient struct {
Client
HttpClient httpclient.HttpClient
Logger *log.Logger
DocumentServiceHttpClientConfigs *configs.DocumentServiceHttpClientConfigs
}
func NewDocumentServiceHttpClient(httpClient httpclient.HttpClient, logger *log.Logger, documentServiceHttpClientConfigs *configs.DocumentServiceHttpClientConfigs) *HttpClient {
return &HttpClient{
HttpClient: httpClient,
Logger: logger,
DocumentServiceHttpClientConfigs: documentServiceHttpClientConfigs,
}
}

View File

@@ -1,10 +1,14 @@
package dependencies
import (
"cybertron/configs"
"cybertron/internal/client/document"
"cybertron/internal/database"
"cybertron/internal/transport/handler"
"cybertron/pkg/db"
httpclient "cybertron/pkg/httpClient"
"cybertron/pkg/log"
"cybertron/service"
"go.uber.org/zap"
"gorm.io/gorm"
)
@@ -18,6 +22,8 @@ type Dependencies struct {
}
type Service struct {
DocumentService *document.HttpClient
ProjectService *service.ProjectCreator
// Add your service here
}
@@ -30,22 +36,27 @@ type Repositories struct {
}
func InitDependencies() *Dependencies {
services := initServices()
dbClient := db.NewDBClient()
handlers := initHandlers(dbClient)
repositories := initRepositories(dbClient)
logger := log.Log
httpClient := httpclient.NewHttpClient(*configs.GetHttpConfig())
documentServiceClient := document.NewDocumentServiceHttpClient(httpClient, logger, configs.GetDocumentServiceHttpClientConfigs())
projectServiceClient := service.NewProjectCreator(logger, dbClient)
services := initServices(documentServiceClient, projectServiceClient)
handlers := initHandlers(projectServiceClient)
return &Dependencies{
Service: services,
DBClient: dbClient,
Logger: log.Log.GetLog(),
Logger: logger.GetLog(),
Handler: handlers,
Repositories: repositories,
}
}
func initServices() *Service {
func initServices(documentService *document.HttpClient, projectService *service.ProjectCreator) *Service {
return &Service{
// Add your service here
DocumentService: documentService,
ProjectService: projectService,
}
}
@@ -55,8 +66,8 @@ func initRepositories(dbClient *gorm.DB) *Repositories {
}
}
func initHandlers(dbClient *gorm.DB) *Handler {
projectHandler := handler.NewProjectHandler(dbClient)
func initHandlers(projectService *service.ProjectCreator) *Handler {
projectHandler := handler.NewProjectHandler(projectService)
return &Handler{
ProjectHandler: projectHandler,
}

View File

@@ -1,15 +1,12 @@
package handler
import (
"cybertron/models/db"
"cybertron/service"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
"gorm.io/gorm"
"net/http"
)
type ProjectHandler struct {
dbClient *gorm.DB
projectCreatorService *service.ProjectCreator
}
type ProjectBody struct {
@@ -18,36 +15,15 @@ type ProjectBody struct {
}
func (h *ProjectHandler) ProjectCreate(c *gin.Context) {
var projectBody ProjectBody
if err := c.BindJSON(&projectBody); err != nil {
c.JSON(http.StatusBadRequest, gin.H{
"message": "Invalid Request",
})
return
}
// Write to database
h.dbClient.Create(&db.Project{
ProjectReferenceId: uuid.New(),
Name: projectBody.Name,
Team: projectBody.Team,
})
c.JSON(http.StatusOK, gin.H{
"message": "Project created",
})
h.projectCreatorService.CreateProject(c)
}
func (h *ProjectHandler) ProjectGet(c *gin.Context) {
var project db.Project
h.dbClient.First(&project, 1)
c.JSON(http.StatusOK, gin.H{
"message": project,
})
h.projectCreatorService.GetProject(c)
}
func NewProjectHandler(dbClient *gorm.DB) *ProjectHandler {
func NewProjectHandler(projectCreatorService *service.ProjectCreator) *ProjectHandler {
return &ProjectHandler{
dbClient: dbClient,
projectCreatorService: projectCreatorService,
}
}

View File

@@ -0,0 +1,5 @@
{
"dev": {
"name": "value"
}
}

View File

@@ -7,7 +7,7 @@ import (
)
func ProjectRouter(r *gin.Engine, dep *dependencies.Dependencies) {
projectHandler := handler.NewProjectHandler(dep.DBClient)
projectHandler := handler.NewProjectHandler(dep.Service.ProjectService)
projectRouterGroup := r.Group("/api/v1")
{
projectRouterGroup.POST("/project", projectHandler.ProjectCreate)