TP-55555 | crud ingestor (#2)

* TP-55555 | crud ingestor

* TP-55555 | Project handler (#4)

---------

Co-authored-by: Lokesh Dugar <lokesh.dugar@navi.com>
This commit is contained in:
Varnit Goyal
2024-07-24 12:51:37 +05:30
committed by GitHub
parent 310d5ba38e
commit f75297880d
12 changed files with 164 additions and 8 deletions

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

@@ -1,27 +1,45 @@
package dependencies
import (
"cybertron/internal/database"
"cybertron/internal/transport/handler"
"cybertron/pkg/db"
"cybertron/pkg/log"
"go.uber.org/zap"
"gorm.io/gorm"
)
type Dependencies struct {
Service *Service
DBClient *gorm.DB
Logger *zap.Logger
Service *Service
DBClient *gorm.DB
Logger *zap.Logger
Handler *Handler
Repositories *Repositories
}
type Service struct {
// Add your service here
}
type Handler struct {
ProjectHandler *handler.ProjectHandler
}
type Repositories struct {
ProjectRepository *gorm.DB
}
func InitDependencies() *Dependencies {
services := initServices()
dbClient := db.NewDBClient()
handlers := initHandlers(dbClient)
repositories := initRepositories(dbClient)
return &Dependencies{
Service: services,
//DBClient: db.NewDBClient(),
Logger: log.Log.GetLog(),
Service: services,
DBClient: dbClient,
Logger: log.Log.GetLog(),
Handler: handlers,
Repositories: repositories,
}
}
@@ -30,3 +48,16 @@ func initServices() *Service {
// Add your service here
}
}
func initRepositories(dbClient *gorm.DB) *Repositories {
return &Repositories{
ProjectRepository: database.InitProjectRepository(dbClient),
}
}
func initHandlers(dbClient *gorm.DB) *Handler {
projectHandler := handler.NewProjectHandler(dbClient)
return &Handler{
ProjectHandler: projectHandler,
}
}

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

@@ -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

@@ -6,6 +6,7 @@ import (
"os"
"os/signal"
"syscall"
"time"
"cybertron/configs"
"cybertron/internal/dependencies"
@@ -29,10 +30,11 @@ func NewServer(dep *dependencies.Dependencies) *Server {
func (s *Server) router() {
router.ReadinessRouter(s.gin)
router.ProjectRouter(s.gin, s.dependencies)
}
func (s *Server) Start() {
s.gin.Use(ginzap.RecoveryWithZap(s.dependencies.Logger, true))
s.gin.Use(ginzap.Ginzap(s.dependencies.Logger, time.RFC3339, false))
s.router()
port := configs.GetPort()