feat: update magazine, and magazine files
This commit is contained in:
parent
617a669e2c
commit
430003884a
|
|
@ -46,7 +46,14 @@ func (_i *magazineFilesController) All(c *fiber.Ctx) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var req request.MagazineFilesQueryRequest
|
reqContext := request.MagazineFilesQueryRequestContext{
|
||||||
|
Title: c.Query("title"),
|
||||||
|
Description: c.Query("description"),
|
||||||
|
MagazineId: c.Query("magazineId"),
|
||||||
|
StatusId: c.Query("statusId"),
|
||||||
|
IsPublish: c.Query("isPublish"),
|
||||||
|
}
|
||||||
|
req := reqContext.ToParamRequest()
|
||||||
req.Pagination = paginate
|
req.Pagination = paginate
|
||||||
|
|
||||||
magazineFilesData, paging, err := _i.magazineFilesService.All(req)
|
magazineFilesData, paging, err := _i.magazineFilesService.All(req)
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,12 @@
|
||||||
package repository
|
package repository
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"go-humas-be/app/database"
|
"go-humas-be/app/database"
|
||||||
"go-humas-be/app/database/entity"
|
"go-humas-be/app/database/entity"
|
||||||
"go-humas-be/app/module/magazine_files/request"
|
"go-humas-be/app/module/magazine_files/request"
|
||||||
"go-humas-be/utils/paginator"
|
"go-humas-be/utils/paginator"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
type magazineFilesRepository struct {
|
type magazineFilesRepository struct {
|
||||||
|
|
@ -33,8 +35,34 @@ func (_i *magazineFilesRepository) GetAll(req request.MagazineFilesQueryRequest)
|
||||||
var count int64
|
var count int64
|
||||||
|
|
||||||
query := _i.DB.DB.Model(&entity.MagazineFiles{})
|
query := _i.DB.DB.Model(&entity.MagazineFiles{})
|
||||||
|
query = query.Where("is_active = ?", true)
|
||||||
|
|
||||||
|
if req.Title != nil && *req.Title != "" {
|
||||||
|
title := strings.ToLower(*req.Title)
|
||||||
|
query = query.Where("LOWER(title) LIKE ?", "%"+strings.ToLower(title)+"%")
|
||||||
|
}
|
||||||
|
if req.Description != nil && *req.Description != "" {
|
||||||
|
description := strings.ToLower(*req.Description)
|
||||||
|
query = query.Where("LOWER(description) LIKE ?", "%"+strings.ToLower(description)+"%")
|
||||||
|
}
|
||||||
|
if req.MagazineId != nil {
|
||||||
|
query = query.Where("magazine_id = ?", req.MagazineId)
|
||||||
|
}
|
||||||
|
if req.IsPublish != nil {
|
||||||
|
query = query.Where("is_publish = ?", req.IsPublish)
|
||||||
|
}
|
||||||
|
if req.StatusId != nil {
|
||||||
|
query = query.Where("status_id = ?", req.StatusId)
|
||||||
|
}
|
||||||
query.Count(&count)
|
query.Count(&count)
|
||||||
|
|
||||||
|
if req.Pagination.SortBy != "" {
|
||||||
|
direction := "ASC"
|
||||||
|
if req.Pagination.Sort == "desc" {
|
||||||
|
direction = "DESC"
|
||||||
|
}
|
||||||
|
query.Order(fmt.Sprintf("%s %s", req.Pagination.SortBy, direction))
|
||||||
|
}
|
||||||
req.Pagination.Count = count
|
req.Pagination.Count = count
|
||||||
req.Pagination = paginator.Paging(req.Pagination)
|
req.Pagination = paginator.Paging(req.Pagination)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package request
|
||||||
import (
|
import (
|
||||||
"go-humas-be/app/database/entity"
|
"go-humas-be/app/database/entity"
|
||||||
"go-humas-be/utils/paginator"
|
"go-humas-be/utils/paginator"
|
||||||
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -11,23 +12,23 @@ type MagazineFilesGeneric interface {
|
||||||
}
|
}
|
||||||
|
|
||||||
type MagazineFilesQueryRequest struct {
|
type MagazineFilesQueryRequest struct {
|
||||||
Title string `json:"title" validate:"required"`
|
Title *string `json:"title"`
|
||||||
Description string `json:"description" validate:"required"`
|
Description *string `json:"description"`
|
||||||
MagazineId int `json:"magazine_id" validate:"required"`
|
MagazineId *int `json:"magazineId"`
|
||||||
DownloadCount int `json:"download_count" validate:"required"`
|
DownloadCount *int `json:"downloadCount"`
|
||||||
StatusId int `json:"status_id" validate:"required"`
|
StatusId *int `json:"statusId"`
|
||||||
IsPublish bool `json:"is_publish" validate:"required"`
|
IsPublish *bool `json:"isPublish"`
|
||||||
PublishedAt time.Time `json:"published_at" validate:"required"`
|
PublishedAt *time.Time `json:"publishedAt"`
|
||||||
IsActive bool `json:"is_active" validate:"required"`
|
IsActive *bool `json:"isActive"`
|
||||||
Pagination *paginator.Pagination `json:"pagination"`
|
Pagination *paginator.Pagination `json:"pagination"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type MagazineFilesCreateRequest struct {
|
type MagazineFilesCreateRequest struct {
|
||||||
Title string `json:"title" validate:"required"`
|
Title string `json:"title" validate:"required"`
|
||||||
Description string `json:"description" validate:"required"`
|
Description string `json:"description" validate:"required"`
|
||||||
MagazineId uint `json:"magazine_id" validate:"required"`
|
MagazineId uint `json:"magazineId" validate:"required"`
|
||||||
StatusId int `json:"status_id" validate:"required"`
|
StatusId int `json:"statusId" validate:"required"`
|
||||||
DownloadCount *int `json:"download_count"`
|
DownloadCount *int `json:"downloadCount"`
|
||||||
FilePath *string `json:"filePath"`
|
FilePath *string `json:"filePath"`
|
||||||
FileUrl *string `json:"fileUrl"`
|
FileUrl *string `json:"fileUrl"`
|
||||||
FileName *string `json:"fileName"`
|
FileName *string `json:"fileName"`
|
||||||
|
|
@ -35,8 +36,8 @@ type MagazineFilesCreateRequest struct {
|
||||||
WidthPixel *string `json:"widthPixel"`
|
WidthPixel *string `json:"widthPixel"`
|
||||||
HeightPixel *string `json:"heightPixel"`
|
HeightPixel *string `json:"heightPixel"`
|
||||||
Size *string `json:"size"`
|
Size *string `json:"size"`
|
||||||
IsPublish *bool `json:"is_publish"`
|
IsPublish *bool `json:"isPublish"`
|
||||||
PublishedAt *time.Time `json:"published_at"`
|
PublishedAt *time.Time `json:"publishedAt"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (req MagazineFilesCreateRequest) ToEntity() *entity.MagazineFiles {
|
func (req MagazineFilesCreateRequest) ToEntity() *entity.MagazineFiles {
|
||||||
|
|
@ -62,9 +63,9 @@ type MagazineFilesUpdateRequest struct {
|
||||||
ID uint `json:"id" validate:"required"`
|
ID uint `json:"id" validate:"required"`
|
||||||
Title string `json:"title" validate:"required"`
|
Title string `json:"title" validate:"required"`
|
||||||
Description string `json:"description" validate:"required"`
|
Description string `json:"description" validate:"required"`
|
||||||
MagazineId uint `json:"magazine_id" validate:"required"`
|
MagazineId uint `json:"magazineId" validate:"required"`
|
||||||
DownloadCount *int `json:"download_count" validate:"required"`
|
StatusId int `json:"statusId" validate:"required"`
|
||||||
StatusId int `json:"status_id" validate:"required"`
|
DownloadCount *int `json:"downloadCount"`
|
||||||
FilePath *string `json:"filePath"`
|
FilePath *string `json:"filePath"`
|
||||||
FileUrl *string `json:"fileUrl"`
|
FileUrl *string `json:"fileUrl"`
|
||||||
FileName *string `json:"fileName"`
|
FileName *string `json:"fileName"`
|
||||||
|
|
@ -72,8 +73,8 @@ type MagazineFilesUpdateRequest struct {
|
||||||
WidthPixel *string `json:"widthPixel"`
|
WidthPixel *string `json:"widthPixel"`
|
||||||
HeightPixel *string `json:"heightPixel"`
|
HeightPixel *string `json:"heightPixel"`
|
||||||
Size *string `json:"size"`
|
Size *string `json:"size"`
|
||||||
IsPublish *bool `json:"is_publish"`
|
IsPublish *bool `json:"isPublish"`
|
||||||
PublishedAt *time.Time `json:"published_at"`
|
PublishedAt *time.Time `json:"publishedAt"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (req MagazineFilesUpdateRequest) ToEntity() *entity.MagazineFiles {
|
func (req MagazineFilesUpdateRequest) ToEntity() *entity.MagazineFiles {
|
||||||
|
|
@ -95,3 +96,42 @@ func (req MagazineFilesUpdateRequest) ToEntity() *entity.MagazineFiles {
|
||||||
PublishedAt: req.PublishedAt,
|
PublishedAt: req.PublishedAt,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type MagazineFilesQueryRequestContext struct {
|
||||||
|
Title string `json:"title"`
|
||||||
|
Description string `json:"description"`
|
||||||
|
MagazineId string `json:"magazineId"`
|
||||||
|
IsPublish string `json:"isPublish"`
|
||||||
|
StatusId string `json:"statusId"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (req MagazineFilesQueryRequestContext) ToParamRequest() MagazineFilesQueryRequest {
|
||||||
|
var request MagazineFilesQueryRequest
|
||||||
|
|
||||||
|
if title := req.Title; title != "" {
|
||||||
|
request.Title = &title
|
||||||
|
}
|
||||||
|
if description := req.Description; description != "" {
|
||||||
|
request.Description = &description
|
||||||
|
}
|
||||||
|
if magazineIdStr := req.MagazineId; magazineIdStr != "" {
|
||||||
|
magazineId, err := strconv.Atoi(magazineIdStr)
|
||||||
|
if err == nil {
|
||||||
|
request.MagazineId = &magazineId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if isPublishStr := req.IsPublish; isPublishStr != "" {
|
||||||
|
isPublish, err := strconv.ParseBool(isPublishStr)
|
||||||
|
if err == nil {
|
||||||
|
request.IsPublish = &isPublish
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if statusIdStr := req.StatusId; statusIdStr != "" {
|
||||||
|
statusId, err := strconv.Atoi(statusIdStr)
|
||||||
|
if err == nil {
|
||||||
|
request.StatusId = &statusId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return request
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,14 @@ func (_i *magazinesController) All(c *fiber.Ctx) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var req request.MagazinesQueryRequest
|
reqContext := request.MagazinesQueryRequestContext{
|
||||||
|
Title: c.Query("title"),
|
||||||
|
Description: c.Query("description"),
|
||||||
|
CreatedById: c.Query("createdById"),
|
||||||
|
StatusId: c.Query("statusId"),
|
||||||
|
IsPublish: c.Query("isPublish"),
|
||||||
|
}
|
||||||
|
req := reqContext.ToParamRequest()
|
||||||
req.Pagination = paginate
|
req.Pagination = paginate
|
||||||
|
|
||||||
magazinesData, paging, err := _i.magazinesService.All(req)
|
magazinesData, paging, err := _i.magazinesService.All(req)
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,12 @@
|
||||||
package repository
|
package repository
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"go-humas-be/app/database"
|
"go-humas-be/app/database"
|
||||||
"go-humas-be/app/database/entity"
|
"go-humas-be/app/database/entity"
|
||||||
"go-humas-be/app/module/magazines/request"
|
"go-humas-be/app/module/magazines/request"
|
||||||
"go-humas-be/utils/paginator"
|
"go-humas-be/utils/paginator"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
type magazinesRepository struct {
|
type magazinesRepository struct {
|
||||||
|
|
@ -31,8 +33,35 @@ func (_i *magazinesRepository) GetAll(req request.MagazinesQueryRequest) (magazi
|
||||||
var count int64
|
var count int64
|
||||||
|
|
||||||
query := _i.DB.DB.Model(&entity.Magazines{})
|
query := _i.DB.DB.Model(&entity.Magazines{})
|
||||||
|
query = query.Where("is_active = ?", true)
|
||||||
|
|
||||||
|
if req.Title != nil && *req.Title != "" {
|
||||||
|
title := strings.ToLower(*req.Title)
|
||||||
|
query = query.Where("LOWER(title) LIKE ?", "%"+strings.ToLower(title)+"%")
|
||||||
|
}
|
||||||
|
if req.Description != nil && *req.Description != "" {
|
||||||
|
description := strings.ToLower(*req.Description)
|
||||||
|
query = query.Where("LOWER(description) LIKE ?", "%"+strings.ToLower(description)+"%")
|
||||||
|
}
|
||||||
|
if req.CreatedById != nil {
|
||||||
|
query = query.Where("created_by_id = ?", req.CreatedById)
|
||||||
|
}
|
||||||
|
if req.IsPublish != nil {
|
||||||
|
query = query.Where("is_publish = ?", req.IsPublish)
|
||||||
|
}
|
||||||
|
if req.StatusId != nil {
|
||||||
|
query = query.Where("status_id = ?", req.StatusId)
|
||||||
|
}
|
||||||
query.Count(&count)
|
query.Count(&count)
|
||||||
|
|
||||||
|
if req.Pagination.SortBy != "" {
|
||||||
|
direction := "ASC"
|
||||||
|
if req.Pagination.Sort == "desc" {
|
||||||
|
direction = "DESC"
|
||||||
|
}
|
||||||
|
query.Order(fmt.Sprintf("%s %s", req.Pagination.SortBy, direction))
|
||||||
|
}
|
||||||
|
|
||||||
req.Pagination.Count = count
|
req.Pagination.Count = count
|
||||||
req.Pagination = paginator.Paging(req.Pagination)
|
req.Pagination = paginator.Paging(req.Pagination)
|
||||||
|
|
||||||
|
|
@ -66,4 +95,4 @@ func (_i *magazinesRepository) Update(id uint, magazines *entity.Magazines) (err
|
||||||
|
|
||||||
func (_i *magazinesRepository) Delete(id uint) error {
|
func (_i *magazinesRepository) Delete(id uint) error {
|
||||||
return _i.DB.DB.Delete(&entity.Magazines{}, id).Error
|
return _i.DB.DB.Delete(&entity.Magazines{}, id).Error
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package request
|
||||||
import (
|
import (
|
||||||
"go-humas-be/app/database/entity"
|
"go-humas-be/app/database/entity"
|
||||||
"go-humas-be/utils/paginator"
|
"go-humas-be/utils/paginator"
|
||||||
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -11,30 +12,28 @@ type MagazinesGeneric interface {
|
||||||
}
|
}
|
||||||
|
|
||||||
type MagazinesQueryRequest struct {
|
type MagazinesQueryRequest struct {
|
||||||
Title string `json:"title" validate:"required"`
|
Title *string `json:"title"`
|
||||||
Description string `json:"description" validate:"required"`
|
Description *string `json:"description"`
|
||||||
ThumbnailPath string `json:"thumbnail_path" validate:"required"`
|
ThumbnailPath *string `json:"thumbnailPath"`
|
||||||
ThumbnailUrl string `json:"thumbnail_url" validate:"required"`
|
ThumbnailUrl *string `json:"thumbnailUrl"`
|
||||||
PageUrl string `json:"page_url" validate:"required"`
|
PageUrl *string `json:"pageUrl"`
|
||||||
CreatedById int `json:"created_by_id" validate:"required"`
|
CreatedById *int `json:"createdById"`
|
||||||
StatusId int `json:"status_id" validate:"required"`
|
StatusId *int `json:"statusId"`
|
||||||
IsPublish bool `json:"is_publish" validate:"required"`
|
IsPublish *bool `json:"isPublish"`
|
||||||
PublishedAt time.Time `json:"published_at" validate:"required"`
|
|
||||||
IsActive bool `json:"is_active" validate:"required"`
|
|
||||||
Pagination *paginator.Pagination `json:"pagination"`
|
Pagination *paginator.Pagination `json:"pagination"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type MagazinesCreateRequest struct {
|
type MagazinesCreateRequest struct {
|
||||||
Title string `json:"title" validate:"required"`
|
Title string `json:"title" validate:"required"`
|
||||||
Description string `json:"description" validate:"required"`
|
Description string `json:"description" validate:"required"`
|
||||||
ThumbnailPath string `json:"thumbnail_path" validate:"required"`
|
ThumbnailPath string `json:"thumbnailPath" validate:"required"`
|
||||||
ThumbnailUrl string `json:"thumbnail_url" validate:"required"`
|
ThumbnailUrl string `json:"thumbnailUrl" validate:"required"`
|
||||||
PageUrl string `json:"page_url" validate:"required"`
|
PageUrl string `json:"pageUrl" validate:"required"`
|
||||||
CreatedById int `json:"created_by_id" validate:"required"`
|
CreatedById *uint `json:"createdById" validate:"required"`
|
||||||
StatusId int `json:"status_id" validate:"required"`
|
StatusId int `json:"statusId" validate:"required"`
|
||||||
IsPublish bool `json:"is_publish" validate:"required"`
|
IsPublish bool `json:"isPublish" validate:"required"`
|
||||||
PublishedAt time.Time `json:"published_at" validate:"required"`
|
PublishedAt time.Time `json:"publishedAt" validate:"required"`
|
||||||
IsActive bool `json:"is_active" validate:"required"`
|
IsActive bool `json:"isActive" validate:"required"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (req MagazinesCreateRequest) ToEntity() *entity.Magazines {
|
func (req MagazinesCreateRequest) ToEntity() *entity.Magazines {
|
||||||
|
|
@ -56,16 +55,16 @@ type MagazinesUpdateRequest struct {
|
||||||
ID uint `json:"id" validate:"required"`
|
ID uint `json:"id" validate:"required"`
|
||||||
Title string `json:"title" validate:"required"`
|
Title string `json:"title" validate:"required"`
|
||||||
Description string `json:"description" validate:"required"`
|
Description string `json:"description" validate:"required"`
|
||||||
ThumbnailPath string `json:"thumbnail_path" validate:"required"`
|
ThumbnailPath string `json:"thumbnailPath" validate:"required"`
|
||||||
ThumbnailUrl string `json:"thumbnail_url" validate:"required"`
|
ThumbnailUrl string `json:"thumbnailUrl" validate:"required"`
|
||||||
PageUrl string `json:"page_url" validate:"required"`
|
PageUrl string `json:"pageUrl" validate:"required"`
|
||||||
CreatedById int `json:"created_by_id" validate:"required"`
|
CreatedById *uint `json:"createdById" validate:"required"`
|
||||||
StatusId int `json:"status_id" validate:"required"`
|
StatusId int `json:"statusId" validate:"required"`
|
||||||
IsPublish bool `json:"is_publish" validate:"required"`
|
IsPublish bool `json:"isPublish" validate:"required"`
|
||||||
PublishedAt time.Time `json:"published_at" validate:"required"`
|
PublishedAt time.Time `json:"publishedAt" validate:"required"`
|
||||||
IsActive bool `json:"is_active" validate:"required"`
|
IsActive bool `json:"isActive" validate:"required"`
|
||||||
CreatedAt time.Time `json:"created_at"`
|
CreatedAt time.Time `json:"createdAt"`
|
||||||
UpdatedAt time.Time `json:"updated_at"`
|
UpdatedAt time.Time `json:"updatedAt"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (req MagazinesUpdateRequest) ToEntity() *entity.Magazines {
|
func (req MagazinesUpdateRequest) ToEntity() *entity.Magazines {
|
||||||
|
|
@ -85,3 +84,42 @@ func (req MagazinesUpdateRequest) ToEntity() *entity.Magazines {
|
||||||
UpdatedAt: req.UpdatedAt,
|
UpdatedAt: req.UpdatedAt,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type MagazinesQueryRequestContext struct {
|
||||||
|
Title string `json:"title"`
|
||||||
|
Description string `json:"description"`
|
||||||
|
CreatedById string `json:"createdById"`
|
||||||
|
IsPublish string `json:"isPublish"`
|
||||||
|
StatusId string `json:"statusId"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (req MagazinesQueryRequestContext) ToParamRequest() MagazinesQueryRequest {
|
||||||
|
var request MagazinesQueryRequest
|
||||||
|
|
||||||
|
if title := req.Title; title != "" {
|
||||||
|
request.Title = &title
|
||||||
|
}
|
||||||
|
if description := req.Description; description != "" {
|
||||||
|
request.Description = &description
|
||||||
|
}
|
||||||
|
if isPublishStr := req.IsPublish; isPublishStr != "" {
|
||||||
|
isPublish, err := strconv.ParseBool(isPublishStr)
|
||||||
|
if err == nil {
|
||||||
|
request.IsPublish = &isPublish
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if statusIdStr := req.StatusId; statusIdStr != "" {
|
||||||
|
statusId, err := strconv.Atoi(statusIdStr)
|
||||||
|
if err == nil {
|
||||||
|
request.StatusId = &statusId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if createdByIdStr := req.CreatedById; createdByIdStr != "" {
|
||||||
|
createdById, err := strconv.Atoi(createdByIdStr)
|
||||||
|
if err == nil {
|
||||||
|
request.CreatedById = &createdById
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return request
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue