package adshttp import ( "fmt" authmiddleware "legalgo-BE-go/internal/api/http/middleware/auth" adsdomain "legalgo-BE-go/internal/domain/ads" "legalgo-BE-go/internal/domain/oss" adssvc "legalgo-BE-go/internal/services/ads" "legalgo-BE-go/internal/utilities/response" "net/http" "github.com/go-chi/chi/v5" ) const _oneMB = 1 << 20 const _maxUploadSize = 2 * _oneMB const _folderName = "/file" func Create( router chi.Router, adsSvc adssvc.Ads, ) { router.With(authmiddleware.Authorize()).Post("/ads/create", func(w http.ResponseWriter, r *http.Request) { ctx := r.Context() err := r.ParseMultipartForm(10 << 20) // 10 MB if err != nil { response.RespondJsonErrorWithCode( ctx, w, err, response.ErrBadRequest.Code, response.ErrBadRequest.HttpCode, "unable to parse form", ) return } url := r.FormValue("url") if url == "" { response.RespondJsonErrorWithCode( ctx, w, err, response.ErrBadRequest.Code, response.ErrBadRequest.HttpCode, "URL is missing", ) return } file, header, err := r.FormFile("image") if err != nil { response.RespondJsonErrorWithCode( ctx, w, err, response.ErrBadRequest.Code, response.ErrBadRequest.HttpCode, "unable to retrieve image", ) return } defer file.Close() if header.Size > int64(_maxUploadSize) { response.ResponseWithErrorCode( ctx, w, fmt.Errorf("file too big"), response.ErrBadRequest.Code, response.ErrBadRequest.HttpCode, fmt.Sprintf("The file is too big. The maximum size is %d MB", _maxUploadSize/_oneMB), ) return } imageRequest := &oss.UploadFileRequest{ FileHeader: header, FolderName: _folderName, } adsReq := adsdomain.AdsReq{ Image: imageRequest, Url: url, } if err := adsSvc.Create(ctx, adsReq); err != nil { response.RespondJsonErrorWithCode( ctx, w, err, response.ErrBadRequest.Code, response.ErrBadRequest.HttpCode, err.Error(), ) return } response.RespondJsonSuccess(ctx, w, struct { Message string }{ Message: "ads created successfully", }) }) }