mucuas.py 4.5 KB
Newer Older
1
2
3
#!/usr/bin/env python3

"""Grupo de rotas para autenticação."""
4
from typing import Annotated, Dict, List, Optional
5

6
from fastapi import APIRouter, Body, Depends, File, Form, Header, UploadFile
7
from fastapi.exceptions import HTTPException
8
from loguru import logger
9

10
from baobaxia.api.v2.endpoints.auth import (
11
12
13
14
    PermissionChecker,
    get_current_mocambola,
)
from baobaxia.constants import ROLE_MUCUA_PAJE
15
from baobaxia.permissions.model_permissions import *
16
from baobaxia.root import Baobaxia, bbx
17
from baobaxia.saberes import Mocambola, Mucua
18

19
20
CurrentMocambola = Annotated[Mocambola, Depends(get_current_mocambola)]
router = APIRouter(tags=["Mucuas"])
21

22

23
@router.get("/mucua/default")
24
25
26
async def get_default_mucua(
    bbx: Annotated[Baobaxia, Depends(bbx)],
) -> Mucua:
27
28
    """Retorn a mucua padrão."""
    return bbx.get_default_mucua()
29

30

31
@router.get("/{balaio_slug_smid}/mucua")
32
33
34
async def list_mucuas(
    bbx: Annotated[Baobaxia, Depends(bbx)], balaio_slug_smid: str
) -> List[Mucua]:
35
    """Listar mucuas."""
36
    balaio_smid = bbx.extract_smid(balaio_slug_smid=balaio_slug_smid)
37
    return bbx.list_mucuas(balaio_smid)
38

39

40
@router.get("/mucua")
41
42
43
async def list_all_mucuas(
    bbx: Annotated[Baobaxia, Depends(bbx)],
) -> List[Mucua]:
44
    """Listar todas as mucuas de todos os balaios."""
45
    return bbx.list_mucuas()
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
@router.post("/{balaio_slug_smid}/mucua")
async def post_mucua(
    bbx: Annotated[Baobaxia, Depends(bbx)],
    balaio_slug_smid: str,
    mocambola: CurrentMocambola,
    name: str = Body(...),
    description: str = Body(default=None),
    creator: str = Body(default=None),
    is_public: bool = Body(default=True),
) -> Mucua:
    """Criar nova mucua."""
    balaio_smid = bbx.extract_smid(balaio_slug_smid=balaio_slug_smid)

    mucua = Mucua(
        name=name,
        balaio_smid=balaio_smid,
        description=description,
        creator=creator,
        is_public=is_public,
    )
    logger.info("Criando nova Mucua!")

    return bbx.post_mucua(
        balaio_smid=balaio_smid,
        mucua=mucua,
        mocambola=mocambola,
        is_public=mucua.is_public,
    )
76

77

78
@router.get("/{balaio_slug_smid}/mucua/{mucua_slug_smid}")
79
80
81
async def get_mucua(
    bbx: Annotated[Baobaxia, Depends(bbx)],
    balaio_slug_smid: str,
82
    mucua_slug_smid: str,
83
) -> Mucua:
84
    """Retornar uma mucua."""
85
86
87
    balaio_smid, mucua_smid = bbx.extract_smid(
        balaio_slug_smid=balaio_slug_smid, mucua_slug_smid=mucua_slug_smid
    )
88
    return bbx.get_mucua(balaio_smid, mucua_smid)
89

90

91
@router.put("/{balaio_slug_smid}/mucua/{mucua_slug_smid}")
92
93
94
95
96
97
async def put_mucua(
    balaio_slug_smid: str,
    mucua_slug_smid: str,
    mocambola: CurrentMocambola,
    mucua: Mucua,
) -> Mucua:
98
    """Atualizar uma mucua."""
99
100
101
    balaio_smid, mucua_smid = bbx.extract_smid(
        balaio_slug_smid=balaio_slug_smid, mucua_slug_smid=mucua_slug_smid
    )
102
    return bbx.put_mucua(balaio_smid, mucua_smid, mocambola, mucua)
103

104

105
@router.put("/{balaio_slug_smid}/mucua/{mucua_slug_smid}/upload_image")
106
async def upload_mucua_image(
107
    bbx: Annotated[Baobaxia, Depends(bbx)],
108
109
110
111
    balaio_slug_smid: str,
    mucua_slug_smid: str,
    mocambola: CurrentMocambola,
    arquivo: UploadFile = File(...),
112
) -> Dict:
113
    """Enviar a imagem da mucua."""
114
115
116
    balaio_smid, mucua_smid = bbx.extract_smid(
        balaio_slug_smid=balaio_slug_smid, mucua_slug_smid=mucua_slug_smid
    )
117
    mocambola = bbx.get_session(token).mocambola
118
    if ROLE_MUCUA_PAJE not in mocambola.live_roles[balaio_smid]:
119
120
121
        raise HTTPException(
            status_code=401, detail="Mocambola não é um paje da mucua"
        )
122
    mucua = bbx.get_mucua_by_smid(
123
124
125
126
127
128
129
        balaio_smid=balaio_smid, mucua_smid=mucua_smid
    )
    if len(mucua.content) == 0:
        mucua.content.append(arquivo.filename)
    else:
        mucua.content[0] = arquivo.filename
    with (
130
        bbx.get_balaio_mucua_path(balaio_smid, mucua_smid) / mucua.content[0]
131
132
133
134
    ).open("wb") as arquivo_mucua:
        arquivo_mucua.write(arquivo.file.read())
        arquivo_mucua.close()

135
    bbx.put_mucua(balaio_smid, mucua_smid, mocambola, mucua)
136
137
    return {"detail": "success"}

138

139
@router.delete("/{balaio_slug_smid}/mucua/{mucua_slug_smid}")
140
async def del_mucua(
141
142
143
144
    bbx: Annotated[Baobaxia, Depends(bbx)],
    balaio_slug_smid: str,
    mucua_slug_smid: str,
    mocambola: CurrentMocambola,
145
) -> Dict:
146
    """Deletar mucua."""
147
148
149
    balaio_smid, mucua_smid = bbx.extract_smid(
        balaio_slug_smid=balaio_slug_smid, mucua_slug_smid=mucua_slug_smid
    )
150
    bbx.del_mucua(balaio_smid, mucua_smid, mocambola)
151
    return {"detail": "success"}