From 3802c801a69d2eca2d84fb331141d69be45228a8 Mon Sep 17 00:00:00 2001 From: hanif salafi Date: Fri, 21 Nov 2025 16:14:32 +0700 Subject: [PATCH] fix: update gallery files --- .../controller/gallery_files.controller.go | 51 ++++++++++++++++--- .../service/gallery_files.service.go | 9 +++- docs/swagger/docs.go | 48 +++++++++-------- docs/swagger/swagger.json | 48 +++++++++-------- docs/swagger/swagger.yaml | 35 +++++++------ 5 files changed, 114 insertions(+), 77 deletions(-) diff --git a/app/module/gallery_files/controller/gallery_files.controller.go b/app/module/gallery_files/controller/gallery_files.controller.go index 1d5fdd0..7405aca 100644 --- a/app/module/gallery_files/controller/gallery_files.controller.go +++ b/app/module/gallery_files/controller/gallery_files.controller.go @@ -9,7 +9,6 @@ import ( "github.com/gofiber/fiber/v2" utilRes "jaecoo-be/utils/response" - utilVal "jaecoo-be/utils/validator" ) type galleryFilesController struct { @@ -161,12 +160,15 @@ func (_i *galleryFilesController) Save(c *fiber.Ctx) error { // Update GalleryFile // @Summary Update GalleryFile -// @Description API for updating GalleryFile +// @Description API for updating GalleryFile with file upload // @Tags GalleryFiles // @Security Bearer // @Param X-Client-Key header string true "Insert the X-Client-Key" // @Param id path int true "GalleryFile ID" -// @Param payload body request.GalleryFilesUpdateRequest true "Required payload" +// @Param file formData file false "Upload file" +// @Param gallery_id formData int false "Gallery ID" +// @Param title formData string false "Gallery file title" +// @Param is_active formData bool false "Is active" // @Success 200 {object} response.Response // @Failure 400 {object} response.BadRequestError // @Failure 401 {object} response.UnauthorizedError @@ -178,12 +180,47 @@ func (_i *galleryFilesController) Update(c *fiber.Ctx) error { return err } - req := new(request.GalleryFilesUpdateRequest) - if err := utilVal.ParseAndValidate(c, req); err != nil { - return err + // Parse multipart form + form, err := c.MultipartForm() + if err != nil { + return utilRes.Resp(c, utilRes.Response{ + Success: false, + Messages: utilRes.Messages{"Failed to parse form data"}, + }) } - dataResult, err := _i.galleryFilesService.Update(uint(id), *req) + req := request.GalleryFilesUpdateRequest{} + + // Extract gallery_id if provided + if galleryIDStr := c.FormValue("gallery_id"); galleryIDStr != "" { + galleryID, err := strconv.ParseUint(galleryIDStr, 10, 0) + if err != nil { + return utilRes.Resp(c, utilRes.Response{ + Success: false, + Messages: utilRes.Messages{"Invalid gallery_id"}, + }) + } + galleryIDUint := uint(galleryID) + req.GalleryID = &galleryIDUint + } + + // Extract title if provided + if title := c.FormValue("title"); title != "" { + req.Title = &title + } + + // Extract is_active if provided + if isActiveStr := c.FormValue("is_active"); isActiveStr != "" { + isActive := isActiveStr == "true" || isActiveStr == "1" + req.IsActive = &isActive + } + + // Check if file is uploaded + if len(form.File["file"]) > 0 { + // File will be handled in service + } + + dataResult, err := _i.galleryFilesService.Update(c, uint(id), req) if err != nil { return err } diff --git a/app/module/gallery_files/service/gallery_files.service.go b/app/module/gallery_files/service/gallery_files.service.go index 2d3304c..b88a45a 100644 --- a/app/module/gallery_files/service/gallery_files.service.go +++ b/app/module/gallery_files/service/gallery_files.service.go @@ -35,7 +35,7 @@ type GalleryFilesService interface { GetAll(req request.GalleryFilesQueryRequest) (files []*response.GalleryFilesResponse, paging paginator.Pagination, err error) GetOne(id uint) (file *response.GalleryFilesResponse, err error) Create(c *fiber.Ctx, req request.GalleryFilesCreateRequest) (file *response.GalleryFilesResponse, err error) - Update(id uint, req request.GalleryFilesUpdateRequest) (file *response.GalleryFilesResponse, err error) + Update(c *fiber.Ctx, id uint, req request.GalleryFilesUpdateRequest) (file *response.GalleryFilesResponse, err error) Delete(id uint) (err error) UploadFileToMinio(c *fiber.Ctx, fileKey string) (filePath *string, err error) Viewer(c *fiber.Ctx) (err error) @@ -168,7 +168,12 @@ func (_i *galleryFilesService) UploadFileToMinio(c *fiber.Ctx, fileKey string) ( return &objectName, nil } -func (_i *galleryFilesService) Update(id uint, req request.GalleryFilesUpdateRequest) (file *response.GalleryFilesResponse, err error) { +func (_i *galleryFilesService) Update(c *fiber.Ctx, id uint, req request.GalleryFilesUpdateRequest) (file *response.GalleryFilesResponse, err error) { + // Handle file upload if exists + if filePath, uploadErr := _i.UploadFileToMinio(c, "file"); uploadErr == nil && filePath != nil { + req.ImagePath = filePath + } + fileEntity := req.ToEntity() err = _i.Repo.Update(id, fileEntity) diff --git a/docs/swagger/docs.go b/docs/swagger/docs.go index 411817b..6f1ecd9 100644 --- a/docs/swagger/docs.go +++ b/docs/swagger/docs.go @@ -5562,7 +5562,7 @@ const docTemplate = `{ "Bearer": [] } ], - "description": "API for updating GalleryFile", + "description": "API for updating GalleryFile with file upload", "tags": [ "GalleryFiles" ], @@ -5583,13 +5583,28 @@ const docTemplate = `{ "required": true }, { - "description": "Required payload", - "name": "payload", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/request.GalleryFilesUpdateRequest" - } + "type": "file", + "description": "Upload file", + "name": "file", + "in": "formData" + }, + { + "type": "integer", + "description": "Gallery ID", + "name": "gallery_id", + "in": "formData" + }, + { + "type": "string", + "description": "Gallery file title", + "name": "title", + "in": "formData" + }, + { + "type": "boolean", + "description": "Is active", + "name": "is_active", + "in": "formData" } ], "responses": { @@ -10495,23 +10510,6 @@ const docTemplate = `{ } } }, - "request.GalleryFilesUpdateRequest": { - "type": "object", - "properties": { - "gallery_id": { - "type": "integer" - }, - "image_path": { - "type": "string" - }, - "is_active": { - "type": "boolean" - }, - "title": { - "type": "string" - } - } - }, "request.ProductSpecificationsUpdateRequest": { "type": "object", "properties": { diff --git a/docs/swagger/swagger.json b/docs/swagger/swagger.json index 07378dd..75f99fd 100644 --- a/docs/swagger/swagger.json +++ b/docs/swagger/swagger.json @@ -5551,7 +5551,7 @@ "Bearer": [] } ], - "description": "API for updating GalleryFile", + "description": "API for updating GalleryFile with file upload", "tags": [ "GalleryFiles" ], @@ -5572,13 +5572,28 @@ "required": true }, { - "description": "Required payload", - "name": "payload", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/request.GalleryFilesUpdateRequest" - } + "type": "file", + "description": "Upload file", + "name": "file", + "in": "formData" + }, + { + "type": "integer", + "description": "Gallery ID", + "name": "gallery_id", + "in": "formData" + }, + { + "type": "string", + "description": "Gallery file title", + "name": "title", + "in": "formData" + }, + { + "type": "boolean", + "description": "Is active", + "name": "is_active", + "in": "formData" } ], "responses": { @@ -10484,23 +10499,6 @@ } } }, - "request.GalleryFilesUpdateRequest": { - "type": "object", - "properties": { - "gallery_id": { - "type": "integer" - }, - "image_path": { - "type": "string" - }, - "is_active": { - "type": "boolean" - }, - "title": { - "type": "string" - } - } - }, "request.ProductSpecificationsUpdateRequest": { "type": "object", "properties": { diff --git a/docs/swagger/swagger.yaml b/docs/swagger/swagger.yaml index d0bccf3..a80b12f 100644 --- a/docs/swagger/swagger.yaml +++ b/docs/swagger/swagger.yaml @@ -390,17 +390,6 @@ definitions: title: type: string type: object - request.GalleryFilesUpdateRequest: - properties: - gallery_id: - type: integer - image_path: - type: string - is_active: - type: boolean - title: - type: string - type: object request.ProductSpecificationsUpdateRequest: properties: is_active: @@ -4318,7 +4307,7 @@ paths: tags: - GalleryFiles put: - description: API for updating GalleryFile + description: API for updating GalleryFile with file upload parameters: - description: Insert the X-Client-Key in: header @@ -4330,12 +4319,22 @@ paths: name: id required: true type: integer - - description: Required payload - in: body - name: payload - required: true - schema: - $ref: '#/definitions/request.GalleryFilesUpdateRequest' + - description: Upload file + in: formData + name: file + type: file + - description: Gallery ID + in: formData + name: gallery_id + type: integer + - description: Gallery file title + in: formData + name: title + type: string + - description: Is active + in: formData + name: is_active + type: boolean responses: "200": description: OK