from fastapi import APIRouter, Depends, File, HTTPException, Query, UploadFile from fastapi.responses import FileResponse from sqlalchemy.orm import Session from app.database import get_db from app.models.user import User from app.schemas.journal import JournalCategoryReorderRequest from app.security import require_login from app.services import journal_service router = APIRouter(prefix="/api/journal", tags=["journal"], dependencies=[Depends(require_login)]) @router.get("/media/{attachment_id}") def get_media( attachment_id: int, thumbnail: bool = Query(False), db: Session = Depends(get_db), current_user: User = Depends(require_login), ): attachment = journal_service.get_attachment(db, attachment_id, current_user.id) if attachment is None: raise HTTPException(status_code=404, detail="첨부파일을 찾을 수 없습니다") path = attachment.thumbnail_path if (thumbnail and attachment.thumbnail_path) else attachment.file_path return FileResponse(path, filename=attachment.original_filename) @router.post("/paste-image") def paste_image( file: UploadFile = File(...), current_user: User = Depends(require_login), ): try: filename = journal_service.save_pasted_image(current_user.id, file) except ValueError as exc: raise HTTPException(status_code=400, detail=str(exc)) return {"url": f"/api/journal/pasted-media/{filename}"} @router.get("/pasted-media/{filename}") def get_pasted_image(filename: str, current_user: User = Depends(require_login)): path = journal_service.get_pasted_image_path(current_user.id, filename) if path is None: raise HTTPException(status_code=404, detail="이미지를 찾을 수 없습니다") return FileResponse(path) @router.post("/categories/reorder") def reorder_categories( data: JournalCategoryReorderRequest, db: Session = Depends(get_db), current_user: User = Depends(require_login), ): journal_service.reorder_categories(db, current_user.id, data.category_ids) return {"ok": True}