fix: update gallery files

This commit is contained in:
hanif salafi 2025-11-21 16:14:32 +07:00
parent 0dba3b27cf
commit 3802c801a6
5 changed files with 114 additions and 77 deletions

View File

@ -9,7 +9,6 @@ import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
utilRes "jaecoo-be/utils/response" utilRes "jaecoo-be/utils/response"
utilVal "jaecoo-be/utils/validator"
) )
type galleryFilesController struct { type galleryFilesController struct {
@ -161,12 +160,15 @@ func (_i *galleryFilesController) Save(c *fiber.Ctx) error {
// Update GalleryFile // Update GalleryFile
// @Summary Update GalleryFile // @Summary Update GalleryFile
// @Description API for updating GalleryFile // @Description API for updating GalleryFile with file upload
// @Tags GalleryFiles // @Tags GalleryFiles
// @Security Bearer // @Security Bearer
// @Param X-Client-Key header string true "Insert the X-Client-Key" // @Param X-Client-Key header string true "Insert the X-Client-Key"
// @Param id path int true "GalleryFile ID" // @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 // @Success 200 {object} response.Response
// @Failure 400 {object} response.BadRequestError // @Failure 400 {object} response.BadRequestError
// @Failure 401 {object} response.UnauthorizedError // @Failure 401 {object} response.UnauthorizedError
@ -178,12 +180,47 @@ func (_i *galleryFilesController) Update(c *fiber.Ctx) error {
return err return err
} }
req := new(request.GalleryFilesUpdateRequest) // Parse multipart form
if err := utilVal.ParseAndValidate(c, req); err != nil { form, err := c.MultipartForm()
return err 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 { if err != nil {
return err return err
} }

View File

@ -35,7 +35,7 @@ type GalleryFilesService interface {
GetAll(req request.GalleryFilesQueryRequest) (files []*response.GalleryFilesResponse, paging paginator.Pagination, err error) GetAll(req request.GalleryFilesQueryRequest) (files []*response.GalleryFilesResponse, paging paginator.Pagination, err error)
GetOne(id uint) (file *response.GalleryFilesResponse, err error) GetOne(id uint) (file *response.GalleryFilesResponse, err error)
Create(c *fiber.Ctx, req request.GalleryFilesCreateRequest) (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) Delete(id uint) (err error)
UploadFileToMinio(c *fiber.Ctx, fileKey string) (filePath *string, err error) UploadFileToMinio(c *fiber.Ctx, fileKey string) (filePath *string, err error)
Viewer(c *fiber.Ctx) (err error) Viewer(c *fiber.Ctx) (err error)
@ -168,7 +168,12 @@ func (_i *galleryFilesService) UploadFileToMinio(c *fiber.Ctx, fileKey string) (
return &objectName, nil 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() fileEntity := req.ToEntity()
err = _i.Repo.Update(id, fileEntity) err = _i.Repo.Update(id, fileEntity)

View File

@ -5562,7 +5562,7 @@ const docTemplate = `{
"Bearer": [] "Bearer": []
} }
], ],
"description": "API for updating GalleryFile", "description": "API for updating GalleryFile with file upload",
"tags": [ "tags": [
"GalleryFiles" "GalleryFiles"
], ],
@ -5583,13 +5583,28 @@ const docTemplate = `{
"required": true "required": true
}, },
{ {
"description": "Required payload", "type": "file",
"name": "payload", "description": "Upload file",
"in": "body", "name": "file",
"required": true, "in": "formData"
"schema": { },
"$ref": "#/definitions/request.GalleryFilesUpdateRequest" {
} "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": { "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": { "request.ProductSpecificationsUpdateRequest": {
"type": "object", "type": "object",
"properties": { "properties": {

View File

@ -5551,7 +5551,7 @@
"Bearer": [] "Bearer": []
} }
], ],
"description": "API for updating GalleryFile", "description": "API for updating GalleryFile with file upload",
"tags": [ "tags": [
"GalleryFiles" "GalleryFiles"
], ],
@ -5572,13 +5572,28 @@
"required": true "required": true
}, },
{ {
"description": "Required payload", "type": "file",
"name": "payload", "description": "Upload file",
"in": "body", "name": "file",
"required": true, "in": "formData"
"schema": { },
"$ref": "#/definitions/request.GalleryFilesUpdateRequest" {
} "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": { "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": { "request.ProductSpecificationsUpdateRequest": {
"type": "object", "type": "object",
"properties": { "properties": {

View File

@ -390,17 +390,6 @@ definitions:
title: title:
type: string type: string
type: object type: object
request.GalleryFilesUpdateRequest:
properties:
gallery_id:
type: integer
image_path:
type: string
is_active:
type: boolean
title:
type: string
type: object
request.ProductSpecificationsUpdateRequest: request.ProductSpecificationsUpdateRequest:
properties: properties:
is_active: is_active:
@ -4318,7 +4307,7 @@ paths:
tags: tags:
- GalleryFiles - GalleryFiles
put: put:
description: API for updating GalleryFile description: API for updating GalleryFile with file upload
parameters: parameters:
- description: Insert the X-Client-Key - description: Insert the X-Client-Key
in: header in: header
@ -4330,12 +4319,22 @@ paths:
name: id name: id
required: true required: true
type: integer type: integer
- description: Required payload - description: Upload file
in: body in: formData
name: payload name: file
required: true type: file
schema: - description: Gallery ID
$ref: '#/definitions/request.GalleryFilesUpdateRequest' 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: responses:
"200": "200":
description: OK description: OK