xiangqinxiaochengxu/backend/app/routers/upload.py

64 lines
2.1 KiB
Python

from fastapi import APIRouter, Depends, File, HTTPException, UploadFile, status
from sqlalchemy.ext.asyncio import AsyncSession
from app.database import get_db
from app.dependencies import get_current_admin, get_current_user_id
from app.services.upload_service import (
upload_activity_image,
upload_user_avatar,
upload_user_profile_image,
)
from app.services.user_service import get_user_by_id
router = APIRouter()
@router.post("/avatar")
async def upload_avatar(
file: UploadFile = File(...),
current_user_id: int = Depends(get_current_user_id),
session: AsyncSession = Depends(get_db),
) -> dict:
user = await get_user_by_id(session, current_user_id)
if user is None:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="User not found")
try:
data = await upload_user_avatar(session, user, file)
except ValueError as exc:
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(exc)) from exc
return {"code": 0, "message": "ok", "data": data}
@router.post("/profile-image")
async def upload_profile_image(
file: UploadFile = File(...),
current_user_id: int = Depends(get_current_user_id),
session: AsyncSession = Depends(get_db),
) -> dict:
user = await get_user_by_id(session, current_user_id)
if user is None:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="User not found")
try:
data = await upload_user_profile_image(session, user, file)
except ValueError as exc:
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(exc)) from exc
return {"code": 0, "message": "ok", "data": data}
@router.post("/activity-image")
async def upload_activity_cover_image(
file: UploadFile = File(...),
current_user_id: int = Depends(get_current_user_id),
) -> dict:
_ = current_user_id
try:
data = await upload_activity_image(file)
except ValueError as exc:
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(exc)) from exc
return {"code": 0, "message": "ok", "data": data}