From 80fe136a42efa03e4fa2e8cfb501d016d0f4c456 Mon Sep 17 00:00:00 2001 From: varnit-goyal_navi Date: Tue, 23 Jul 2024 17:55:23 +0530 Subject: [PATCH] TP-55555 | crud ingestor --- .../202310201651_initial-migration.up.sql | 1 + go.mod | 1 + internal/database/product.go | 11 +++++ internal/dependencies/dependencies.go | 43 ++++++++++++++++--- internal/transport/handler/product.go | 32 ++++++++++++++ internal/transport/router/product.go | 11 +++++ internal/transport/server.go | 4 +- models/db/Release.go | 9 ++++ models/db/SourceMap.go | 9 ++++ models/db/product.go | 9 ++++ models/db/roles.go | 10 +++++ 11 files changed, 133 insertions(+), 7 deletions(-) create mode 100644 internal/database/product.go create mode 100644 internal/transport/handler/product.go create mode 100644 internal/transport/router/product.go create mode 100644 models/db/Release.go create mode 100644 models/db/SourceMap.go create mode 100644 models/db/product.go create mode 100644 models/db/roles.go diff --git a/db/migrations/202310201651_initial-migration.up.sql b/db/migrations/202310201651_initial-migration.up.sql index e69de29..faebb4b 100644 --- a/db/migrations/202310201651_initial-migration.up.sql +++ b/db/migrations/202310201651_initial-migration.up.sql @@ -0,0 +1 @@ +create database cybertron_dev; diff --git a/go.mod b/go.mod index 02c2346..aa409d6 100644 --- a/go.mod +++ b/go.mod @@ -28,6 +28,7 @@ require ( github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/validator/v10 v10.15.5 // indirect github.com/goccy/go-json v0.10.2 // indirect + github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/hcl v1.0.0 // indirect diff --git a/internal/database/product.go b/internal/database/product.go new file mode 100644 index 0000000..faef203 --- /dev/null +++ b/internal/database/product.go @@ -0,0 +1,11 @@ +package database + +import ( + "cybertron/models/db" + "gorm.io/gorm" +) + +func InitProductRepository(dbClient *gorm.DB) *gorm.DB { + dbClient.AutoMigrate(&db.Product{}) + return dbClient +} diff --git a/internal/dependencies/dependencies.go b/internal/dependencies/dependencies.go index 5d27c4b..ba69333 100644 --- a/internal/dependencies/dependencies.go +++ b/internal/dependencies/dependencies.go @@ -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 { + ProductHandler *handler.ProductHandler +} + +type Repositories struct { + ProductRepository *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{ + ProductRepository: database.InitProductRepository(dbClient), + } +} + +func initHandlers(dbClient *gorm.DB) *Handler { + productHandler := handler.NewProductHandler(dbClient) + return &Handler{ + ProductHandler: productHandler, + } +} diff --git a/internal/transport/handler/product.go b/internal/transport/handler/product.go new file mode 100644 index 0000000..399cb3c --- /dev/null +++ b/internal/transport/handler/product.go @@ -0,0 +1,32 @@ +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, + } +} diff --git a/internal/transport/router/product.go b/internal/transport/router/product.go new file mode 100644 index 0000000..049c5b1 --- /dev/null +++ b/internal/transport/router/product.go @@ -0,0 +1,11 @@ +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) +} diff --git a/internal/transport/server.go b/internal/transport/server.go index 7adb827..85e445c 100644 --- a/internal/transport/server.go +++ b/internal/transport/server.go @@ -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.ProductRouter(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() diff --git a/models/db/Release.go b/models/db/Release.go new file mode 100644 index 0000000..8a6db3f --- /dev/null +++ b/models/db/Release.go @@ -0,0 +1,9 @@ +package db + +import "gorm.io/gorm" + +type Release struct { + gorm.Model + ProductReferenceId string `gorm:"primaryKey"` + ReleaseVersion string `gorm:"column:name"` +} diff --git a/models/db/SourceMap.go b/models/db/SourceMap.go new file mode 100644 index 0000000..f806728 --- /dev/null +++ b/models/db/SourceMap.go @@ -0,0 +1,9 @@ +package db + +import "gorm.io/gorm" + +type SourceMap struct { + gorm.Model + ReleaseReferenceId string `gorm:"primaryKey"` + SourceMapZipUrl string `gorm:"column:name"` +} diff --git a/models/db/product.go b/models/db/product.go new file mode 100644 index 0000000..c962822 --- /dev/null +++ b/models/db/product.go @@ -0,0 +1,9 @@ +package db + +import "gorm.io/gorm" + +type Product struct { + gorm.Model + ProductReferenceId string `gorm:"primaryKey"` + Name string `gorm:"column:name"` +} diff --git a/models/db/roles.go b/models/db/roles.go new file mode 100644 index 0000000..0d944e2 --- /dev/null +++ b/models/db/roles.go @@ -0,0 +1,10 @@ +package db + +import "gorm.io/gorm" + +type Roles struct { + gorm.Model + ProductReferenceId string `gorm:"primaryKey"` + Role string `gorm:"column:name"` +} +