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 + ) +