feat: update article files response
This commit is contained in:
parent
0127b2fbda
commit
93adfdd217
|
|
@ -3,22 +3,22 @@ package entity
|
|||
import "time"
|
||||
|
||||
type ArticleFiles struct {
|
||||
ID uint `json:"id" gorm:"primaryKey;type:int4;autoIncrement"`
|
||||
ArticleId uint `json:"article_id" gorm:"type:int4"`
|
||||
FilePath string `json:"file_path" gorm:"type:varchar"`
|
||||
FileUrl string `json:"file_url" gorm:"type:varchar"`
|
||||
FileName string `json:"file_name" gorm:"type:varchar"`
|
||||
FileThumbnail string `json:"file_thumbnail" gorm:"type:varchar"`
|
||||
FileAlt string `json:"file_alt" gorm:"type:varchar"`
|
||||
WidthPixel string `json:"width_pixel" gorm:"type:varchar"`
|
||||
HeightPixel string `json:"height_pixel" gorm:"type:varchar"`
|
||||
Size string `json:"size" gorm:"type:varchar"`
|
||||
DownloadCount int `json:"download_count" gorm:"type:int4"`
|
||||
CreatedById int `json:"created_by_id" gorm:"type:int4"`
|
||||
StatusId int `json:"status_id" gorm:"type:int4"`
|
||||
IsPublish bool `json:"is_publish" gorm:"type:bool;default:false"`
|
||||
PublishedAt time.Time `json:"published_at" gorm:"type:timestamp"`
|
||||
IsActive bool `json:"is_active" gorm:"type:bool;default:true"`
|
||||
CreatedAt time.Time `json:"created_at" gorm:"default:now()"`
|
||||
UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"`
|
||||
ID uint `json:"id" gorm:"primaryKey;type:int4;autoIncrement"`
|
||||
ArticleId uint `json:"article_id" gorm:"type:int4"`
|
||||
FilePath *string `json:"file_path" gorm:"type:varchar"`
|
||||
FileUrl *string `json:"file_url" gorm:"type:varchar"`
|
||||
FileName *string `json:"file_name" gorm:"type:varchar"`
|
||||
FileThumbnail *string `json:"file_thumbnail" gorm:"type:varchar"`
|
||||
FileAlt *string `json:"file_alt" gorm:"type:varchar"`
|
||||
WidthPixel *string `json:"width_pixel" gorm:"type:varchar"`
|
||||
HeightPixel *string `json:"height_pixel" gorm:"type:varchar"`
|
||||
Size *string `json:"size" gorm:"type:varchar"`
|
||||
DownloadCount *int `json:"download_count" gorm:"type:int4"`
|
||||
CreatedById int `json:"created_by_id" gorm:"type:int4"`
|
||||
StatusId int `json:"status_id" gorm:"type:int4"`
|
||||
IsPublish *bool `json:"is_publish" gorm:"type:bool;default:false"`
|
||||
PublishedAt *time.Time `json:"published_at" gorm:"type:timestamp"`
|
||||
IsActive bool `json:"is_active" gorm:"type:bool;default:true"`
|
||||
CreatedAt time.Time `json:"created_at" gorm:"default:now()"`
|
||||
UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"`
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,27 +6,32 @@ import (
|
|||
)
|
||||
|
||||
func ArticleFilesResponseMapper(articleFilesReq *entity.ArticleFiles) (articleFilesRes *res.ArticleFilesResponse) {
|
||||
fileUrl := "/article-files/viewer/"
|
||||
if articleFilesReq.FileName != nil {
|
||||
fileUrl += *articleFilesReq.FileName
|
||||
}
|
||||
|
||||
if articleFilesReq != nil {
|
||||
articleFilesRes = &res.ArticleFilesResponse{
|
||||
ID: articleFilesReq.ID,
|
||||
ArticleId: articleFilesReq.ArticleId,
|
||||
FilePath: articleFilesReq.FilePath,
|
||||
FileUrl: articleFilesReq.FileUrl,
|
||||
FileName: articleFilesReq.FileName,
|
||||
FileThumbnail: articleFilesReq.FileThumbnail,
|
||||
FileAlt: articleFilesReq.FileAlt,
|
||||
ID: articleFilesReq.ID,
|
||||
ArticleId: articleFilesReq.ArticleId,
|
||||
FilePath: *articleFilesReq.FilePath,
|
||||
FileUrl: fileUrl,
|
||||
FileName: *articleFilesReq.FileName,
|
||||
FileThumbnail: *articleFilesReq.FileThumbnail,
|
||||
FileAlt: *articleFilesReq.FileAlt,
|
||||
WidthPixel: articleFilesReq.WidthPixel,
|
||||
HeightPixel: articleFilesReq.HeightPixel,
|
||||
Size: articleFilesReq.Size,
|
||||
DownloadCount: articleFilesReq.DownloadCount,
|
||||
CreatedById: articleFilesReq.CreatedById,
|
||||
StatusId: articleFilesReq.StatusId,
|
||||
IsPublish: articleFilesReq.IsPublish,
|
||||
PublishedAt: articleFilesReq.PublishedAt,
|
||||
IsActive: articleFilesReq.IsActive,
|
||||
CreatedAt: articleFilesReq.CreatedAt,
|
||||
UpdatedAt: articleFilesReq.UpdatedAt,
|
||||
HeightPixel: articleFilesReq.HeightPixel,
|
||||
Size: articleFilesReq.Size,
|
||||
DownloadCount: articleFilesReq.DownloadCount,
|
||||
CreatedById: articleFilesReq.CreatedById,
|
||||
StatusId: articleFilesReq.StatusId,
|
||||
IsPublish: articleFilesReq.IsPublish,
|
||||
PublishedAt: articleFilesReq.PublishedAt,
|
||||
IsActive: articleFilesReq.IsActive,
|
||||
CreatedAt: articleFilesReq.CreatedAt,
|
||||
UpdatedAt: articleFilesReq.UpdatedAt,
|
||||
}
|
||||
}
|
||||
return articleFilesRes
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ type articleFilesRepository struct {
|
|||
type ArticleFilesRepository interface {
|
||||
GetAll(req request.ArticleFilesQueryRequest) (articleFiless []*entity.ArticleFiles, paging paginator.Pagination, err error)
|
||||
FindOne(id uint) (articleFiles *entity.ArticleFiles, err error)
|
||||
FindByArticle(articleId uint) (articleFiles []*entity.ArticleFiles, err error)
|
||||
Create(articleFiles *entity.ArticleFiles) (err error)
|
||||
Update(id uint, articleFiles *entity.ArticleFiles) (err error)
|
||||
Delete(id uint) (err error)
|
||||
|
|
@ -79,6 +80,14 @@ func (_i *articleFilesRepository) FindOne(id uint) (articleFiles *entity.Article
|
|||
return articleFiles, nil
|
||||
}
|
||||
|
||||
func (_i *articleFilesRepository) FindByArticle(articleId uint) (articleFiles []*entity.ArticleFiles, err error) {
|
||||
if err := _i.DB.DB.Where("article_id = ?", articleId).Find(&articleFiles).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return articleFiles, nil
|
||||
}
|
||||
|
||||
func (_i *articleFilesRepository) Create(articleFiles *entity.ArticleFiles) (err error) {
|
||||
return _i.DB.DB.Create(articleFiles).Error
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,17 +20,16 @@ type ArticleFilesQueryRequest struct {
|
|||
}
|
||||
|
||||
type ArticleFilesCreateRequest struct {
|
||||
ArticleId uint `json:"articleId" validate:"required"`
|
||||
FilePath string `json:"filePath" validate:"required"`
|
||||
FileUrl string `json:"fileUrl" validate:"required"`
|
||||
FileName string `json:"fileName" validate:"required"`
|
||||
FileThumbnail string `json:"fileThumbnail" validate:"required"`
|
||||
FileAlt string `json:"fileAlt" validate:"required"`
|
||||
WidthPixel string `json:"widthPixel" validate:"required"`
|
||||
HeightPixel string `json:"heightPixel" validate:"required"`
|
||||
Size string `json:"size" validate:"required"`
|
||||
DownloadCount int `json:"downloadCount" validate:"required"`
|
||||
StatusId int `json:"statusId" validate:"required"`
|
||||
ArticleId uint `json:"articleId" validate:"required"`
|
||||
StatusId int `json:"statusId" validate:"required"`
|
||||
FilePath *string `json:"filePath"`
|
||||
FileUrl *string `json:"fileUrl"`
|
||||
FileName *string `json:"fileName"`
|
||||
FileThumbnail *string `json:"fileThumbnail"`
|
||||
FileAlt *string `json:"fileAlt"`
|
||||
WidthPixel *string `json:"widthPixel"`
|
||||
HeightPixel *string `json:"heightPixel"`
|
||||
Size *string `json:"size"`
|
||||
}
|
||||
|
||||
func (req ArticleFilesCreateRequest) ToEntity() *entity.ArticleFiles {
|
||||
|
|
@ -44,28 +43,24 @@ func (req ArticleFilesCreateRequest) ToEntity() *entity.ArticleFiles {
|
|||
WidthPixel: req.WidthPixel,
|
||||
HeightPixel: req.HeightPixel,
|
||||
Size: req.Size,
|
||||
DownloadCount: req.DownloadCount,
|
||||
StatusId: req.StatusId,
|
||||
IsPublish: false,
|
||||
}
|
||||
}
|
||||
|
||||
type ArticleFilesUpdateRequest struct {
|
||||
ID uint `json:"id" validate:"required"`
|
||||
ArticleId uint `json:"articleId" validate:"required"`
|
||||
FilePath string `json:"filePath" validate:"required"`
|
||||
FileUrl string `json:"fileUrl" validate:"required"`
|
||||
FileName string `json:"fileName" validate:"required"`
|
||||
FileThumbnail string `json:"fileThumbnail" validate:"required"`
|
||||
FileAlt string `json:"fileAlt" validate:"required"`
|
||||
WidthPixel string `json:"widthPixel" validate:"required"`
|
||||
HeightPixel string `json:"heightPixel" validate:"required"`
|
||||
Size string `json:"size" validate:"required"`
|
||||
DownloadCount int `json:"downloadCount" validate:"required"`
|
||||
CreatedById int `json:"createdById" validate:"required"`
|
||||
StatusId int `json:"statusId" validate:"required"`
|
||||
IsPublish bool `json:"isPublish" validate:"required"`
|
||||
PublishedAt time.Time `json:"publishedAt" validate:"required"`
|
||||
ID uint `json:"id" validate:"required"`
|
||||
ArticleId uint `json:"articleId" validate:"required"`
|
||||
StatusId int `json:"statusId" validate:"required"`
|
||||
FilePath *string `json:"filePath"`
|
||||
FileUrl *string `json:"fileUrl"`
|
||||
FileName *string `json:"fileName"`
|
||||
FileThumbnail *string `json:"fileThumbnail"`
|
||||
FileAlt *string `json:"fileAlt"`
|
||||
WidthPixel *string `json:"widthPixel"`
|
||||
HeightPixel *string `json:"heightPixel"`
|
||||
Size *string `json:"size"`
|
||||
IsPublish *bool `json:"isPublish" validate:"required"`
|
||||
PublishedAt *time.Time `json:"publishedAt" validate:"required"`
|
||||
}
|
||||
|
||||
func (req ArticleFilesUpdateRequest) ToEntity() *entity.ArticleFiles {
|
||||
|
|
@ -80,8 +75,6 @@ func (req ArticleFilesUpdateRequest) ToEntity() *entity.ArticleFiles {
|
|||
WidthPixel: req.WidthPixel,
|
||||
HeightPixel: req.HeightPixel,
|
||||
Size: req.Size,
|
||||
DownloadCount: req.DownloadCount,
|
||||
CreatedById: req.CreatedById,
|
||||
StatusId: req.StatusId,
|
||||
IsPublish: req.IsPublish,
|
||||
PublishedAt: req.PublishedAt,
|
||||
|
|
|
|||
|
|
@ -104,13 +104,14 @@ func (_i *articleFilesService) Save(c *fiber.Ctx, id uint) (err error) {
|
|||
|
||||
objectName := "articles/upload/" + file.Filename
|
||||
filenameOnly := file.Filename[:len(file.Filename)-len(filepath.Ext(file.Filename))]
|
||||
fileSize := strconv.FormatInt(file.Size, 10)
|
||||
|
||||
req := request.ArticleFilesCreateRequest{
|
||||
ArticleId: id,
|
||||
FilePath: objectName,
|
||||
FileName: file.Filename,
|
||||
FileAlt: filenameOnly,
|
||||
Size: strconv.FormatInt(file.Size, 10),
|
||||
FilePath: &objectName,
|
||||
FileName: &file.Filename,
|
||||
FileAlt: &filenameOnly,
|
||||
Size: &fileSize,
|
||||
}
|
||||
|
||||
err = _i.Repo.Create(req.ToEntity())
|
||||
|
|
@ -154,7 +155,7 @@ func (_i *articleFilesService) Viewer(c *fiber.Ctx, id uint) (err error) {
|
|||
|
||||
ctx := context.Background()
|
||||
bucketName := _i.MinioStorage.Cfg.ObjectStorage.MinioStorage.BucketName
|
||||
objectName := result.FilePath
|
||||
objectName := *result.FilePath
|
||||
|
||||
_i.Log.Info().Str("timestamp", time.Now().
|
||||
Format(time.RFC3339)).Str("Service:Resource", "Article:Uploads").
|
||||
|
|
|
|||
|
|
@ -2,14 +2,38 @@ package mapper
|
|||
|
||||
import (
|
||||
"go-humas-be/app/database/entity"
|
||||
articleFilesMapper "go-humas-be/app/module/article_files/mapper"
|
||||
articleFilesRepository "go-humas-be/app/module/article_files/repository"
|
||||
articleFilesResponse "go-humas-be/app/module/article_files/response"
|
||||
res "go-humas-be/app/module/articles/response"
|
||||
usersRepository "go-humas-be/app/module/users/repository"
|
||||
)
|
||||
|
||||
func ArticlesResponseMapper(articlesReq *entity.Articles) (articlesRes *res.ArticlesResponse) {
|
||||
func ArticlesResponseMapper(
|
||||
articlesReq *entity.Articles,
|
||||
articleFilesRepo articleFilesRepository.ArticleFilesRepository,
|
||||
usersRepo usersRepository.UsersRepository,
|
||||
) (articlesRes *res.ArticlesResponse) {
|
||||
thumbnailUrl := "/articles/thumbnail/viewer/"
|
||||
if articlesReq.ThumbnailName != nil {
|
||||
thumbnailUrl += *articlesReq.ThumbnailName
|
||||
}
|
||||
|
||||
findUser, _ := usersRepo.FindOne(*articlesReq.CreatedById)
|
||||
createdByName := ""
|
||||
if findUser != nil {
|
||||
createdByName = findUser.Fullname
|
||||
}
|
||||
|
||||
articleFiles, _ := articleFilesRepo.FindByArticle(articlesReq.ID)
|
||||
|
||||
var articleFilesArr []*articleFilesResponse.ArticleFilesResponse
|
||||
if len(articleFiles) > 0 {
|
||||
for _, result := range articleFiles {
|
||||
articleFilesArr = append(articleFilesArr, articleFilesMapper.ArticleFilesResponseMapper(result))
|
||||
}
|
||||
}
|
||||
|
||||
if articlesReq != nil {
|
||||
articlesRes = &res.ArticlesResponse{
|
||||
ID: articlesReq.ID,
|
||||
|
|
@ -22,6 +46,7 @@ func ArticlesResponseMapper(articlesReq *entity.Articles) (articlesRes *res.Arti
|
|||
ThumbnailUrl: thumbnailUrl,
|
||||
PageUrl: articlesReq.PageUrl,
|
||||
CreatedById: articlesReq.CreatedById,
|
||||
CreatedByName: &createdByName,
|
||||
ShareCount: articlesReq.ShareCount,
|
||||
ViewCount: articlesReq.ViewCount,
|
||||
DownloadCount: articlesReq.DownloadCount,
|
||||
|
|
@ -31,6 +56,8 @@ func ArticlesResponseMapper(articlesReq *entity.Articles) (articlesRes *res.Arti
|
|||
IsActive: articlesReq.IsActive,
|
||||
CreatedAt: articlesReq.CreatedAt,
|
||||
UpdatedAt: articlesReq.UpdatedAt,
|
||||
|
||||
ArticleFiles: articleFilesArr,
|
||||
}
|
||||
}
|
||||
return articlesRes
|
||||
|
|
|
|||
|
|
@ -1,6 +1,9 @@
|
|||
package response
|
||||
|
||||
import "time"
|
||||
import (
|
||||
articleFilesResponse "go-humas-be/app/module/article_files/response"
|
||||
"time"
|
||||
)
|
||||
|
||||
type ArticlesResponse struct {
|
||||
ID uint `json:"id"`
|
||||
|
|
@ -15,6 +18,7 @@ type ArticlesResponse struct {
|
|||
ThumbnailUrl string `json:"thumbnailUrl"`
|
||||
PageUrl *string `json:"pageUrl"`
|
||||
CreatedById *uint `json:"createdById"`
|
||||
CreatedByName *string `json:"createdByName"`
|
||||
ShareCount *int `json:"shareSount"`
|
||||
ViewCount *int `json:"viewCount"`
|
||||
DownloadCount *int `json:"downloadCount"`
|
||||
|
|
@ -24,4 +28,6 @@ type ArticlesResponse struct {
|
|||
IsActive *bool `json:"isActive"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
UpdatedAt time.Time `json:"updatedAt"`
|
||||
|
||||
ArticleFiles []*articleFilesResponse.ArticleFilesResponse `json:"files"`
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue