Merge pull request 'form-fix: ручка для получения формы по id' (#15) from form-fix into test

Reviewed-on: #15
Reviewed-by: Raykov-MS <RaykovMS@avt.rshb.ru>
This commit is contained in:
tsygankoviva 2026-05-21 11:57:09 +03:00
commit 2191e7d998
4 changed files with 33 additions and 0 deletions

View File

@ -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,

View File

@ -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(

View File

@ -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,
)

View File

@ -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)