Skip to content

Commit 5150e3e

Browse files
Merge pull request #10 from Cinnamoon-dev/feat/view-fk-id
feat: joins adicionados para não mostrar as chaves estrangeiras
2 parents dbcd74f + 48ed044 commit 5150e3e

3 files changed

Lines changed: 50 additions & 4 deletions

File tree

src/controllers/authController.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from datetime import timedelta
2-
from fastapi import APIRouter, HTTPException, Header
2+
from fastapi import APIRouter, HTTPException, Header, Request
33

44
from src.infra.database.database import PgDatabase
55
from src.services.userService import UserService
@@ -81,5 +81,8 @@ def refresh(refresh_token: str = Header(..., alias="X-Refresh-Token")):
8181

8282

8383
@router.get("/me")
84-
def me(user: user_dependency):
84+
def me(request: Request, user: user_dependency, show_fk_id: int | None = 1):
85+
if show_fk_id == 0:
86+
return UserService(PgDatabase()).view_controller(user["id"], request.query_params)
87+
8588
return user

src/controllers/userController.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,13 @@ def user_all(
2323

2424

2525
@router.get("/{user_id:int}")
26-
def user_view(user_id: int, perms=Depends(PermissionChecker("usuario-view"))):
27-
user = UserService(PgDatabase()).view(user_id)
26+
def user_view(
27+
request: Request,
28+
user_id: int,
29+
show_fk_id: int | None = 1,
30+
perms=Depends(PermissionChecker("usuario-view"))
31+
):
32+
user = UserService(PgDatabase()).view_controller(user_id, request.query_params)
2833

2934
if user is None:
3035
return JSONResponse(

src/services/userService.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,44 @@ def view(self, user_id: int) -> dict[str, Any] | None:
8787

8888
return user
8989

90+
def view_controller(self, user_id: int, query_params: QueryParams) -> dict[str, Any] | None:
91+
show_fk_id = bool(int(query_params.get("show_fk_id", 1)))
92+
user = None
93+
94+
if show_fk_id:
95+
query = f"SELECT {self.all_columns} FROM {self.table} WHERE id = %s"
96+
else:
97+
query = f"""
98+
SELECT u.id, u.email, u.senha, tu.nome as tipo_usuario
99+
FROM {self.table} AS u
100+
INNER JOIN tipo_usuario AS tu
101+
ON u.tipo_usuario_id = tu.id
102+
WHERE u.id = %s
103+
LIMIT 1
104+
"""
105+
106+
try:
107+
with self.database as db:
108+
db.cursor.execute(
109+
query,
110+
(user_id,),
111+
)
112+
row = db.cursor.fetchone()
113+
except Exception:
114+
raise HTTPException(
115+
status_code=500, detail={"error": True, "message": "Database error"}
116+
)
117+
118+
if row is None:
119+
return user
120+
121+
if show_fk_id:
122+
user = line_to_dict(row, self.columns)
123+
else:
124+
user = line_to_dict(row, ["id", "email", "senha", "tipo_usuario"])
125+
126+
return user
127+
90128
def view_by_email(self, email: str) -> dict[str, Any] | None:
91129
user = None
92130

0 commit comments

Comments
 (0)