File size: 3,168 Bytes
911e744
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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))