first commit

This commit is contained in:
2026-07-18 20:32:51 +08:00
commit 77bf076ad0
34 changed files with 4068 additions and 0 deletions
+47
View File
@@ -0,0 +1,47 @@
from fastapi import APIRouter
from sqlalchemy import select
from sqlalchemy.orm import joinedload
from app.deps import CurrentUser, DbSession
from app.models import UserCollection
from app.schemas import CollectionCloudOut, CollectionOut
from app.serializers import cloud_type_summary, media_url
router = APIRouter(prefix="/collections", tags=["图鉴"])
@router.get("/me", response_model=list[CollectionOut])
async def get_my_collection(user: CurrentUser, db: DbSession) -> list[CollectionOut]:
result = await db.execute(
select(UserCollection)
.options(joinedload(UserCollection.cloud_type), joinedload(UserCollection.first_cloud))
.where(UserCollection.user_id == user.id)
.order_by(UserCollection.unlocked_at.asc())
)
output: list[CollectionOut] = []
for item in result.scalars().unique().all():
first_cloud = item.first_cloud
output.append(
CollectionOut(
id=item.id,
user_id=item.user_id,
cloud_type_id=item.cloud_type_id,
first_cloud_id=item.first_cloud_id,
unlocked_at=item.unlocked_at,
cloud_type=cloud_type_summary(item.cloud_type),
first_cloud=(
CollectionCloudOut(
id=first_cloud.id,
image_url=media_url(first_cloud.image_path) or "",
thumbnail_url=media_url(first_cloud.thumbnail_path) or "",
captured_at=first_cloud.captured_at,
created_at=first_cloud.created_at,
location_name=first_cloud.location_name,
)
if first_cloud
else None
),
)
)
return output