feat: update magazine and magazine files
This commit is contained in:
parent
21cb8aa74e
commit
7c8bb9ef6a
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@ func (req MagazinesCreateRequest) ToEntity() *entity.Magazines {
|
|||
StatusId: req.StatusId,
|
||||
IsPublish: req.IsPublish,
|
||||
PublishedAt: req.PublishedAt,
|
||||
IsActive: true,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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"`
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue