feat(API): media field type
This commit is contained in:
1 parent
ad5faf3d19
commit
a2d596f4ca
63 files changed
+2567
-259
No files matched your search
@@ -42,6 +42,33 @@ type entryResponse struct {
|
||||
UpdatedBy uint32 `json:"updated_by"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
Media map[string]any `json:"media"`
|
||||
}
|
||||
|
||||
type mediaBody struct {
|
||||
ID uint32 `json:"id"`
|
||||
Filename string `json:"filename"`
|
||||
Width *int `json:"width"`
|
||||
Height *int `json:"height"`
|
||||
Size int64 `json:"size"`
|
||||
ThumbnailURL string `json:"thumbnail_url"`
|
||||
}
|
||||
|
||||
type missingMediaBody struct {
|
||||
ID uint32 `json:"id"`
|
||||
Missing bool `json:"missing"`
|
||||
}
|
||||
|
||||
func toMediaResponse(media map[string]useCases.EntryMedia) map[string]any {
|
||||
body := make(map[string]any, len(media))
|
||||
for key, item := range media {
|
||||
if item.Missing {
|
||||
body[key] = missingMediaBody{ID: item.ID, Missing: true}
|
||||
continue
|
||||
}
|
||||
body[key] = mediaBody{ID: item.ID, Filename: item.Filename, Width: item.Width, Height: item.Height, Size: item.Size, ThumbnailURL: item.ThumbnailURL}
|
||||
}
|
||||
return body
|
||||
}
|
||||
|
||||
func toResponse(typed useCases.TypedEntry) entryResponse {
|
||||
@@ -53,6 +80,7 @@ func toResponse(typed useCases.TypedEntry) entryResponse {
|
||||
UpdatedBy: typed.UpdatedBy,
|
||||
CreatedAt: typed.CreatedAt,
|
||||
UpdatedAt: typed.UpdatedAt,
|
||||
Media: toMediaResponse(typed.Media),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -92,9 +92,27 @@ func intQueryParam(values url.Values, name string, fallback int) (int, error) {
|
||||
type usageResponse struct {
|
||||
Type string `json:"type"`
|
||||
ID uint32 `json:"id"`
|
||||
Title string `json:"title"`
|
||||
Title string `json:"title,omitempty"`
|
||||
Published *bool `json:"published,omitempty"`
|
||||
Fields []string `json:"fields"`
|
||||
|
||||
ContentTypeKey string `json:"content_type_key,omitempty"`
|
||||
ContentTypeName string `json:"content_type_name,omitempty"`
|
||||
FirstField *usageFirstFieldBody `json:"first_field,omitempty"`
|
||||
}
|
||||
|
||||
type usageFirstFieldBody struct {
|
||||
Key string `json:"key"`
|
||||
Type string `json:"type"`
|
||||
Value any `json:"value"`
|
||||
}
|
||||
|
||||
func toUsageResponse(usage useCases.MediaUsage) usageResponse {
|
||||
body := usageResponse{Type: usage.Type, ID: usage.ID, Title: usage.Title, Published: usage.Published, Fields: usage.Fields, ContentTypeKey: usage.ContentTypeKey, ContentTypeName: usage.ContentTypeName}
|
||||
if usage.FirstField != nil {
|
||||
body.FirstField = &usageFirstFieldBody{Key: usage.FirstField.Key, Type: string(usage.FirstField.Type), Value: usage.FirstField.Value}
|
||||
}
|
||||
return body
|
||||
}
|
||||
|
||||
type mergeResponse struct {
|
||||
@@ -347,7 +365,7 @@ func (h *Handler) Usage(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
response := make([]usageResponse, 0, len(usages))
|
||||
for _, usage := range usages {
|
||||
response = append(response, usageResponse{Type: usage.Type, ID: usage.ID, Title: usage.Title, Published: usage.Published, Fields: usage.Fields})
|
||||
response = append(response, toUsageResponse(usage))
|
||||
}
|
||||
writeJSON(w, http.StatusOK, response)
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user