diff --git a/internal/database/project.go b/internal/database/project.go index 3e0bed2..de25b53 100644 --- a/internal/database/project.go +++ b/internal/database/project.go @@ -14,3 +14,8 @@ func InitReleaseRepository(dbClient *gorm.DB) *gorm.DB { dbClient.AutoMigrate(&db.Release{}) return dbClient } + +func InitSourceMapRepository(dbClient *gorm.DB) *gorm.DB { + dbClient.AutoMigrate(&db.SourcMap{}) + return dbClient +} diff --git a/internal/dependencies/dependencies.go b/internal/dependencies/dependencies.go index fb873db..e600b30 100644 --- a/internal/dependencies/dependencies.go +++ b/internal/dependencies/dependencies.go @@ -11,6 +11,7 @@ import ( "cybertron/pkg/kafka/producer" "cybertron/pkg/log" "cybertron/service" + "go.uber.org/zap" "gorm.io/gorm" ) @@ -26,14 +27,16 @@ type Dependencies struct { type Service struct { DocumentService *document.HttpClient ProjectService *service.ProjectCreator + SourceMapService *service.SourceMapService ReleaseService *service.ReleaseService ExceptionService *service.ExceptionService - S3Client *aws.Actions + S3Client *aws.Actions // Add your service here } type Handler struct { ProjectHandler *handler.ProjectHandler + SourceMapHandler *handler.SourceMapHandler ReleaseHandler *handler.ReleasesHandler ExceptionHandler *handler.ExceptionHandler } @@ -53,11 +56,12 @@ func InitDependencies() *Dependencies { documentServiceClient := document.NewDocumentServiceHttpClient(httpClient, logger, configs.GetDocumentServiceHttpClientConfigs()) projectServiceClient := service.NewProjectCreator(logger, dbClient, s3Client, kafkaProducer) + sourceMapServiceClient := service.NewSourceMapService(dbClient) releaseServiceClient := service.NewReleaseService(logger, dbClient) exceptionServiceClient := service.NewExceptionService(logger, dbClient, kafkaProducer) - services := initServices(documentServiceClient, projectServiceClient, releaseServiceClient, exceptionServiceClient) - handlers := initHandlers(projectServiceClient, releaseServiceClient, exceptionServiceClient) + services := initServices(documentServiceClient, projectServiceClient, sourceMapServiceClient, releaseServiceClient, exceptionServiceClient) + handlers := initHandlers(projectServiceClient, sourceMapServiceClient, releaseServiceClient, exceptionServiceClient) return &Dependencies{ Service: services, DBClient: dbClient, @@ -67,10 +71,11 @@ func InitDependencies() *Dependencies { } } -func initServices(documentService *document.HttpClient, projectService *service.ProjectCreator, releaseService *service.ReleaseService, exceptionService *service.ExceptionService) *Service { +func initServices(documentService *document.HttpClient, projectService *service.ProjectCreator, sourceMapService *service.SourceMapService, releaseService *service.ReleaseService, exceptionService *service.ExceptionService) *Service { return &Service{ DocumentService: documentService, ProjectService: projectService, + SourceMapService: sourceMapService, ReleaseService: releaseService, ExceptionService: exceptionService, } @@ -83,12 +88,14 @@ func initRepositories(dbClient *gorm.DB) *Repositories { } } -func initHandlers(projectService *service.ProjectCreator, releaseService *service.ReleaseService, exceotionService *service.ExceptionService) *Handler { +func initHandlers(projectService *service.ProjectCreator, sourceMapService *service.SourceMapService, releaseService *service.ReleaseService, exceotionService *service.ExceptionService) *Handler { projectHandler := handler.NewProjectHandler(projectService) + sourceMapHandler := handler.NewSourceMapHandler(sourceMapService) releaseHandler := handler.NewReleaseHandler(releaseService) exceptionHandler := handler.NewExceptionHandler(exceotionService) return &Handler{ ProjectHandler: projectHandler, + SourceMapHandler: sourceMapHandler, ReleaseHandler: releaseHandler, ExceptionHandler: exceptionHandler, } diff --git a/internal/transport/handler/sourceMap.go b/internal/transport/handler/sourceMap.go new file mode 100644 index 0000000..a85e638 --- /dev/null +++ b/internal/transport/handler/sourceMap.go @@ -0,0 +1,27 @@ +package handler + +import ( + "cybertron/service" + "net/http" + + "github.com/gin-gonic/gin" +) + +type SourceMapHandler struct { + sourceMapService *service.SourceMapService +} + +func NewSourceMapHandler(sourceMapService *service.SourceMapService) *SourceMapHandler { + return &SourceMapHandler{ + sourceMapService: sourceMapService, + } +} + +func (h *SourceMapHandler) GetSourceMap(c *gin.Context) { + sourceMap := h.sourceMapService.GetSourceMap() + c.JSON(http.StatusOK, sourceMap) +} + +func (h *SourceMapHandler) StoreSourceMap(c *gin.Context) { + h.sourceMapService.StoreSourceMap(c) +} diff --git a/internal/transport/router/sourceMap.go b/internal/transport/router/sourceMap.go new file mode 100644 index 0000000..5cb81a2 --- /dev/null +++ b/internal/transport/router/sourceMap.go @@ -0,0 +1,16 @@ +package router + +import ( + "cybertron/internal/transport/handler" + "cybertron/service" + + "github.com/gin-gonic/gin" + "gorm.io/gorm" +) + +func SourceMapRouter(r *gin.Engine, dbClient *gorm.DB) { + sourceMapService := service.NewSourceMapService(dbClient) + sourceMapHandler := handler.NewSourceMapHandler(sourceMapService) + r.GET("/uploadsourcemap", sourceMapHandler.GetSourceMap) + r.POST("/storesourcemap", sourceMapHandler.StoreSourceMap) +} diff --git a/internal/transport/server.go b/internal/transport/server.go index d5f3dbb..4eb3006 100644 --- a/internal/transport/server.go +++ b/internal/transport/server.go @@ -31,6 +31,7 @@ func NewServer(dep *dependencies.Dependencies) *Server { func (s *Server) router() { router.ReadinessRouter(s.gin) router.ProjectRouter(s.gin, s.dependencies) + router.SourceMapRouter(s.gin, s.dependencies.DBClient) router.ReleasesRouter(s.gin, s.dependencies) router.ExceptionRouter(s.gin, s.dependencies) } diff --git a/models/db/Release.go b/models/db/Release.go deleted file mode 100644 index 43eab6d..0000000 --- a/models/db/Release.go +++ /dev/null @@ -1,9 +0,0 @@ -package db - -import "gorm.io/gorm" - -type Release struct { - gorm.Model - ProjectReferenceId string `gorm:"primaryKey"` - ReleaseVersion string `gorm:"column:name"` -} diff --git a/models/db/SourceMap.go b/models/db/SourceMap.go index f806728..977935e 100644 --- a/models/db/SourceMap.go +++ b/models/db/SourceMap.go @@ -5,5 +5,6 @@ import "gorm.io/gorm" type SourceMap struct { gorm.Model ReleaseReferenceId string `gorm:"primaryKey"` - SourceMapZipUrl string `gorm:"column:name"` + ProjectReferenceId string `gorm:"column:project_reference_id"` + SourceMapZipUrl string `gorm:"column:source_map_zip_url"` } diff --git a/models/db/release.go b/models/db/release.go deleted file mode 100644 index 43eab6d..0000000 --- a/models/db/release.go +++ /dev/null @@ -1,9 +0,0 @@ -package db - -import "gorm.io/gorm" - -type Release struct { - gorm.Model - ProjectReferenceId string `gorm:"primaryKey"` - ReleaseVersion string `gorm:"column:name"` -} diff --git a/service/sourceMap.go b/service/sourceMap.go new file mode 100644 index 0000000..48a288b --- /dev/null +++ b/service/sourceMap.go @@ -0,0 +1,56 @@ +package service + +import ( + "cybertron/models/db" + "net/http" + "time" + + "gorm.io/gorm" +) + +type SourceMapService struct { + dbClient *gorm.DB +} + +func NewSourceMapService(dbClient *gorm.DB) *SourceMapService { + return &SourceMapService{ + dbClient: dbClient, + } +} + +func (s *SourceMapService) GetSourceMap() db.SourceMap { + //fetching SourceMap from a client API + sourceMap := db.SourceMap{ + Model: gorm.Model{ + ID: 1, + CreatedAt: time.Now(), + UpdatedAt: time.Now(), + DeletedAt: gorm.DeletedAt{}, + }, + ReleaseReferenceId: "some-release-ref-id", + ProjectReferenceId: "some-project-ref-id", + SourceMapZipUrl: "http://example.com/sourcemap.zip", + } + + return sourceMap +} + +func (s *SourceMapService) StoreSourceMap(c *gin.Context) { + var sourceMap db.SourceMap + if err := c.ShouldBindJSON(&sourceMap); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + result := s.dbClient.Create(&db.SourceMap{ + ReleaseReferenceId: sourceMap.ReleaseReferenceId, + ProjectReferenceId: sourceMap.ProjectReferenceId, + SourceMapZipUrl: sourceMap.SourceMapZipUrl, + }) + + if result.Error != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to store source map"}) + return + } + c.JSON(http.StatusOK, gin.H{"status": "Source map stored successfully"}) +}