From 1a72c23956e97235cfa4fda76c8b214e2bbc9862 Mon Sep 17 00:00:00 2001 From: Alix JEUDI--LEMOINE Date: Wed, 28 May 2025 13:47:45 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Add=20get=20caption=20/=20get=20met?= =?UTF-8?q?adata=20routes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .drone.yml | 2 +- app/dto/image.py | 10 +++++++--- app/routes/images.py | 28 +++++++++++++++++++++++++--- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/.drone.yml b/.drone.yml index 23a0c8e..c96fa85 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,6 +1,6 @@ kind: pipeline type: docker -name: Deploiement +name: Backend CI/CD trigger: event: diff --git a/app/dto/image.py b/app/dto/image.py index 3fcb792..a9f0422 100644 --- a/app/dto/image.py +++ b/app/dto/image.py @@ -1,4 +1,4 @@ -from typing import Optional +from typing import Optional, Dict, Any from pydantic import BaseModel from fastapi import UploadFile @@ -6,5 +6,9 @@ class ImageUploadDTO(BaseModel): exif_date: Optional[str] = None caption: Optional[str] = None -class ImageUpdateCaptionDTO(BaseModel): - caption: str \ No newline at end of file +class ImageCaptionDTO(BaseModel): + caption: str + +class ImageMetadataDTO(BaseModel): + metadata: Dict[str, Any] + pin_id: Optional[str] = None \ No newline at end of file diff --git a/app/routes/images.py b/app/routes/images.py index 69ebcdf..7a09e69 100644 --- a/app/routes/images.py +++ b/app/routes/images.py @@ -11,7 +11,7 @@ from datetime import datetime from app.models import HTTPError, User from app.models.image import Image -from app.dto.image import ImageUploadDTO, ImageUpdateCaptionDTO +from app.dto.image import ImageUploadDTO, ImageCaptionDTO, ImageMetadataDTO from .utils import get_current_user, objectid_misformatted import app.config as config @@ -194,7 +194,7 @@ async def delete_image(id: str, current_user: User = Depends(get_current_user)): ) async def update_caption( id: str, - caption_data: ImageUpdateCaptionDTO, + caption_data: ImageCaptionDTO, current_user: User = Depends(get_current_user) ): check_image_permissions(id, current_user) @@ -204,4 +204,26 @@ async def update_caption( {"$set": {"caption": caption_data.caption}} ) - return {"message": "Caption updated successfully"} \ No newline at end of file + return {"message": "Caption updated successfully"} + +@images_router.get( + path="/{id}/caption", + response_model=ImageCaptionDTO, + responses={401: {"model": HTTPError}, 403: {"model": HTTPError}, 404: {"model": HTTPError}} +) +async def get_caption(id: str, current_user: User = Depends(get_current_user)): + image = check_image_permissions(id, current_user) + return ImageCaptionDTO(caption=image.get("caption", "")) + +@images_router.get( + path="/{id}/metadata", + response_model=ImageMetadataDTO, + responses={401: {"model": HTTPError}, 403: {"model": HTTPError}, 404: {"model": HTTPError}} +) +async def get_metadata(id: str, current_user: User = Depends(get_current_user)): + image = check_image_permissions(id, current_user) + return ImageMetadataDTO( + metadata=image.get("metadata", {}), + pin_id=str(image.get("pin_id")) if image.get("pin_id") else None + ) +