Adding sorting to Accounts
This commit is contained in:
@@ -1,10 +1,11 @@
|
|||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
|
||||||
from fastapi import APIRouter, HTTPException, Depends
|
from fastapi import APIRouter, HTTPException, Depends
|
||||||
|
from fastapi_filter import FilterDepends
|
||||||
from fastapi_pagination import Page
|
from fastapi_pagination import Page
|
||||||
from fastapi_pagination.ext.sqlmodel import paginate
|
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 db import SessionDep
|
||||||
from user.manager import get_current_user
|
from user.manager import get_current_user
|
||||||
|
|
||||||
@@ -16,16 +17,22 @@ def create_account(account: AccountCreate, session: SessionDep, current_user=Dep
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
@router.get("")
|
@router.get("")
|
||||||
def read_accounts(session: SessionDep, current_user=Depends(get_current_user)) -> Page[AccountRead]:
|
def read_accounts(session: SessionDep,
|
||||||
return paginate(session, Account.list_accounts())
|
filters: AccountFilters = FilterDepends(AccountFilters),
|
||||||
|
current_user=Depends(get_current_user)) -> Page[AccountRead]:
|
||||||
|
return paginate(session, Account.list_accounts(filters))
|
||||||
|
|
||||||
@router.get("")
|
@router.get("/assets")
|
||||||
def read_assets(session: SessionDep, current_user=Depends(get_current_user)) -> Page[AccountRead]:
|
def read_assets(session: SessionDep,
|
||||||
return paginate(session, Account.list_assets())
|
filters: AccountFilters = FilterDepends(AccountFilters),
|
||||||
|
current_user=Depends(get_current_user)) -> Page[AccountRead]:
|
||||||
|
return paginate(session, Account.list_assets(filters))
|
||||||
|
|
||||||
@router.get("")
|
@router.get("/liabilities")
|
||||||
def read_liabilities(session: SessionDep, current_user=Depends(get_current_user)) -> Page[AccountRead]:
|
def read_liabilities(session: SessionDep,
|
||||||
return paginate(session, Account.list_liabilities())
|
filters: AccountFilters = FilterDepends(AccountFilters),
|
||||||
|
current_user=Depends(get_current_user)) -> Page[AccountRead]:
|
||||||
|
return paginate(session, Account.list_liabilities(filters))
|
||||||
|
|
||||||
@router.get("/{account_id}")
|
@router.get("/{account_id}")
|
||||||
def read_account(account_id: UUID, session: SessionDep, current_user=Depends(get_current_user)) -> AccountRead:
|
def read_account(account_id: UUID, session: SessionDep, current_user=Depends(get_current_user)) -> AccountRead:
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
|
||||||
from fastapi import APIRouter, HTTPException, Depends
|
from fastapi import APIRouter, HTTPException, Depends
|
||||||
|
from fastapi_filter import FilterDepends
|
||||||
from fastapi_pagination import Page
|
from fastapi_pagination import Page
|
||||||
from fastapi_pagination.ext.sqlmodel import paginate
|
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 db import SessionDep
|
||||||
from user.manager import get_current_user
|
from user.manager import get_current_user
|
||||||
|
|
||||||
@@ -16,16 +17,22 @@ def create_category(category: CategoryCreate, session: SessionDep, current_user=
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
@router.get("")
|
@router.get("")
|
||||||
def read_categories(session: SessionDep, current_user=Depends(get_current_user)) -> Page[AccountRead]:
|
def read_categories(session: SessionDep,
|
||||||
return paginate(session, Account.list_categories())
|
filters: AccountFilters = FilterDepends(AccountFilters),
|
||||||
|
current_user=Depends(get_current_user)) -> Page[AccountRead]:
|
||||||
|
return paginate(session, Account.list_categories(filters))
|
||||||
|
|
||||||
@router.get("expenses")
|
@router.get("expenses")
|
||||||
def read_expenses(session: SessionDep, current_user=Depends(get_current_user)) -> Page[AccountRead]:
|
def read_expenses(session: SessionDep,
|
||||||
return paginate(session, Account.list_expenses())
|
filters: AccountFilters = FilterDepends(AccountFilters),
|
||||||
|
current_user=Depends(get_current_user)) -> Page[AccountRead]:
|
||||||
|
return paginate(session, Account.list_expenses(filters))
|
||||||
|
|
||||||
@router.get("incomes")
|
@router.get("incomes")
|
||||||
def read_incomes(session: SessionDep, current_user=Depends(get_current_user)) -> Page[AccountRead]:
|
def read_incomes(session: SessionDep,
|
||||||
return paginate(session, Account.list_incomes())
|
filters: AccountFilters = FilterDepends(AccountFilters),
|
||||||
|
current_user=Depends(get_current_user)) -> Page[AccountRead]:
|
||||||
|
return paginate(session, Account.list_incomes(filters))
|
||||||
|
|
||||||
@router.get("/{category_id}")
|
@router.get("/{category_id}")
|
||||||
def read_category(category_id: UUID, session: SessionDep, current_user=Depends(get_current_user)) -> AccountRead:
|
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
|
return account_db
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def list(cls):
|
def list(cls, filters):
|
||||||
return select(Account)
|
return filters.sort(filters.filter(select(Account)))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def list_accounts(cls):
|
def list_accounts(cls, filters):
|
||||||
return cls.list().where(
|
return cls.list(filters).where(
|
||||||
Account.type.not_in([v.value for v in CategoryType])
|
Account.type.not_in([v.value for v in CategoryType])
|
||||||
)
|
)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def list_assets(cls):
|
def list_assets(cls, filters):
|
||||||
return cls.list().where(Account.family == "Asset")
|
return cls.list(filters).where(Account.family == "Asset")
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def list_liabilities(cls):
|
def list_liabilities(cls, filters):
|
||||||
return cls.list().where(Account.family == "Liability")
|
return cls.list(filters).where(Account.family == "Liability")
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def list_categories(cls):
|
def list_categories(cls, filters):
|
||||||
return cls.list().where(
|
return cls.list(filters).where(
|
||||||
Account.type.in_([v.value for v in CategoryType])
|
Account.type.in_([v.value for v in CategoryType])
|
||||||
)
|
)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def list_expenses(cls):
|
def list_expenses(cls, filters):
|
||||||
return cls.list().where(Account.family == "Expense")
|
return cls.list(filters).where(Account.family == "Expense")
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def list_incomes(cls):
|
def list_incomes(cls, filters):
|
||||||
return cls.list().where(Account.family == "Income")
|
return cls.list(filters).where(Account.family == "Income")
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get(cls, session, account_id):
|
def get(cls, session, account_id):
|
||||||
@@ -227,8 +227,9 @@ class CategoryCreate(CategoryWrite):
|
|||||||
class CategoryUpdate(CategoryWrite):
|
class CategoryUpdate(CategoryWrite):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class AccountFilter(Filter):
|
class AccountFilters(Filter):
|
||||||
name__like: Optional[str] = None
|
name__like: Optional[str] = None
|
||||||
|
order_by: Optional[list[str]] = None
|
||||||
|
|
||||||
class Constants(Filter.Constants):
|
class Constants(Filter.Constants):
|
||||||
model = Account
|
model = Account
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ def create_payee(payee: PayeeCreate, session: SessionDep, current_user=Depends(g
|
|||||||
return Payee.get(session, result.id)
|
return Payee.get(session, result.id)
|
||||||
|
|
||||||
@router.get("")
|
@router.get("")
|
||||||
def read_categories(session: SessionDep,
|
def read_payees(session: SessionDep,
|
||||||
filters: PayeeFilters = FilterDepends(PayeeFilters),
|
filters: PayeeFilters = FilterDepends(PayeeFilters),
|
||||||
current_user=Depends(get_current_user)) -> Page[PayeeRead]:
|
current_user=Depends(get_current_user)) -> Page[PayeeRead]:
|
||||||
return paginate(session, Payee.list(filters))
|
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 React from "react";
|
||||||
|
|
||||||
|
import { ButtonGroup } from "@mui/material";
|
||||||
import { DataGrid, type GridColDef } from "@mui/x-data-grid";
|
import { DataGrid, type GridColDef } from "@mui/x-data-grid";
|
||||||
|
|
||||||
|
import { DeleteButton, EditButton, List, useDataGrid} from "@refinedev/mui";
|
||||||
|
|
||||||
import type { IAccount } from "../../interfaces";
|
import type { IAccount } from "../../interfaces";
|
||||||
import {AccountCreate} from "./create";
|
|
||||||
import {ButtonGroup} from "@mui/material";
|
|
||||||
|
|
||||||
export const AccountList: React.FC = () => {
|
export const AccountList: React.FC = () => {
|
||||||
const { dataGridProps } = useDataGrid<IAccount>();
|
const { dataGridProps } = useDataGrid<IAccount>();
|
||||||
|
|||||||
@@ -48,8 +48,7 @@ export const dataProvider: DataProvider = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sorters && sorters.length > 0) {
|
if (sorters && sorters.length > 0) {
|
||||||
params.append("sort", sorters.map((sorter) => sorter.field).join(","));
|
params.append("order_by", sorters.map((sorter) => (sorter.order == "asc" ? "+" : "-") + sorter.field).join(","));
|
||||||
params.append("order", sorters.map((sorter) => sorter.order).join(","));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filters && filters.length > 0) {
|
if (filters && filters.length > 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user