From fa84e3e97ab5cd0e83a4fbc61299a79947f4e86a Mon Sep 17 00:00:00 2001 From: LightJack05 <66321084+LightJack05@users.noreply.github.com> Date: Fri, 16 Jan 2026 18:01:17 +0100 Subject: [PATCH 1/2] feat(api): added health check endpoint --- internal/health/controller.go | 7 +++++++ internal/health/get.go | 17 +++++++++++++++++ main.go | 7 ++++++- 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 internal/health/controller.go create mode 100644 internal/health/get.go diff --git a/internal/health/controller.go b/internal/health/controller.go new file mode 100644 index 0000000..1116a80 --- /dev/null +++ b/internal/health/controller.go @@ -0,0 +1,7 @@ +package health + +import "go.mongodb.org/mongo-driver/v2/mongo" + +type HealthController struct { + DB *mongo.Client +} diff --git a/internal/health/get.go b/internal/health/get.go new file mode 100644 index 0000000..5e4182d --- /dev/null +++ b/internal/health/get.go @@ -0,0 +1,17 @@ +package health + +import ( + "context" + "net/http" + + "github.com/gin-gonic/gin" +) + +func (hc *HealthController) Get(c *gin.Context) { + err := hc.DB.Ping(context.TODO(), nil) + if err != nil { + c.AbortWithStatusJSON(http.StatusServiceUnavailable, gin.H{"error": "Database connection is down"}) + return + } + c.Status(http.StatusOK) +} diff --git a/main.go b/main.go index fa2a8dd..6c81d11 100644 --- a/main.go +++ b/main.go @@ -55,13 +55,18 @@ func disconnectDatabase(client *mongo.Client) { func setupRouter(db *mongo.Client) *gin.Engine { r := gin.Default() - products := r.Group("/products") + setupHealthCheckEndpoint(r) + products := r.Group("/products") setupEndpoints(products, db) return r } +func setupHealthCheckEndpoint(router *gin.Engine) { + router.GET("/health", ) +} + func setupEndpoints(router *gin.RouterGroup, db *mongo.Client) { productController := &product.ProductController{DB: db} From 3bb4459d7271b73e47eb9fa14d71191ddf7f7e9b Mon Sep 17 00:00:00 2001 From: LightJack05 <66321084+LightJack05@users.noreply.github.com> Date: Fri, 16 Jan 2026 18:04:19 +0100 Subject: [PATCH 2/2] Register /health as endpoint for health.GET --- main.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/main.go b/main.go index 6c81d11..36687ff 100644 --- a/main.go +++ b/main.go @@ -8,6 +8,7 @@ import ( "github.com/SnackLog/database-api-wrapper/internal/config" "github.com/SnackLog/database-api-wrapper/internal/database" "github.com/SnackLog/database-api-wrapper/internal/handlers/product" + "github.com/SnackLog/database-api-wrapper/internal/health" serviceConfigLib "github.com/SnackLog/service-config-lib" "github.com/gin-gonic/gin" "go.mongodb.org/mongo-driver/v2/mongo" @@ -55,7 +56,7 @@ func disconnectDatabase(client *mongo.Client) { func setupRouter(db *mongo.Client) *gin.Engine { r := gin.Default() - setupHealthCheckEndpoint(r) + setupHealthCheckEndpoint(db, r) products := r.Group("/products") setupEndpoints(products, db) @@ -63,8 +64,11 @@ func setupRouter(db *mongo.Client) *gin.Engine { return r } -func setupHealthCheckEndpoint(router *gin.Engine) { - router.GET("/health", ) +func setupHealthCheckEndpoint(db *mongo.Client, router *gin.Engine) { + hc := &health.HealthController{ + DB: db, + } + router.GET("/health", hc.Get) } func setupEndpoints(router *gin.RouterGroup, db *mongo.Client) {