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))
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
import { useMany } from "@refinedev/core";
|
||||
import {DeleteButton, EditButton, List, useDataGrid} from "@refinedev/mui";
|
||||
import React from "react";
|
||||
|
||||
import { ButtonGroup } from "@mui/material";
|
||||
import { DataGrid, type GridColDef } from "@mui/x-data-grid";
|
||||
|
||||
import { DeleteButton, EditButton, List, useDataGrid} from "@refinedev/mui";
|
||||
|
||||
import type { IAccount } from "../../interfaces";
|
||||
import {AccountCreate} from "./create";
|
||||
import {ButtonGroup} from "@mui/material";
|
||||
|
||||
export const AccountList: React.FC = () => {
|
||||
const { dataGridProps } = useDataGrid<IAccount>();
|
||||
|
||||
@@ -48,8 +48,7 @@ export const dataProvider: DataProvider = {
|
||||
}
|
||||
|
||||
if (sorters && sorters.length > 0) {
|
||||
params.append("sort", sorters.map((sorter) => sorter.field).join(","));
|
||||
params.append("order", sorters.map((sorter) => sorter.order).join(","));
|
||||
params.append("order_by", sorters.map((sorter) => (sorter.order == "asc" ? "+" : "-") + sorter.field).join(","));
|
||||
}
|
||||
|
||||
if (filters && filters.length > 0) {
|
||||
|
||||
Reference in New Issue
Block a user