DanzApp-BE-Test / controllers /upload_controller.go
lifedebugger's picture
Deploy files from GitHub repository
4a66f20
package controllers
import (
"net/http"
"abdanhafidz.com/go-boilerplate/services"
"github.com/gin-gonic/gin"
)
type UploadController interface {
UploadMedia(ctx *gin.Context)
}
type uploadController struct {
uploadService services.UploadService
}
func NewUploadController(uploadService services.UploadService) UploadController {
return &uploadController{uploadService: uploadService}
}
// UploadMedia godoc
// @Summary Upload a media file
// @Description Upload an image or file to storage and receive a public URL back.
// @Tags Upload
// @Accept multipart/form-data
// @Produce json
// @Param file formData file true "File to upload"
// @Param folder formData string false "Folder name (default: uploads)"
// @Success 200 {object} map[string]string
// @Failure 400 {object} dto.ErrorResponse
// @Security BearerAuth
// @Router /api/v1/upload [post]
func (c *uploadController) UploadMedia(ctx *gin.Context) {
file, header, err := ctx.Request.FormFile("file")
if err != nil {
ctx.JSON(http.StatusBadRequest, gin.H{"error": "file is required"})
return
}
defer file.Close()
folder := ctx.PostForm("folder")
if folder == "" {
folder = "uploads"
}
url, err := c.uploadService.UploadFile(file, header, folder)
if err != nil {
ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
ctx.JSON(http.StatusOK, gin.H{"url": url})
}