From 7d28dff65b6c9adee02edae070eb84ec822acbdb Mon Sep 17 00:00:00 2001 From: yanghao05 Date: Mon, 7 Apr 2025 15:30:46 +0800 Subject: [PATCH] feat: add media type to media model --- backend/app/models/medias.go | 68 +++++++++++++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) diff --git a/backend/app/models/medias.go b/backend/app/models/medias.go index f1fc03d..d577188 100644 --- a/backend/app/models/medias.go +++ b/backend/app/models/medias.go @@ -8,9 +8,32 @@ import ( "quyun/database/schemas/public/table" . "github.com/go-jet/jet/v2/postgres" + "github.com/samber/lo" "github.com/sirupsen/logrus" ) +type MediaType string + +const ( + MediaTypeUnknown MediaType = "unknown" + MediaTypeArchive MediaType = "archive" + MediaTypeImage MediaType = "image" + MediaTypeVideo MediaType = "video" + MediaTypeDocument MediaType = "document" + MediaTypeAudio MediaType = "audio" + MediaTypePDF MediaType = "pdf" +) + +type MediaItem struct { + ID int64 `json:"id"` + Name string `json:"name"` + UploadTime string `json:"upload_time"` + FileSize int64 `json:"file_size"` + MimeType string `json:"media_type"` + FileType MediaType `json:"file_type"` + ThumbnailUrl string `json:"thumbnail_url"` +} + // @provider type mediasModel struct { log *logrus.Entry `inject:"false"` @@ -65,8 +88,21 @@ func (m *mediasModel) List(ctx context.Context, pagination *requests.Pagination) return nil, err } + // Convert model.Medias to MediaItem + mediaItems := lo.Map(medias, func(media model.Medias, _ int) MediaItem { + return MediaItem{ + ID: media.ID, + Name: media.Name, + UploadTime: media.CreatedAt.Format("2006-01-02 15:04:05"), + FileSize: media.Size, + MimeType: media.MimeType, + FileType: m.ConvertFileTypeByMimeType(media.MimeType), + ThumbnailUrl: "", + } + }) + return &requests.Pager{ - Items: medias, + Items: mediaItems, Total: count, Pagination: *pagination, }, nil @@ -84,3 +120,33 @@ func (m *mediasModel) Create(ctx context.Context, model *model.Medias) error { m.log.Infof("media item created successfully") return nil } + +func (m *mediasModel) ConvertFileTypeByMimeType(mimeType string) MediaType { + switch mimeType { + case "image/jpeg": + case "image/jpg": + case "image/png": + return MediaTypeImage + case "video/mp4": + return MediaTypeVideo + case "audio/mpeg": + return MediaTypeAudio + case "application/pdf": + return MediaTypePDF + case "application/msword": + case "application/vnd.openxmlformats-officedocument.wordprocessingml.document": + case "application/vnd.ms-excel": + case "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": + case "application/vnd.ms-powerpoint": + case "application/vnd.openxmlformats-officedocument.presentationml.presentation": + return MediaTypeDocument + case "application/rar": + case "application/x-rar-compressed": + case "application/x-zip-compressed": + case "application/x-zip": + case "application/zip": + case "application/x-7z-compressed": + return MediaTypeArchive + } + return MediaTypeUnknown +}