feat: update magazine and magazine files

This commit is contained in:
hanif salafi 2025-01-21 15:54:43 +07:00
parent 555cfd6864
commit 23ecd14367
12 changed files with 303 additions and 24 deletions

View File

@ -102,6 +102,8 @@ func (_i *magazineFilesController) Show(c *fiber.Ctx) error {
// @Tags Magazine Files
// @Security Bearer
// @Param files formData file true "Upload file" multiple true
// @Param title formData string true "Magazine file title"
// @Param description formData string true "Magazine file description"
// @Param magazineId path int true "Magazine ID"
// @Success 200 {object} response.Response
// @Failure 400 {object} response.BadRequestError
@ -109,12 +111,14 @@ func (_i *magazineFilesController) Show(c *fiber.Ctx) error {
// @Failure 500 {object} response.InternalServerError
// @Router /magazine-files/{magazineId} [post]
func (_i *magazineFilesController) Save(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("articleId"), 10, 0)
id, err := strconv.ParseUint(c.Params("magazineId"), 10, 0)
if err != nil {
return err
}
title := c.Params("title")
description := c.Params("description")
err = _i.magazineFilesService.Save(c, uint(id))
err = _i.magazineFilesService.Save(c, uint(id), title, description)
if err != nil {
return err
}

View File

@ -17,7 +17,7 @@ type magazineFilesRepository struct {
type MagazineFilesRepository interface {
GetAll(req request.MagazineFilesQueryRequest) (magazineFiless []*entity.MagazineFiles, paging paginator.Pagination, err error)
FindOne(id uint) (magazineFiles *entity.MagazineFiles, err error)
FindByArticle(magazineId uint) (magazineFiles []*entity.MagazineFiles, err error)
FindByMagazine(magazineId uint) (magazineFiles []*entity.MagazineFiles, err error)
FindByFilename(filename string) (magazineFiles *entity.MagazineFiles, err error)
Create(magazineFiles *entity.MagazineFiles) (err error)
Update(id uint, magazineFiles *entity.MagazineFiles) (err error)
@ -76,7 +76,7 @@ func (_i *magazineFilesRepository) GetAll(req request.MagazineFilesQueryRequest)
return
}
func (_i *magazineFilesRepository) FindByArticle(magazineId uint) (magazineFiles []*entity.MagazineFiles, err error) {
func (_i *magazineFilesRepository) FindByMagazine(magazineId uint) (magazineFiles []*entity.MagazineFiles, err error) {
if err := _i.DB.DB.Where("magazine_id = ?", magazineId).Find(&magazineFiles).Error; err != nil {
return nil, err
}

View File

@ -32,7 +32,7 @@ type magazineFilesService struct {
type MagazineFilesService interface {
All(req request.MagazineFilesQueryRequest) (magazineFiles []*response.MagazineFilesResponse, paging paginator.Pagination, err error)
Show(id uint) (magazineFiles *response.MagazineFilesResponse, err error)
Save(c *fiber.Ctx, id uint) (err error)
Save(c *fiber.Ctx, id uint, title string, description string) (err error)
Update(id uint, req request.MagazineFilesUpdateRequest) (err error)
Delete(id uint) error
Viewer(c *fiber.Ctx) error
@ -71,7 +71,7 @@ func (_i *magazineFilesService) Show(id uint) (magazineFiles *response.MagazineF
return mapper.MagazineFilesResponseMapper(result), nil
}
func (_i *magazineFilesService) Save(c *fiber.Ctx, id uint) (err error) {
func (_i *magazineFilesService) Save(c *fiber.Ctx, id uint, title string, description string) (err error) {
bucketName := _i.MinioStorage.Cfg.ObjectStorage.MinioStorage.BucketName
form, err := c.MultipartForm()
@ -125,12 +125,13 @@ func (_i *magazineFilesService) Save(c *fiber.Ctx, id uint) (err error) {
fileSize := strconv.FormatInt(fileHeader.Size, 10)
req := request.MagazineFilesCreateRequest{
MagazineId: id,
Title: newFilename,
FilePath: &objectName,
FileName: &newFilename,
FileAlt: &filenameAlt,
Size: &fileSize,
MagazineId: id,
Title: title,
Description: description,
FilePath: &objectName,
FileName: &newFilename,
FileAlt: &filenameAlt,
Size: &fileSize,
}
err = _i.Repo.Create(req.ToEntity())

View File

@ -34,6 +34,8 @@ func NewMagazinesController(magazinesService service.MagazinesService) Magazines
// @Description API for getting all Magazines
// @Tags Magazines
// @Security Bearer
// @Param req query request.MagazinesQueryRequest false "query parameters"
// @Param req query paginator.Pagination false "pagination parameters"
// @Success 200 {object} response.Response
// @Failure 400 {object} response.BadRequestError
// @Failure 401 {object} response.UnauthorizedError

View File

@ -2,10 +2,21 @@ package mapper
import (
"go-humas-be/app/database/entity"
magazineFilesMapper "go-humas-be/app/module/magazine_files/mapper"
magazineFilesRepository "go-humas-be/app/module/magazine_files/repository"
magazineFilesResponse "go-humas-be/app/module/magazine_files/response"
res "go-humas-be/app/module/magazines/response"
)
func MagazinesResponseMapper(magazinesReq *entity.Magazines) (magazinesRes *res.MagazinesResponse) {
func MagazinesResponseMapper(magazinesReq *entity.Magazines, magazineFilesRepo magazineFilesRepository.MagazineFilesRepository) (magazinesRes *res.MagazinesResponse) {
magazineFiles, _ := magazineFilesRepo.FindByMagazine(magazinesReq.ID)
var magazineFilesArr []*magazineFilesResponse.MagazineFilesResponse
if magazineFiles != nil && len(magazineFiles) > 0 {
for _, result := range magazineFiles {
magazineFilesArr = append(magazineFilesArr, magazineFilesMapper.MagazineFilesResponseMapper(result))
}
}
if magazinesReq != nil {
magazinesRes = &res.MagazinesResponse{
ID: magazinesReq.ID,
@ -21,6 +32,7 @@ func MagazinesResponseMapper(magazinesReq *entity.Magazines) (magazinesRes *res.
IsActive: magazinesReq.IsActive,
CreatedAt: magazinesReq.CreatedAt,
UpdatedAt: magazinesReq.UpdatedAt,
MagazineFiles: magazineFilesArr,
}
}
return magazinesRes

View File

@ -46,6 +46,7 @@ func (req MagazinesCreateRequest) ToEntity() *entity.Magazines {
StatusId: req.StatusId,
IsPublish: req.IsPublish,
PublishedAt: req.PublishedAt,
IsActive: true,
}
}

View File

@ -1,6 +1,9 @@
package response
import "time"
import (
magazineFilesResponse "go-humas-be/app/module/magazine_files/response"
"time"
)
type MagazinesResponse struct {
ID uint `json:"id"`
@ -16,4 +19,6 @@ type MagazinesResponse struct {
IsActive bool `json:"isActive"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
MagazineFiles []*magazineFilesResponse.MagazineFilesResponse `json:"files"`
}

View File

@ -2,6 +2,7 @@ package service
import (
"github.com/rs/zerolog"
magazineFilesRepository "go-humas-be/app/module/magazine_files/repository"
"go-humas-be/app/module/magazines/mapper"
"go-humas-be/app/module/magazines/repository"
"go-humas-be/app/module/magazines/request"
@ -13,9 +14,10 @@ import (
// MagazinesService
type magazinesService struct {
Repo repository.MagazinesRepository
UsersRepo usersRepository.UsersRepository
Log zerolog.Logger
Repo repository.MagazinesRepository
UsersRepo usersRepository.UsersRepository
MagazineFilesRepo magazineFilesRepository.MagazineFilesRepository
Log zerolog.Logger
}
// MagazinesService define interface of IMagazinesService
@ -28,12 +30,13 @@ type MagazinesService interface {
}
// NewMagazinesService init MagazinesService
func NewMagazinesService(repo repository.MagazinesRepository, usersRepo usersRepository.UsersRepository, log zerolog.Logger) MagazinesService {
func NewMagazinesService(repo repository.MagazinesRepository, magazineFilesRepo magazineFilesRepository.MagazineFilesRepository, usersRepo usersRepository.UsersRepository, log zerolog.Logger) MagazinesService {
return &magazinesService{
Repo: repo,
UsersRepo: usersRepo,
Log: log,
Repo: repo,
MagazineFilesRepo: magazineFilesRepo,
UsersRepo: usersRepo,
Log: log,
}
}
@ -45,7 +48,7 @@ func (_i *magazinesService) All(req request.MagazinesQueryRequest) (magaziness [
}
for _, result := range results {
magaziness = append(magaziness, mapper.MagazinesResponseMapper(result))
magaziness = append(magaziness, mapper.MagazinesResponseMapper(result, _i.MagazineFilesRepo))
}
return
@ -57,7 +60,7 @@ func (_i *magazinesService) Show(id uint) (magazines *response.MagazinesResponse
return nil, err
}
return mapper.MagazinesResponseMapper(result), nil
return mapper.MagazinesResponseMapper(result, _i.MagazineFilesRepo), nil
}
func (_i *magazinesService) Save(req request.MagazinesCreateRequest, authToken string) (err error) {

View File

@ -13,7 +13,7 @@ body-limit = 1048576000 # "100 * 1024 * 1024"
[db.postgres]
dsn = "postgresql://humas_user:HumasDB@2024@38.47.180.165:5432/humas_db" # <driver>://<username>:<password>@<host>:<port>/<database>
migrate = true
migrate = false
seed = false
[logger]

View File

@ -3046,6 +3046,20 @@ const docTemplate = `{
"in": "formData",
"required": true
},
{
"type": "string",
"description": "Magazine file title",
"name": "title",
"in": "formData",
"required": true
},
{
"type": "string",
"description": "Magazine file description",
"name": "description",
"in": "formData",
"required": true
},
{
"type": "integer",
"description": "Magazine ID",
@ -3094,6 +3108,88 @@ const docTemplate = `{
"Magazines"
],
"summary": "Get all Magazines",
"parameters": [
{
"type": "integer",
"name": "createdById",
"in": "query"
},
{
"type": "string",
"name": "description",
"in": "query"
},
{
"type": "boolean",
"name": "isPublish",
"in": "query"
},
{
"type": "string",
"name": "pageUrl",
"in": "query"
},
{
"type": "integer",
"name": "statusId",
"in": "query"
},
{
"type": "string",
"name": "thumbnailPath",
"in": "query"
},
{
"type": "string",
"name": "thumbnailUrl",
"in": "query"
},
{
"type": "string",
"name": "title",
"in": "query"
},
{
"type": "integer",
"name": "count",
"in": "query"
},
{
"type": "integer",
"name": "limit",
"in": "query"
},
{
"type": "integer",
"name": "nextPage",
"in": "query"
},
{
"type": "integer",
"name": "page",
"in": "query"
},
{
"type": "integer",
"name": "previousPage",
"in": "query"
},
{
"type": "string",
"name": "sort",
"in": "query"
},
{
"type": "string",
"name": "sortBy",
"in": "query"
},
{
"type": "integer",
"name": "totalPage",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",

View File

@ -3035,6 +3035,20 @@
"in": "formData",
"required": true
},
{
"type": "string",
"description": "Magazine file title",
"name": "title",
"in": "formData",
"required": true
},
{
"type": "string",
"description": "Magazine file description",
"name": "description",
"in": "formData",
"required": true
},
{
"type": "integer",
"description": "Magazine ID",
@ -3083,6 +3097,88 @@
"Magazines"
],
"summary": "Get all Magazines",
"parameters": [
{
"type": "integer",
"name": "createdById",
"in": "query"
},
{
"type": "string",
"name": "description",
"in": "query"
},
{
"type": "boolean",
"name": "isPublish",
"in": "query"
},
{
"type": "string",
"name": "pageUrl",
"in": "query"
},
{
"type": "integer",
"name": "statusId",
"in": "query"
},
{
"type": "string",
"name": "thumbnailPath",
"in": "query"
},
{
"type": "string",
"name": "thumbnailUrl",
"in": "query"
},
{
"type": "string",
"name": "title",
"in": "query"
},
{
"type": "integer",
"name": "count",
"in": "query"
},
{
"type": "integer",
"name": "limit",
"in": "query"
},
{
"type": "integer",
"name": "nextPage",
"in": "query"
},
{
"type": "integer",
"name": "page",
"in": "query"
},
{
"type": "integer",
"name": "previousPage",
"in": "query"
},
{
"type": "string",
"name": "sort",
"in": "query"
},
{
"type": "string",
"name": "sortBy",
"in": "query"
},
{
"type": "integer",
"name": "totalPage",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",

View File

@ -2555,6 +2555,16 @@ paths:
name: files
required: true
type: file
- description: Magazine file title
in: formData
name: title
required: true
type: string
- description: Magazine file description
in: formData
name: description
required: true
type: string
- description: Magazine ID
in: path
name: magazineId
@ -2616,6 +2626,55 @@ paths:
/magazines:
get:
description: API for getting all Magazines
parameters:
- in: query
name: createdById
type: integer
- in: query
name: description
type: string
- in: query
name: isPublish
type: boolean
- in: query
name: pageUrl
type: string
- in: query
name: statusId
type: integer
- in: query
name: thumbnailPath
type: string
- in: query
name: thumbnailUrl
type: string
- in: query
name: title
type: string
- in: query
name: count
type: integer
- in: query
name: limit
type: integer
- in: query
name: nextPage
type: integer
- in: query
name: page
type: integer
- in: query
name: previousPage
type: integer
- in: query
name: sort
type: string
- in: query
name: sortBy
type: string
- in: query
name: totalPage
type: integer
responses:
"200":
description: OK