72 lines
1.9 KiB
Go

package handler
import (
"net/http"
"time"
"zee/internal/helper/config"
"github.com/gin-gonic/gin"
)
// 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),
})
}