50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
"""
|
|
Trash API router
|
|
"""
|
|
from fastapi import APIRouter, Depends, HTTPException
|
|
from sqlalchemy import select, and_
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
from datetime import datetime
|
|
|
|
from app.database import get_db
|
|
from app.models import Photo
|
|
|
|
router = APIRouter()
|
|
|
|
@router.get("")
|
|
async def list_trashed(db: AsyncSession = Depends(get_db)):
|
|
"""List trashed photos"""
|
|
result = await db.execute(
|
|
select(Photo).where(Photo.is_trashed == True)
|
|
)
|
|
photos = result.scalars().all()
|
|
return photos
|
|
|
|
@router.post("/restore")
|
|
async def restore_photos(photo_ids: list[str], db: AsyncSession = Depends(get_db)):
|
|
"""Restore photos from trash"""
|
|
result = await db.execute(
|
|
select(Photo).where(and_(Photo.id.in_(photo_ids), Photo.is_trashed == True))
|
|
)
|
|
photos = result.scalars().all()
|
|
|
|
for photo in photos:
|
|
photo.is_trashed = False
|
|
photo.trashed_at = None
|
|
|
|
await db.commit()
|
|
return {"status": "success", "restored": len(photos)}
|
|
|
|
@router.delete("/empty")
|
|
async def empty_trash(db: AsyncSession = Depends(get_db)):
|
|
"""Permanently delete all trashed photos"""
|
|
result = await db.execute(
|
|
select(Photo).where(Photo.is_trashed == True)
|
|
)
|
|
photos = result.scalars().all()
|
|
|
|
for photo in photos:
|
|
await db.delete(photo)
|
|
|
|
await db.commit()
|
|
return {"status": "success", "deleted": len(photos)} |