form-fix: ручка для получения формы по id
This commit is contained in:
parent
d2559d6bb7
commit
73c61918f7
@ -79,6 +79,23 @@ async def get_forms(
|
||||
)
|
||||
|
||||
|
||||
@router.get("/{form_id}")
|
||||
async def get_form(
|
||||
form_id: int,
|
||||
db: AsyncSession = Depends(get_db),
|
||||
current_user: AppUser = Depends(get_current_active_user_with_set_db),
|
||||
) -> BaseSingleResponse[BudgetFormResponse]:
|
||||
bf_service = BudgetFormService(db)
|
||||
form = await bf_service.get(
|
||||
user=current_user,
|
||||
budget_form_id=form_id,
|
||||
load_org=True,
|
||||
)
|
||||
return BaseSingleResponse(
|
||||
result = BudgetFormResponse.model_validate(form),
|
||||
)
|
||||
|
||||
|
||||
@router.get("/{form_id}/sheets")
|
||||
async def get_form_sheets(
|
||||
form_id: int,
|
||||
|
||||
@ -60,6 +60,7 @@ class BudgetFormRepository:
|
||||
budget_form_id: int,
|
||||
org_unit: int | list[int] | None = None,
|
||||
load_form_type: bool = False,
|
||||
load_org: bool = False,
|
||||
) -> BudgetForm | None:
|
||||
query = select(BudgetForm)
|
||||
|
||||
@ -71,6 +72,10 @@ class BudgetFormRepository:
|
||||
where.append(BudgetForm.org_unit_id.in_(org_unit))
|
||||
|
||||
query = query.where(*where)
|
||||
if load_org:
|
||||
query = query.options(
|
||||
joinedload(BudgetForm.org_unit)
|
||||
)
|
||||
|
||||
if load_form_type:
|
||||
query = query.options(
|
||||
|
||||
@ -47,11 +47,13 @@ class BudgetFormService:
|
||||
budget_form_id: int,
|
||||
user: AppUser,
|
||||
load_form_type: bool = False,
|
||||
load_org: bool = False,
|
||||
) -> list[BudgetForm] | tuple[int, list[BudgetForm]]:
|
||||
if user.role_id == UserRoleEnum.ADMIN:
|
||||
return await self.bf_repo.get(
|
||||
budget_form_id=budget_form_id,
|
||||
load_form_type=load_form_type,
|
||||
load_org=load_org,
|
||||
)
|
||||
user = await self.user_repo.get(
|
||||
user_id=user.id,
|
||||
@ -61,4 +63,5 @@ class BudgetFormService:
|
||||
budget_form_id=budget_form_id,
|
||||
org_unit=[ou.id for ou in user.org_units],
|
||||
load_form_type=load_form_type,
|
||||
load_org=load_org,
|
||||
)
|
||||
|
||||
@ -10,6 +10,14 @@ def test_forms_list_smoke(client, admin_tokens, auth_headers):
|
||||
assert isinstance(payload["result"], list)
|
||||
|
||||
|
||||
def test_form_smoke(client, admin_tokens, auth_headers):
|
||||
response = client.get("/api/v1/form/1", headers=auth_headers(admin_tokens))
|
||||
assert response.status_code == 200
|
||||
payload = response.json()
|
||||
assert "result" in payload
|
||||
assert isinstance(payload["result"], dict)
|
||||
|
||||
|
||||
def test_forms_sheets_not_found_error_shape(client, admin_tokens, auth_headers):
|
||||
response = client.get(
|
||||
"/api/v1/form/999/sheets", headers=auth_headers(admin_tokens)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user