package handler import ( "net/http" "time" "github.com/gin-gonic/gin" "starter-kit/internal/helper/config" ) // HealthHandler xử lý các endpoint liên quan đến sức khỏe hệ thống type HealthHandler struct { config *config.Config startTime time.Time appVersion string } // NewHealthHandler tạo một handler mới cho health endpoints func NewHealthHandler(cfg *config.Config) *HealthHandler { return &HealthHandler{ config: cfg, startTime: time.Now(), appVersion: cfg.App.Version, } } // HealthCheck trả về trạng thái sức khỏe của hệ thống // @Summary Kiểm tra trạng thái của hệ thống // @Description Trả về thông tin về trạng thái của ứng dụng và các thành phần // @Tags Health // @Produce json // @Success 200 {object} map[string]interface{} // @Router /health [get] func (h *HealthHandler) HealthCheck(c *gin.Context) { uptime := time.Since(h.startTime).String() // Tạo response resp := gin.H{ "status": "ok", "app": gin.H{ "name": h.config.App.Name, "version": h.appVersion, "env": h.config.App.Environment, }, "uptime": uptime, // Trong môi trường thực tế, thêm kiểm tra trạng thái của database và các dịch vụ bên ngoài "components": gin.H{ "database": "ok", // Giả định - trong thực tế sẽ kiểm tra kết nối "cache": "ok", // Giả định }, "timestamp": time.Now().Format(time.RFC3339), } c.JSON(http.StatusOK, resp) } // Ping endpoint đơn giản để kiểm tra server đang chạy // @Summary Ping server // @Description Endpoint đơn giản để kiểm tra server đang hoạt động // @Tags Health // @Produce json // @Success 200 {object} map[string]string // @Router /ping [get] func (h *HealthHandler) Ping(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "status": "ok", "message": "pong", "timestamp": time.Now().Format(time.RFC3339), }) }