form-4-handlers: добавил ручку со списком expense item и фильтрацией по полю r_start

This commit is contained in:
tsygankoviva 2026-07-20 14:37:04 +03:00
parent 79bf3231b9
commit dd5eec5887
3 changed files with 38 additions and 2 deletions

View File

@ -4,9 +4,10 @@ from sqlalchemy.ext.asyncio import AsyncSession
from src.services.expense_item_service import ExpenseItemService
from src.db.models.app_user import AppUser
from src.api.v1.deps import require_admin
from src.api.v1.deps import require_admin, require_executor
from src.db.session import get_db
from src.domain.schemas import (
BaseListResponse,
BaseSingleResponse,
ExpenseItemResponseSchema,
)
@ -33,3 +34,20 @@ async def get_expense_item_by_id(
message="Запись Expense Item",
result=ExpenseItemResponseSchema.model_validate(result),
)
@router.get("/", response_model=BaseListResponse[ExpenseItemResponseSchema])
async def get_expense_item_by_id(
db: AsyncSession = Depends(get_db),
current_user: AppUser = Depends(require_executor),
r_start: bool | None = None,
):
"""Получение записей expense item"""
service = ExpenseItemService(db)
result = await service.get_list(r_start=r_start)
return BaseListResponse(
success=True,
message="Запись Expense Item",
result=[ExpenseItemResponseSchema.model_validate(el) for el in result],
)

View File

@ -11,3 +11,11 @@ class ExpenseItemRepository:
async def get(self, item_id: int) -> ExpenseItem | None:
query = select(ExpenseItem).where(ExpenseItem.id == item_id).limit(1)
return (await self.db.execute(query)).scalar_one_or_none()
async def get_list(self, r_start: bool | None = None) -> list[ExpenseItem]:
where = []
if r_start is not None:
where.append(ExpenseItem.item_id.startswith("R"))
query = select(ExpenseItem).where(*where)
return (await self.db.execute(query)).scalars().all()

View File

@ -10,7 +10,17 @@ class ExpenseItemService:
def __init__(self, db: AsyncSession):
self.repo = ExpenseItemRepository(db)
async def get(self, item_id: int, user: AppUser | None = None) -> ExpenseItem | None:
async def get(
self,
item_id: int,
user: AppUser | None = None,
) -> ExpenseItem | None:
if not user or user.role_id == UserRoleEnum.ADMIN:
return await self.repo.get(item_id=item_id)
return None
async def get_list(
self,
r_start: bool | None = None,
) -> list[ExpenseItem]:
return await self.repo.get_list(r_start=r_start)