package middleware import ( "encoding/json" "github.com/gofiber/fiber/v2" "go-humas-be/app/database/entity" utilSvc "go-humas-be/utils/service" "gorm.io/gorm" "time" ) func AuditTrailsMiddleware(db *gorm.DB) fiber.Handler { return func(c *fiber.Ctx) error { start := time.Now() requestBody := c.Body() headersMap := c.GetReqHeaders() headersJSON, _ := json.Marshal(headersMap) authHeader := c.Get("Authorization") userId := utilSvc.GetUserId(authHeader) err := c.Next() audit := entity.AuditTrails{ Method: c.Method(), Path: c.OriginalURL(), IP: c.IP(), Status: c.Response().StatusCode(), UserID: userId, RequestHeaders: string(headersJSON), RequestBody: string(requestBody), ResponseBody: string(c.Response().Body()), DurationMs: time.Since(start).Milliseconds(), CreatedAt: time.Now(), } go db.Create(&audit) return err } }