package controllers import ( "net/http" "os" "path/filepath" "github.com/gin-gonic/gin" "fitra-backend/utils" ) func HandleFileDownload(c *gin.Context) { fileID, filename := c.Param("fileID"), c.Param("filename") if fileID == "" || filename == "" { c.JSON(http.StatusBadRequest, gin.H{"error": "File ID and filename are required"}) return } filePath := filepath.Join("./uploads", fileID, filename) if _, err := os.Stat(filePath); os.IsNotExist(err) { c.JSON(http.StatusNotFound, gin.H{"error": "File not found"}) return } // Send analytics event utils.SendAnalyticsEvent("file_download", "/api/download/"+fileID+"/"+filename, "File Download", c.GetHeader("User-Agent"), c.ClientIP()) c.Header("Content-Description", "File Transfer") c.Header("Content-Transfer-Encoding", "binary") c.Header("Content-Disposition", "attachment; filename="+filename) c.Header("Content-Type", "application/octet-stream") c.File(filePath) }