Skip to content

Commit b758d9c

Browse files
committed
refactor(roles): consolidate uuid imports, add type hints and dependency singletons
1 parent a6efb87 commit b758d9c

File tree

1 file changed

+37
-36
lines changed

1 file changed

+37
-36
lines changed

app/routers/roles.py

Lines changed: 37 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
from __future__ import annotations
22

3-
from fastapi import APIRouter, Depends, HTTPException, Query, Security
3+
from fastapi import APIRouter, Depends, HTTPException, Query, Security, Response
4+
import uuid
45
from sqlalchemy.ext.asyncio import AsyncSession
56

67
from app.auth.dependencies import require_permissions
78
from app.database import get_db
9+
from app.models import Permission, Role, User
810
from app.schemas import (
911
PermissionResponse,
1012
RoleCreate,
@@ -24,26 +26,30 @@
2426

2527
router = APIRouter(prefix="/roles", tags=["🎭 Role Management"])
2628

29+
# Singletons de dependencias para evitar B008
30+
db_dep = Depends(get_db)
31+
perm_read = Security(require_permissions(), scopes=["roles:read"])
32+
perm_write = Security(require_permissions(), scopes=["roles:write"])
33+
perm_delete = Security(require_permissions(), scopes=["roles:delete"])
34+
2735

2836
@router.get("/", response_model=list[RoleResponse])
2937
async def get_roles(
3038
skip: int = Query(0, ge=0),
3139
limit: int = Query(100, ge=1, le=500),
32-
db: AsyncSession = Depends(get_db),
33-
current_user=Security(require_permissions(), scopes=["roles:read"]),
34-
):
40+
db: AsyncSession = db_dep,
41+
_current_user: User = perm_read,
42+
) -> list[Role]:
3543
return await list_roles(db, skip=skip, limit=limit)
3644

3745

3846
@router.get("/{role_id}", response_model=RoleWithUsers)
3947
async def get_role(
4048
role_id: str,
41-
db: AsyncSession = Depends(get_db),
42-
current_user=Security(require_permissions(), scopes=["roles:read"]),
43-
):
44-
import uuid as _uuid
45-
46-
role = await get_role_by_id(db, _uuid.UUID(role_id))
49+
db: AsyncSession = db_dep,
50+
_current_user: User = perm_read,
51+
) -> Role:
52+
role = await get_role_by_id(db, uuid.UUID(role_id))
4753
if not role:
4854
raise HTTPException(status_code=404, detail="Rol no encontrado")
4955
return role
@@ -52,52 +58,47 @@ async def get_role(
5258
@router.post("/", response_model=RoleResponse, status_code=201)
5359
async def create_role_endpoint(
5460
payload: RoleCreate,
55-
db: AsyncSession = Depends(get_db),
56-
current_user=Security(require_permissions(), scopes=["roles:write"]),
57-
):
61+
db: AsyncSession = db_dep,
62+
_current_user: User = perm_write,
63+
) -> Role:
5864
return await create_role(db, payload)
5965

6066

6167
@router.put("/{role_id}", response_model=RoleResponse)
6268
async def update_role_endpoint(
6369
role_id: str,
6470
payload: RoleUpdate,
65-
db: AsyncSession = Depends(get_db),
66-
current_user=Security(require_permissions(), scopes=["roles:write"]),
67-
):
68-
import uuid as _uuid
69-
70-
return await update_role(db, _uuid.UUID(role_id), payload)
71+
db: AsyncSession = db_dep,
72+
_current_user: User = perm_write,
73+
) -> Role:
74+
return await update_role(db, uuid.UUID(role_id), payload)
7175

7276

73-
@router.delete("/{role_id}", status_code=204)
77+
@router.delete("/{role_id}", status_code=204, response_class=Response, response_model=None)
7478
async def delete_role_endpoint(
7579
role_id: str,
76-
db: AsyncSession = Depends(get_db),
77-
current_user=Security(require_permissions(), scopes=["roles:delete"]),
78-
):
79-
import uuid as _uuid
80-
81-
ok = await delete_role(db, _uuid.UUID(role_id))
80+
db: AsyncSession = db_dep,
81+
_current_user: User = perm_delete,
82+
) -> None:
83+
ok = await delete_role(db, uuid.UUID(role_id))
8284
if not ok:
8385
raise HTTPException(status_code=404, detail="Rol no encontrado")
86+
return Response(status_code=204)
8487

8588

8689
@router.post("/{role_id}/permissions", response_model=RoleResponse)
8790
async def assign_permissions_endpoint(
8891
role_id: str,
8992
permission_names: list[str],
90-
db: AsyncSession = Depends(get_db),
91-
current_user=Security(require_permissions(), scopes=["roles:write"]),
92-
):
93-
import uuid as _uuid
94-
95-
return await assign_permissions(db, _uuid.UUID(role_id), permission_names)
93+
db: AsyncSession = db_dep,
94+
_current_user: User = perm_write,
95+
) -> Role:
96+
return await assign_permissions(db, uuid.UUID(role_id), permission_names)
9697

9798

98-
@router.get("/../permissions/", response_model=list[PermissionResponse])
99+
@router.get("/permissions/", response_model=list[PermissionResponse])
99100
async def get_permissions(
100-
db: AsyncSession = Depends(get_db),
101-
current_user=Security(require_permissions(), scopes=["roles:read"]),
102-
):
101+
db: AsyncSession = db_dep,
102+
_current_user: User = perm_read,
103+
) -> list[Permission]:
103104
return await list_permissions(db)

0 commit comments

Comments
 (0)