package handler import ( "baron-sso-backend/internal/domain" "time" "github.com/gofiber/fiber/v2" ) type AuditHandler struct { repo domain.AuditRepository } func NewAuditHandler(repo domain.AuditRepository) *AuditHandler { return &AuditHandler{repo: repo} } // CreateLog handles POST /api/v1/audit func (h *AuditHandler) CreateLog(c *fiber.Ctx) error { var req domain.AuditLog if err := c.BodyParser(&req); err != nil { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "error": "Cannot parse JSON", }) } // Auto-fill metadata if missing if req.IPAddress == "" { req.IPAddress = c.IP() } if req.UserAgent == "" { req.UserAgent = c.Get("User-Agent") } if req.Timestamp.IsZero() { req.Timestamp = time.Now() } if err := h.repo.Create(&req); err != nil { // Log internal error but don't expose details return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ "error": "Failed to save audit log", }) } return c.Status(fiber.StatusCreated).JSON(fiber.Map{ "message": "Audit log saved", }) }