TP-55555 | Project handler

This commit is contained in:
Lokesh Dugar
2024-07-24 12:30:35 +05:30
parent 80fe136a42
commit 0952887606
14 changed files with 104 additions and 74 deletions

View File

@@ -1,11 +0,0 @@
package database
import (
"cybertron/models/db"
"gorm.io/gorm"
)
func InitProductRepository(dbClient *gorm.DB) *gorm.DB {
dbClient.AutoMigrate(&db.Product{})
return dbClient
}

View File

@@ -0,0 +1,11 @@
package database
import (
"cybertron/models/db"
"gorm.io/gorm"
)
func InitProjectRepository(dbClient *gorm.DB) *gorm.DB {
dbClient.AutoMigrate(&db.Project{})
return dbClient
}

View File

@@ -22,11 +22,11 @@ type Service struct {
}
type Handler struct {
ProductHandler *handler.ProductHandler
ProjectHandler *handler.ProjectHandler
}
type Repositories struct {
ProductRepository *gorm.DB
ProjectRepository *gorm.DB
}
func InitDependencies() *Dependencies {
@@ -51,13 +51,13 @@ func initServices() *Service {
func initRepositories(dbClient *gorm.DB) *Repositories {
return &Repositories{
ProductRepository: database.InitProductRepository(dbClient),
ProjectRepository: database.InitProjectRepository(dbClient),
}
}
func initHandlers(dbClient *gorm.DB) *Handler {
productHandler := handler.NewProductHandler(dbClient)
projectHandler := handler.NewProjectHandler(dbClient)
return &Handler{
ProductHandler: productHandler,
ProjectHandler: projectHandler,
}
}

View File

@@ -1,32 +0,0 @@
package handler
import (
"cybertron/models/db"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
"net/http"
)
type ProductHandler struct {
dbClient *gorm.DB
}
func (h *ProductHandler) ProductCreate(c *gin.Context) {
h.dbClient.Create(&db.Product{ProductReferenceId: "1", Name: "name"})
c.JSON(http.StatusOK, gin.H{
"message": "create product",
})
}
func (h *ProductHandler) ProductGet(c *gin.Context) {
var product db.Product
h.dbClient.First(&product, 1)
c.JSON(http.StatusOK, gin.H{
"message": product,
})
}
func NewProductHandler(dbClient *gorm.DB) *ProductHandler {
return &ProductHandler{
dbClient: dbClient,
}
}

View File

@@ -0,0 +1,53 @@
package handler
import (
"cybertron/models/db"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
"gorm.io/gorm"
"net/http"
)
type ProjectHandler struct {
dbClient *gorm.DB
}
type ProjectBody struct {
Name string `json:"name" binding:"required"`
Team string `json:"team" binding:"required"`
}
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",
})
}
func (h *ProjectHandler) ProjectGet(c *gin.Context) {
var project db.Project
h.dbClient.First(&project, 1)
c.JSON(http.StatusOK, gin.H{
"message": project,
})
}
func NewProjectHandler(dbClient *gorm.DB) *ProjectHandler {
return &ProjectHandler{
dbClient: dbClient,
}
}

View File

@@ -6,7 +6,8 @@ import (
"github.com/gin-gonic/gin"
)
type HealthCheckHandler struct{}
type HealthCheckHandler struct {
}
func (h *HealthCheckHandler) Readiness(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{

View File

@@ -1,11 +0,0 @@
package router
import (
"cybertron/internal/dependencies"
"github.com/gin-gonic/gin"
)
func ProductRouter(r *gin.Engine, dep *dependencies.Dependencies) {
r.GET("/product", dep.Handler.ProductHandler.ProductCreate)
r.GET("/productGet", dep.Handler.ProductHandler.ProductGet)
}

View File

@@ -0,0 +1,16 @@
package router
import (
"cybertron/internal/dependencies"
"cybertron/internal/transport/handler"
"github.com/gin-gonic/gin"
)
func ProjectRouter(r *gin.Engine, dep *dependencies.Dependencies) {
projectHandler := handler.NewProjectHandler(dep.DBClient)
projectRouterGroup := r.Group("/api/v1")
{
projectRouterGroup.POST("/project", projectHandler.ProjectCreate)
projectRouterGroup.GET("/project", projectHandler.ProjectGet) // TODO: Can make this paginated in future
}
}

View File

@@ -30,7 +30,7 @@ func NewServer(dep *dependencies.Dependencies) *Server {
func (s *Server) router() {
router.ReadinessRouter(s.gin)
router.ProductRouter(s.gin, s.dependencies)
router.ProjectRouter(s.gin, s.dependencies)
}
func (s *Server) Start() {