| import uuid |
| from fastapi import APIRouter, Depends, HTTPException |
| from sqlmodel.ext.asyncio.session import AsyncSession |
|
|
| from src.core.database import get_async_session |
| from src.core.schemas import BaseResponse |
| from src.auth.utils import get_current_user |
|
|
| from src.journaling.schemas import ( |
| JournalCreate, |
| JournalUpdate, |
| JournalResponse, |
| ) |
| from src.journaling.service import ( |
| create_or_update_journal, |
| get_all_journals, |
| get_journal, |
| update_journal, |
| delete_journal, |
| ) |
|
|
| router = APIRouter(prefix="/journal", tags=["Journal"]) |
|
|
|
|
| @router.post("/", response_model=BaseResponse[JournalResponse], status_code=200) |
| async def create_or_update( |
| data: JournalCreate, |
| user_id: uuid.UUID = Depends(get_current_user), |
| session: AsyncSession = Depends(get_async_session), |
| ): |
| data.user_id = user_id |
|
|
| try: |
| record = await create_or_update_journal(data, session) |
| return BaseResponse(status_code=200, data=record) |
| except ValueError as e: |
| raise HTTPException(status_code=404, detail=str(e)) |
|
|
|
|
| @router.get("/", response_model=BaseResponse[list[JournalResponse]], status_code=200) |
| async def list_user_journals( |
| user_id: uuid.UUID = Depends(get_current_user), |
| session: AsyncSession = Depends(get_async_session), |
| ): |
| records = await get_all_journals(user_id, session) |
| return BaseResponse(status_code=200, data=records) |
|
|
|
|
| @router.get("/entry/{journal_id}", response_model=BaseResponse[JournalResponse], status_code=200) |
| async def fetch_single( |
| journal_id: uuid.UUID, |
| user_id: uuid.UUID = Depends(get_current_user), |
| session: AsyncSession = Depends(get_async_session), |
| ): |
| try: |
| record = await get_journal(journal_id, user_id, session) |
| return BaseResponse(status_code=200, data=record) |
| except ValueError as e: |
| if str(e) == "Not authorized": |
| raise HTTPException(status_code=403, detail=str(e)) |
| raise HTTPException(status_code=404, detail=str(e)) |
|
|
|
|
| @router.put("/entry/{journal_id}", response_model=BaseResponse[JournalResponse], status_code=200) |
| async def update_entry( |
| journal_id: uuid.UUID, |
| data: JournalUpdate, |
| user_id: uuid.UUID = Depends(get_current_user), |
| session: AsyncSession = Depends(get_async_session), |
| ): |
| try: |
| record = await update_journal(journal_id, data, user_id, session) |
| return BaseResponse(status_code=200, data=record) |
| except ValueError as e: |
| if str(e) == "Not authorized": |
| raise HTTPException(status_code=403, detail=str(e)) |
| raise HTTPException(status_code=404, detail=str(e)) |
|
|
|
|
| @router.delete("/entry/{journal_id}", response_model=BaseResponse[str], status_code=200) |
| async def delete_entry( |
| journal_id: uuid.UUID, |
| user_id: uuid.UUID = Depends(get_current_user), |
| session: AsyncSession = Depends(get_async_session), |
| ): |
| try: |
| await delete_journal(journal_id, user_id, session) |
| return BaseResponse(status_code=200, data="Deleted") |
| except ValueError as e: |
| if str(e) == "Not authorized": |
| raise HTTPException(status_code=403, detail=str(e)) |
| raise HTTPException(status_code=404, detail=str(e)) |
|
|