Adding sorting to Accounts
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
from uuid import UUID
|
||||
|
||||
from fastapi import APIRouter, HTTPException, Depends
|
||||
from fastapi_filter import FilterDepends
|
||||
from fastapi_pagination import Page
|
||||
from fastapi_pagination.ext.sqlmodel import paginate
|
||||
|
||||
from account.models import Account, AccountCreate, AccountRead, AccountUpdate
|
||||
from account.models import Account, AccountCreate, AccountRead, AccountUpdate, AccountFilters
|
||||
from db import SessionDep
|
||||
from user.manager import get_current_user
|
||||
|
||||
@@ -16,16 +17,22 @@ def create_account(account: AccountCreate, session: SessionDep, current_user=Dep
|
||||
return result
|
||||
|
||||
@router.get("")
|
||||
def read_accounts(session: SessionDep, current_user=Depends(get_current_user)) -> Page[AccountRead]:
|
||||
return paginate(session, Account.list_accounts())
|
||||
def read_accounts(session: SessionDep,
|
||||
filters: AccountFilters = FilterDepends(AccountFilters),
|
||||
current_user=Depends(get_current_user)) -> Page[AccountRead]:
|
||||
return paginate(session, Account.list_accounts(filters))
|
||||
|
||||
@router.get("")
|
||||
def read_assets(session: SessionDep, current_user=Depends(get_current_user)) -> Page[AccountRead]:
|
||||
return paginate(session, Account.list_assets())
|
||||
@router.get("/assets")
|
||||
def read_assets(session: SessionDep,
|
||||
filters: AccountFilters = FilterDepends(AccountFilters),
|
||||
current_user=Depends(get_current_user)) -> Page[AccountRead]:
|
||||
return paginate(session, Account.list_assets(filters))
|
||||
|
||||
@router.get("")
|
||||
def read_liabilities(session: SessionDep, current_user=Depends(get_current_user)) -> Page[AccountRead]:
|
||||
return paginate(session, Account.list_liabilities())
|
||||
@router.get("/liabilities")
|
||||
def read_liabilities(session: SessionDep,
|
||||
filters: AccountFilters = FilterDepends(AccountFilters),
|
||||
current_user=Depends(get_current_user)) -> Page[AccountRead]:
|
||||
return paginate(session, Account.list_liabilities(filters))
|
||||
|
||||
@router.get("/{account_id}")
|
||||
def read_account(account_id: UUID, session: SessionDep, current_user=Depends(get_current_user)) -> AccountRead:
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
from uuid import UUID
|
||||
|
||||
from fastapi import APIRouter, HTTPException, Depends
|
||||
from fastapi_filter import FilterDepends
|
||||
from fastapi_pagination import Page
|
||||
from fastapi_pagination.ext.sqlmodel import paginate
|
||||
|
||||
from account.models import Account, AccountRead, CategoryCreate, CategoryUpdate
|
||||
from account.models import Account, AccountRead, CategoryCreate, CategoryUpdate, AccountFilters
|
||||
from db import SessionDep
|
||||
from user.manager import get_current_user
|
||||
|
||||
@@ -16,16 +17,22 @@ def create_category(category: CategoryCreate, session: SessionDep, current_user=
|
||||
return result
|
||||
|
||||
@router.get("")
|
||||
def read_categories(session: SessionDep, current_user=Depends(get_current_user)) -> Page[AccountRead]:
|
||||
return paginate(session, Account.list_categories())
|
||||
def read_categories(session: SessionDep,
|
||||
filters: AccountFilters = FilterDepends(AccountFilters),
|
||||
current_user=Depends(get_current_user)) -> Page[AccountRead]:
|
||||
return paginate(session, Account.list_categories(filters))
|
||||
|
||||
@router.get("expenses")
|
||||
def read_expenses(session: SessionDep, current_user=Depends(get_current_user)) -> Page[AccountRead]:
|
||||
return paginate(session, Account.list_expenses())
|
||||
def read_expenses(session: SessionDep,
|
||||
filters: AccountFilters = FilterDepends(AccountFilters),
|
||||
current_user=Depends(get_current_user)) -> Page[AccountRead]:
|
||||
return paginate(session, Account.list_expenses(filters))
|
||||
|
||||
@router.get("incomes")
|
||||
def read_incomes(session: SessionDep, current_user=Depends(get_current_user)) -> Page[AccountRead]:
|
||||
return paginate(session, Account.list_incomes())
|
||||
def read_incomes(session: SessionDep,
|
||||
filters: AccountFilters = FilterDepends(AccountFilters),
|
||||
current_user=Depends(get_current_user)) -> Page[AccountRead]:
|
||||
return paginate(session, Account.list_incomes(filters))
|
||||
|
||||
@router.get("/{category_id}")
|
||||
def read_category(category_id: UUID, session: SessionDep, current_user=Depends(get_current_user)) -> AccountRead:
|
||||
|
||||
@@ -105,36 +105,36 @@ class Account(AccountBaseId, table=True):
|
||||
return account_db
|
||||
|
||||
@classmethod
|
||||
def list(cls):
|
||||
return select(Account)
|
||||
def list(cls, filters):
|
||||
return filters.sort(filters.filter(select(Account)))
|
||||
|
||||
@classmethod
|
||||
def list_accounts(cls):
|
||||
return cls.list().where(
|
||||
def list_accounts(cls, filters):
|
||||
return cls.list(filters).where(
|
||||
Account.type.not_in([v.value for v in CategoryType])
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def list_assets(cls):
|
||||
return cls.list().where(Account.family == "Asset")
|
||||
def list_assets(cls, filters):
|
||||
return cls.list(filters).where(Account.family == "Asset")
|
||||
|
||||
@classmethod
|
||||
def list_liabilities(cls):
|
||||
return cls.list().where(Account.family == "Liability")
|
||||
def list_liabilities(cls, filters):
|
||||
return cls.list(filters).where(Account.family == "Liability")
|
||||
|
||||
@classmethod
|
||||
def list_categories(cls):
|
||||
return cls.list().where(
|
||||
def list_categories(cls, filters):
|
||||
return cls.list(filters).where(
|
||||
Account.type.in_([v.value for v in CategoryType])
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def list_expenses(cls):
|
||||
return cls.list().where(Account.family == "Expense")
|
||||
def list_expenses(cls, filters):
|
||||
return cls.list(filters).where(Account.family == "Expense")
|
||||
|
||||
@classmethod
|
||||
def list_incomes(cls):
|
||||
return cls.list().where(Account.family == "Income")
|
||||
def list_incomes(cls, filters):
|
||||
return cls.list(filters).where(Account.family == "Income")
|
||||
|
||||
@classmethod
|
||||
def get(cls, session, account_id):
|
||||
@@ -227,8 +227,9 @@ class CategoryCreate(CategoryWrite):
|
||||
class CategoryUpdate(CategoryWrite):
|
||||
pass
|
||||
|
||||
class AccountFilter(Filter):
|
||||
class AccountFilters(Filter):
|
||||
name__like: Optional[str] = None
|
||||
order_by: Optional[list[str]] = None
|
||||
|
||||
class Constants(Filter.Constants):
|
||||
model = Account
|
||||
|
||||
@@ -17,7 +17,7 @@ def create_payee(payee: PayeeCreate, session: SessionDep, current_user=Depends(g
|
||||
return Payee.get(session, result.id)
|
||||
|
||||
@router.get("")
|
||||
def read_categories(session: SessionDep,
|
||||
def read_payees(session: SessionDep,
|
||||
filters: PayeeFilters = FilterDepends(PayeeFilters),
|
||||
current_user=Depends(get_current_user)) -> Page[PayeeRead]:
|
||||
return paginate(session, Payee.list(filters))
|
||||
|
||||
Reference in New Issue
Block a user