diff --git a/barker/barker/models/modifier_category.py b/barker/barker/models/modifier_category.py index e3dc943..db36986 100644 --- a/barker/barker/models/modifier_category.py +++ b/barker/barker/models/modifier_category.py @@ -28,7 +28,7 @@ class ModifierCategory: sort_order: Mapped[int] = mapped_column(Integer, nullable=False) products: Mapped[list[Product]] = relationship( - secondary=ModifierCategoryProduct.__table__, + secondary=ModifierCategoryProduct.__table__, # type: ignore[attr-defined] back_populates="modifier_categories", ) modifiers: Mapped[list[Modifier]] = relationship(back_populates="modifier_category") diff --git a/barker/barker/models/permission.py b/barker/barker/models/permission.py index bdff933..098931d 100644 --- a/barker/barker/models/permission.py +++ b/barker/barker/models/permission.py @@ -23,7 +23,7 @@ class Permission: name: Mapped[str] = mapped_column(Text, unique=True, nullable=False) roles: Mapped[list[Role]] = relationship( - secondary=RolePermission.__table__, + secondary=RolePermission.__table__, # type: ignore[attr-defined] back_populates="permissions", ) diff --git a/barker/barker/models/product.py b/barker/barker/models/product.py index 1fd8059..d00fed2 100644 --- a/barker/barker/models/product.py +++ b/barker/barker/models/product.py @@ -26,7 +26,7 @@ class Product: skus: Mapped[list[StockKeepingUnit]] = relationship("StockKeepingUnit", back_populates="product") modifier_categories: Mapped[list[ModifierCategory]] = relationship( "ModifierCategory", - secondary=ModifierCategoryProduct.__table__, + secondary=ModifierCategoryProduct.__table__, # type: ignore[attr-defined] order_by="ModifierCategory.sort_order", back_populates="products", ) diff --git a/barker/barker/models/role.py b/barker/barker/models/role.py index abc8f72..ffafb02 100644 --- a/barker/barker/models/role.py +++ b/barker/barker/models/role.py @@ -24,7 +24,7 @@ class Role: permissions: Mapped[list[Permission]] = relationship( "Permission", - secondary=RolePermission.__table__, + secondary=RolePermission.__table__, # type: ignore[attr-defined] back_populates="roles", ) diff --git a/barker/barker/models/user.py b/barker/barker/models/user.py index 5fd393c..1166082 100644 --- a/barker/barker/models/user.py +++ b/barker/barker/models/user.py @@ -28,7 +28,7 @@ class User: roles: Mapped[list[Role]] = relationship( "Role", - secondary=UserRole.__table__, + secondary=UserRole.__table__, # type: ignore[attr-defined] order_by="Role.name", ) login_history: Mapped[list[LoginHistory]] = relationship(order_by=desc(LoginHistory.date), back_populates="user") diff --git a/barker/barker/routers/__init__.py b/barker/barker/routers/__init__.py index eff9fde..5f64f11 100644 --- a/barker/barker/routers/__init__.py +++ b/barker/barker/routers/__init__.py @@ -1,7 +1,7 @@ from datetime import UTC, date, datetime, timedelta from typing import Any -from sqlalchemy import Label, and_, or_ +from sqlalchemy import ColumnElement, Label, and_, or_ from ..core.config import settings from ..models.bundle_item import BundleItem @@ -42,28 +42,28 @@ def dates_overlap(start1: date | None, end1: date | None, start2: date | None, e return start1 <= end2 and start2 <= end1 -def _pv_active(date_: date | Label[Any]): +def _pv_active(date_: date | Label[Any]) -> ColumnElement[bool]: return and_( or_(ProductVersion.valid_from == None, ProductVersion.valid_from <= date_), # noqa: E711 or_(ProductVersion.valid_till == None, ProductVersion.valid_till >= date_), # noqa: E711 ) -def _sv_active(date_: date | Label[Any]): +def _sv_active(date_: date | Label[Any]) -> ColumnElement[bool]: return and_( or_(SkuVersion.valid_from == None, SkuVersion.valid_from <= date_), # noqa: E711 or_(SkuVersion.valid_till == None, SkuVersion.valid_till >= date_), # noqa: E711 ) -def _bundle_active(date_: date): +def _bundle_active(date_: date) -> ColumnElement[bool]: return and_( or_(BundleItem.valid_from == None, BundleItem.valid_from <= date_), # noqa: E711 or_(BundleItem.valid_till == None, BundleItem.valid_till >= date_), # noqa: E711 ) -def _pv_onclause(date_: date | Label[Any]): +def _pv_onclause(date_: date | Label[Any]) -> ColumnElement[bool]: return and_( ProductVersion.product_id == Product.id, or_( @@ -77,7 +77,7 @@ def _pv_onclause(date_: date | Label[Any]): ) -def _sv_onclause(date_: date | Label[Any]): +def _sv_onclause(date_: date | Label[Any]) -> ColumnElement[bool]: return and_( SkuVersion.sku_id == StockKeepingUnit.id, or_(SkuVersion.valid_from == None, SkuVersion.valid_from <= date_), # noqa: E711 diff --git a/barker/barker/routers/device.py b/barker/barker/routers/device.py index 0b9fc12..3284428 100644 --- a/barker/barker/routers/device.py +++ b/barker/barker/routers/device.py @@ -9,6 +9,7 @@ from ..db.session import SessionFuture from ..models.device import Device from ..models.login_history import LoginHistory from ..schemas import device as schemas +from ..schemas.section import SectionLink from ..schemas.user_token import UserToken @@ -74,7 +75,7 @@ def device_info(item: Device) -> schemas.Device: id_=item.id, name=item.name, enabled=item.enabled, - section=schemas.SectionLink(id_=item.section_id, name=item.section.name), + section=SectionLink(id_=item.section_id, name=item.section.name), creation_date=item.creation_date, last_user=item.login_history[0].user.name if len(item.login_history) else "Never", last_date=item.login_history[0].date if len(item.login_history) else None, diff --git a/barker/barker/routers/header_footer.py b/barker/barker/routers/header_footer.py index fed4786..5bca8de 100644 --- a/barker/barker/routers/header_footer.py +++ b/barker/barker/routers/header_footer.py @@ -5,29 +5,29 @@ from sqlalchemy.exc import SQLAlchemyError from ..core.security import get_current_active_user as get_user from ..db.session import SessionFuture from ..models.db_setting import DbSetting -from ..schemas import header_footer as schemas +from ..schemas.header_footer import HeaderFooter from ..schemas.user_token import UserToken router = APIRouter() -@router.get("") +@router.get("", response_model=list[HeaderFooter]) def get( user: UserToken = Security(get_user, scopes=["owner"]), -): +) -> list[HeaderFooter]: with SessionFuture() as db: return [ - {"id": item.id, "name": item.name, "text": item.data["Text"]} + HeaderFooter(id_=item.id, name=item.name, text=item.data["Text"]) for item in db.execute(select(DbSetting).where(DbSetting.name.in_(["Header", "Footer"]))).scalars().all() ] -@router.post("") +@router.post("", response_model=list[HeaderFooter]) def save( - data: schemas.HeaderFooter, + data: HeaderFooter, user: UserToken = Security(get_user, scopes=["owner"]), -): +) -> list[HeaderFooter]: try: with SessionFuture() as db: item: DbSetting = db.execute( @@ -36,7 +36,7 @@ def save( item.data = {"Text": data.text} db.commit() return [ - {"id": item.id, "name": item.name, "text": item.data["Text"]} + HeaderFooter(id_=item.id, name=item.name, text=item.data["Text"]) for item in db.execute(select(DbSetting).where(DbSetting.name.in_(["Header", "Footer"]))) .scalars() .all() diff --git a/barker/barker/routers/health.py b/barker/barker/routers/health.py index 4031f19..7ea562a 100644 --- a/barker/barker/routers/health.py +++ b/barker/barker/routers/health.py @@ -2,16 +2,17 @@ from fastapi import APIRouter, HTTPException from sqlalchemy import text from ..db.session import SessionFuture +from ..schemas.health_response import HealthResponse router = APIRouter() -@router.get("") -def health_check(): +@router.get("", response_model=HealthResponse) +def health_check() -> HealthResponse: try: with SessionFuture() as db: # lightweight DB check db.execute(text("SELECT 1")) - return {"status": "ok", "database": "connected"} + return HealthResponse(status="ok", database="connected") except Exception as e: raise HTTPException(status_code=500, detail={"status": "error", "database": str(e)}) from e diff --git a/barker/barker/routers/modifier.py b/barker/barker/routers/modifier.py index 0c4b38f..af34d15 100644 --- a/barker/barker/routers/modifier.py +++ b/barker/barker/routers/modifier.py @@ -10,6 +10,7 @@ from ..core.security import get_current_active_user as get_user from ..db.session import SessionFuture from ..models.modifier import Modifier from ..schemas import modifier as schemas +from ..schemas.modifier_category import ModifierCategoryLink from ..schemas.user_token import UserToken @@ -111,7 +112,7 @@ def modifier_info(item: Modifier) -> schemas.Modifier: show_in_bill=item.show_in_bill, price=item.price, is_active=item.is_active, - modifier_category=schemas.ModifierCategoryLink( + modifier_category=ModifierCategoryLink( id_=item.modifier_category.id, name=item.modifier_category.name, ), diff --git a/barker/barker/routers/modifier_category.py b/barker/barker/routers/modifier_category.py index 76d0a1b..92a2277 100644 --- a/barker/barker/routers/modifier_category.py +++ b/barker/barker/routers/modifier_category.py @@ -18,7 +18,8 @@ from ..models.sku_version import SkuVersion from ..models.stock_keeping_unit import StockKeepingUnit from ..schemas import modifier_category as schemas from ..schemas.menu_category import MenuCategoryLink -from ..schemas.modifier_category_for_product import ModifierCategoryForProduct, ModifierLink +from ..schemas.modifier import ModifierLink +from ..schemas.modifier_category_for_product import ModifierCategoryForProduct from ..schemas.product_link import ProductLink from ..schemas.product_link import ProductLink as ProductLinkSchema from ..schemas.user_token import UserToken @@ -172,7 +173,7 @@ def show_list( is_active=item.is_active, sort_order=item.sort_order, menu_categories=[ - schemas.MenuCategoryLink( + MenuCategoryLink( id_=mc.id, name=mc.name, enabled=reduce(lambda x, y: x and (y.sku.product_id in products), mc.skus, True), @@ -283,7 +284,7 @@ def modifier_category_info(item: ModifierCategory, date_: date, db: Session) -> maximum=item.maximum, is_active=item.is_active, menu_categories=[ - schemas.MenuCategoryLink( + MenuCategoryLink( id_=mc.id, name=mc.name, skus=[ @@ -354,7 +355,7 @@ def modifier_category_blank(date_: date, db: Session) -> schemas.ModifierCategor maximum=0, is_active=True, menu_categories=[ - schemas.MenuCategoryLink( + MenuCategoryLink( id_=mc.id, name=mc.name, skus=[ diff --git a/barker/barker/routers/product.py b/barker/barker/routers/product.py index 726a552..1e4408f 100644 --- a/barker/barker/routers/product.py +++ b/barker/barker/routers/product.py @@ -29,6 +29,7 @@ from ..schemas import product as schemas from ..schemas.menu_category import MenuCategoryLink from ..schemas.product_query import BundleItemQuery, ProductQuery from ..schemas.sale_category import SaleCategoryLink +from ..schemas.stock_keeping_unit import StockKeepingUnit as StockKeepingUnitSchema from ..schemas.tax import TaxLink from ..schemas.user_token import UserToken from . import _pv_onclause, _sv_onclause, effective_date @@ -610,12 +611,12 @@ def product_info(version: ProductVersion) -> schemas.Product: version_id=version.id, name=version.name, fraction_units=version.fraction_units, - sale_category=schemas.SaleCategoryLink( + sale_category=SaleCategoryLink( id_=version.sale_category_id, name=version.sale_category.name, ), skus=[ - schemas.StockKeepingUnit( + StockKeepingUnitSchema( id_=sku.id, units=sku_version.units, fraction=sku_version.fraction, diff --git a/barker/barker/routers/reports/product_sale_report.py b/barker/barker/routers/reports/product_sale_report.py index b6e2020..ece776c 100644 --- a/barker/barker/routers/reports/product_sale_report.py +++ b/barker/barker/routers/reports/product_sale_report.py @@ -21,7 +21,8 @@ from ...models.stock_keeping_unit import StockKeepingUnit from ...models.voucher import Voucher from ...models.voucher_type import VoucherType from ...printing.product_sale_report import print_product_sale_report -from ...schemas.product_sale_report import ProductSaleReport, ProductSaleReportItem, UserLink +from ...schemas.product_sale_report import ProductSaleReport, ProductSaleReportItem +from ...schemas.user import UserLink from ...schemas.user_token import UserToken from .. import _pv_onclause, _sv_onclause from . import check_audit_permission, report_finish_date, report_start_date diff --git a/barker/barker/routers/reports/product_updates_report.py b/barker/barker/routers/reports/product_updates_report.py index 5b64942..669b12f 100644 --- a/barker/barker/routers/reports/product_updates_report.py +++ b/barker/barker/routers/reports/product_updates_report.py @@ -1,6 +1,6 @@ from datetime import date, timedelta -from fastapi import APIRouter, Depends, Security +from fastapi import APIRouter, Depends, HTTPException, Security, status from sqlalchemy import and_, nullsfirst, or_, select from sqlalchemy.orm import Session, contains_eager @@ -11,6 +11,7 @@ from ...models.product import Product from ...models.product_version import ProductVersion from ...models.sku_version import SkuVersion from ...models.stock_keeping_unit import StockKeepingUnit +from ...schemas.product_updates_report import ProductUpdatesReport from ...schemas.user_token import UserToken from . import report_finish_date, report_start_date @@ -18,21 +19,24 @@ from . import report_finish_date, report_start_date router = APIRouter() -@router.get("") +@router.get("", response_model=ProductUpdatesReport) def product_updates_report_view( start_date: date = Depends(report_start_date), finish_date: date = Depends(report_finish_date), user: UserToken = Security(get_user, scopes=["product-sale-report"]), -): +) -> ProductUpdatesReport: try: with SessionFuture() as db: - return { - "startDate": start_date.strftime("%d-%b-%Y"), - "finishDate": finish_date.strftime("%d-%b-%Y"), - "report": product_updates_report(start_date, finish_date, db), - } + return ProductUpdatesReport( + start_date=start_date, + finish_date=finish_date, + report=product_updates_report(start_date, finish_date, db), + ) except Exception as e: - return {"error": str(e)} + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), + ) def product_updates_report(start_date: date, finish_date: date, db: Session) -> list[str]: diff --git a/barker/barker/routers/role.py b/barker/barker/routers/role.py index 4db61c5..4a7203e 100644 --- a/barker/barker/routers/role.py +++ b/barker/barker/routers/role.py @@ -119,7 +119,7 @@ def role_info(item: Role, db: Session) -> schemas.Role: id_=item.id, name=item.name, permissions=[ - schemas.PermissionItem( + PermissionItem( id_=p.id, name=p.name, enabled=p in item.permissions, @@ -133,7 +133,7 @@ def role_blank(db: Session) -> schemas.RoleBlank: return schemas.RoleBlank( name="", permissions=[ - schemas.PermissionItem(id_=p.id, name=p.name, enabled=False) + PermissionItem(id_=p.id, name=p.name, enabled=False) for p in db.execute(select(Permission).order_by(Permission.name)).scalars().all() ], ) diff --git a/barker/barker/routers/sale_category.py b/barker/barker/routers/sale_category.py index a466ddf..09fcae0 100644 --- a/barker/barker/routers/sale_category.py +++ b/barker/barker/routers/sale_category.py @@ -13,6 +13,7 @@ from ..db.session import SessionFuture from ..models.product_version import ProductVersion from ..models.sale_category import SaleCategory from ..schemas import sale_category as schemas +from ..schemas.tax import TaxLink from ..schemas.user_token import UserToken @@ -118,7 +119,7 @@ def sale_category_info(item: SaleCategory) -> schemas.SaleCategory: id_=item.id, name=item.name, discount_limit=item.discount_limit, - tax=schemas.TaxLink(id_=item.tax_id, name=item.tax.name, rate=item.tax.rate), + tax=TaxLink(id_=item.tax_id, name=item.tax.name, rate=item.tax.rate), ) diff --git a/barker/barker/routers/section_printer.py b/barker/barker/routers/section_printer.py index bc355de..2c66aad 100644 --- a/barker/barker/routers/section_printer.py +++ b/barker/barker/routers/section_printer.py @@ -13,6 +13,8 @@ from ..db.session import SessionFuture from ..models.sale_category import SaleCategory from ..models.section_printer import SectionPrinter from ..schemas import section_printer as schemas +from ..schemas.printer import PrinterLink +from ..schemas.sale_category import SaleCategoryLink from ..schemas.user_token import UserToken @@ -126,8 +128,8 @@ def report(section_id: uuid.UUID | None, db: Session) -> list[schemas.SectionPri ) list_.append( schemas.SectionPrinter( - sale_category=None if sc_id is None else schemas.SaleCategoryLink(id_=sc_id, name=sc_name), - printer=None if section_printer is None else schemas.PrinterLink(id_=section_printer.printer_id), + sale_category=None if sc_id is None else SaleCategoryLink(id_=sc_id, name=sc_name), + printer=None if section_printer is None else PrinterLink(id_=section_printer.printer_id), copies=0 if section_printer is None else section_printer.copies, ) ) diff --git a/barker/barker/routers/setting.py b/barker/barker/routers/setting.py index affff95..cd0abcb 100644 --- a/barker/barker/routers/setting.py +++ b/barker/barker/routers/setting.py @@ -6,17 +6,18 @@ from sqlalchemy import select from ..core.security import get_current_active_user as get_user from ..db.session import SessionFuture from ..models.db_setting import DbSetting +from ..schemas.db_setting import DbSetting as DbSettingSchema from ..schemas.user_token import UserToken router = APIRouter() -@router.get("/{id_}") +@router.get("/{id_}", response_model=DbSettingSchema) def get( id_: uuid.UUID, user: UserToken = Security(get_user), -): +) -> DbSettingSchema: with SessionFuture() as db: data = db.execute(select(DbSetting).where(DbSetting.name == id_)).scalar_one() - return {"id": data.id, "name": data.name, "details": data.data} + return DbSettingSchema(id_=data.id, name=data.name, details=data.data) diff --git a/barker/barker/routers/table.py b/barker/barker/routers/table.py index f56caef..f7367ba 100644 --- a/barker/barker/routers/table.py +++ b/barker/barker/routers/table.py @@ -12,6 +12,8 @@ from ..db.session import SessionFuture from ..models.food_table import FoodTable from ..models.overview import Overview from ..schemas import table as schemas +from ..schemas.running_table import RunningTable +from ..schemas.section import SectionLink from ..schemas.user_token import UserToken @@ -33,7 +35,7 @@ def sort_order( id_=item.id, name=item.name, seats=item.seats, - section=schemas.SectionLink(id_=item.section_id, name=item.section.name), + section=SectionLink(id_=item.section_id, name=item.section.name), is_active=item.is_active, sort_order=item.sort_order, ) @@ -125,8 +127,8 @@ def show_list(user: UserToken = Depends(get_user)) -> list[schemas.Table]: ] -@router.get("/running") -def show_running(user: UserToken = Depends(get_user)): +@router.get("/running", response_model=list[RunningTable]) +def show_running(user: UserToken = Depends(get_user)) -> list[RunningTable]: with SessionFuture() as db: list_ = ( db.execute( @@ -136,27 +138,25 @@ def show_running(user: UserToken = Depends(get_user)): .all() ) - food_tables = [] + food_tables: list[RunningTable] = [] for item in list_: - ft = { - "id": item.id, - "name": item.name, - "seats": item.seats, - "section": {"id": item.section_id, "name": item.section.name}, - "isActive": item.is_active, - "sortOrder": item.sort_order, - } + ft = RunningTable( + id_=item.id, + name=item.name, + seats=item.seats, + section=SectionLink(id_=item.section_id, name=item.section.name), + is_active=item.is_active, + sort_order=item.sort_order, + ) if item.status is not None: - ft["status"] = item.status.status - ft["voucherId"] = item.status.voucher_id - ft["pax"] = item.status.voucher.pax - ft["date"] = (item.status.voucher.date + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime( - "%d-%b-%Y %H:%M" - ) - ft["amount"] = round(item.status.voucher.amount, 0) + ft.status = item.status.status + ft.voucher_id = item.status.voucher_id + ft.pax = item.status.voucher.pax + ft.date_ = item.status.voucher.date + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES) + ft.amount = int(round(item.status.voucher.amount, 0)) if item.status.guest is not None: - ft["guest"] = item.status.guest.customer.name - ft["bold"] = item.status.guest.customer.print_in_bill + ft.guest = item.status.guest.customer.name + ft.bold = item.status.guest.customer.print_in_bill food_tables.append(ft) return food_tables @@ -188,7 +188,7 @@ def food_table_info(item: FoodTable) -> schemas.Table: id_=item.id, name=item.name, seats=item.seats, - section=schemas.SectionLink(id_=item.section_id, name=item.section.name), + section=SectionLink(id_=item.section_id, name=item.section.name), is_active=item.is_active, sort_order=item.sort_order, ) diff --git a/barker/barker/routers/tax.py b/barker/barker/routers/tax.py index bbcfcc2..d948117 100644 --- a/barker/barker/routers/tax.py +++ b/barker/barker/routers/tax.py @@ -14,6 +14,7 @@ from ..models.inventory import Inventory from ..models.sale_category import SaleCategory from ..models.tax import Tax from ..schemas import tax as schemas +from ..schemas.regime import RegimeLink from ..schemas.user_token import UserToken @@ -129,7 +130,7 @@ def tax_info(item: Tax) -> schemas.Tax: id_=item.id, name=item.name, rate=item.rate, - regime=schemas.RegimeLink(id_=item.regime_id, name=item.regime.name), + regime=RegimeLink(id_=item.regime_id, name=item.regime.name), is_fixture=item.is_fixture, ) diff --git a/barker/barker/routers/temporal_product.py b/barker/barker/routers/temporal_product.py index 78f63f8..1db943a 100644 --- a/barker/barker/routers/temporal_product.py +++ b/barker/barker/routers/temporal_product.py @@ -102,14 +102,14 @@ def check_gaps(data: TemporalProduct, db: Session) -> None: detail="Product and SKU versions validity do not match", ) for i, p_item in enumerate(data.products[1:], start=1): - if data.products[i - 1].valid_till + timedelta(days=1) != p_item.valid_from: + if data.products[i - 1].valid_till + timedelta(days=1) != p_item.valid_from: # type: ignore[operator] raise HTTPException( status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, detail="Gaps in product versions exist", ) for sku_list in skus.values(): for i, s_item in enumerate(sku_list[1:], start=1): - if sku_list[i - 1].valid_till + timedelta(days=1) != s_item.valid_from: + if sku_list[i - 1].valid_till + timedelta(days=1) != s_item.valid_from: # type: ignore[operator] raise HTTPException( status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, detail="Gaps in sku versions exist", diff --git a/barker/barker/routers/user.py b/barker/barker/routers/user.py index c74a5bb..819bc2c 100644 --- a/barker/barker/routers/user.py +++ b/barker/barker/routers/user.py @@ -166,7 +166,7 @@ def user_info(item: User, db: Session, user: UserToken) -> schemas.User: password="", locked_out=item.locked_out, roles=[ - schemas.RoleItem( + RoleItem( id_=r.id, name=r.name, enabled=r in item.roles, @@ -194,7 +194,7 @@ def blank_user_info(db: Session) -> schemas.UserIn: password="", locked_out=False, roles=[ - schemas.RoleItem(id_=r.id, name=r.name, enabled=False) + RoleItem(id_=r.id, name=r.name, enabled=False) for r in db.execute(select(Role).order_by(Role.name)).scalars().all() ], ) diff --git a/barker/barker/routers/voucher/__init__.py b/barker/barker/routers/voucher/__init__.py index 7acbab3..c8dc23e 100644 --- a/barker/barker/routers/voucher/__init__.py +++ b/barker/barker/routers/voucher/__init__.py @@ -4,7 +4,7 @@ from datetime import datetime from decimal import Decimal from fastapi import HTTPException, status -from sqlalchemy import func, select +from sqlalchemy import ColumnElement, func, select from sqlalchemy.orm import Session, contains_eager from sqlalchemy.sql import expression @@ -188,7 +188,12 @@ def happy_hour_items_more_than_regular(kots: list[schemas.Kot]) -> bool: return any(value["happy"] > value["normal"] for value in inventories.values()) -def get_voucher(voucher_id: uuid.UUID, db: Session, product_version_onclause, sku_version_onclause) -> Voucher: +def get_voucher( + voucher_id: uuid.UUID, + db: Session, + product_version_onclause: ColumnElement[bool], + sku_version_onclause: ColumnElement[bool], +) -> Voucher: item: Voucher = ( db.execute( select(Voucher) @@ -230,8 +235,8 @@ def get_voucher(voucher_id: uuid.UUID, db: Session, product_version_onclause, sk def get_sku( sku_id: uuid.UUID, db: Session, - product_version_onclause, - sku_version_onclause, + product_version_onclause: ColumnElement[bool], + sku_version_onclause: ColumnElement[bool], ) -> StockKeepingUnit: sku: StockKeepingUnit = ( db.execute( diff --git a/barker/barker/routers/voucher/show.py b/barker/barker/routers/voucher/show.py index 3de07e3..c2c486e 100644 --- a/barker/barker/routers/voucher/show.py +++ b/barker/barker/routers/voucher/show.py @@ -24,21 +24,21 @@ from ...models.sku_version import SkuVersion from ...models.stock_keeping_unit import StockKeepingUnit from ...models.voucher import Voucher from ...models.voucher_type import VoucherType +from ...schemas.customer import CustomerLink +from ...schemas.modifier import ModifierLink +from ...schemas.table import TableLink +from ...schemas.tax import TaxLink +from ...schemas.user import UserLink from ...schemas.user_token import UserToken from ...schemas.voucher_out import ( - CustomerLink, - InventoryProduct, - ModifierLink, - ProductMenuCategory, - ProductSaleCategory, - TableLink, - TaxLink, - UserLink, - VoucherBlank, - VoucherOut, + Inventory as InventoryOut, ) from ...schemas.voucher_out import ( - Inventory as InventoryOut, + InventoryProduct, + ProductMenuCategory, + ProductSaleCategory, + VoucherBlank, + VoucherOut, ) from ...schemas.voucher_out import ( Kot as KotOut, diff --git a/barker/barker/routers/voucher/update.py b/barker/barker/routers/voucher/update.py index 2a5361d..bc6aedb 100644 --- a/barker/barker/routers/voucher/update.py +++ b/barker/barker/routers/voucher/update.py @@ -4,7 +4,7 @@ from datetime import UTC, datetime, timedelta from decimal import Decimal from fastapi import APIRouter, HTTPException, Security, status -from sqlalchemy import Date, func, select +from sqlalchemy import ColumnElement, Date, func, select from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session, contains_eager @@ -43,7 +43,7 @@ from ...schemas.user_token import UserToken router = APIRouter() -def discount_limit(sku_id: uuid.UUID, db: Session, product_version_onclause) -> Decimal: +def discount_limit(sku_id: uuid.UUID, db: Session, product_version_onclause: ColumnElement[bool]) -> Decimal: sku: StockKeepingUnit = ( db.execute( select(StockKeepingUnit) diff --git a/barker/barker/schemas/beer_consumption_report.py b/barker/barker/schemas/beer_consumption_report.py index 41c1647..42c670a 100644 --- a/barker/barker/schemas/beer_consumption_report.py +++ b/barker/barker/schemas/beer_consumption_report.py @@ -1,8 +1,16 @@ from datetime import date, datetime from decimal import Decimal -from typing import Annotated, Any +from typing import Annotated -from pydantic import BaseModel, ConfigDict, Field, field_serializer, field_validator, model_serializer +from pydantic import ( + BaseModel, + ConfigDict, + Field, + SerializationInfo, + field_serializer, + field_validator, + model_serializer, +) from . import Daf, to_camel @@ -18,7 +26,7 @@ class BeerConsumptionReportItem(BaseModel): return datetime.strptime(value, "%d-%b-%Y").date() @field_serializer("date_") - def serialize_date(self, value: date, _info: Any) -> str: + def serialize_date(self, value: date, _info: SerializationInfo) -> str: return value.strftime("%d-%b-%Y") # dynamic fields (e.g., regular, nc, kot) @@ -64,7 +72,7 @@ class BeerConsumptionReport(BaseModel): return datetime.strptime(value, "%d-%b-%Y").date() @field_serializer("start_date") - def serialize_start_date(self, value: date, _info: Any) -> str: + def serialize_start_date(self, value: date, _info: SerializationInfo) -> str: return value.strftime("%d-%b-%Y") @field_validator("finish_date", mode="before") @@ -75,5 +83,5 @@ class BeerConsumptionReport(BaseModel): return datetime.strptime(value, "%d-%b-%Y").date() @field_serializer("finish_date") - def serialize_finish_date(self, value: date, _info: Any) -> str: + def serialize_finish_date(self, value: date, _info: SerializationInfo) -> str: return value.strftime("%d-%b-%Y") diff --git a/barker/barker/schemas/bill_settlement_report.py b/barker/barker/schemas/bill_settlement_report.py index ea56493..4536e77 100644 --- a/barker/barker/schemas/bill_settlement_report.py +++ b/barker/barker/schemas/bill_settlement_report.py @@ -1,7 +1,6 @@ from datetime import date, datetime -from typing import Any -from pydantic import BaseModel, ConfigDict, field_serializer, field_validator +from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer, field_validator from . import Daf, to_camel @@ -21,7 +20,7 @@ class BillSettlementItem(BaseModel): return datetime.strptime(value, "%d-%b-%Y %H:%M") @field_serializer("date_") - def serialize_date(self, value: datetime, _info: Any) -> str: + def serialize_date(self, value: datetime, _info: SerializationInfo) -> str: return value.strftime("%d-%b-%Y %H:%M") @@ -39,7 +38,7 @@ class BillSettlement(BaseModel): return datetime.strptime(value, "%d-%b-%Y").date() @field_serializer("start_date") - def serialize_start_date(self, value: date, _info: Any) -> str: + def serialize_start_date(self, value: date, _info: SerializationInfo) -> str: return value.strftime("%d-%b-%Y") @field_validator("finish_date", mode="before") @@ -50,5 +49,5 @@ class BillSettlement(BaseModel): return datetime.strptime(value, "%d-%b-%Y").date() @field_serializer("finish_date") - def serialize_finish_date(self, value: date, _info: Any) -> str: + def serialize_finish_date(self, value: date, _info: SerializationInfo) -> str: return value.strftime("%d-%b-%Y") diff --git a/barker/barker/schemas/cashier_report.py b/barker/barker/schemas/cashier_report.py index 1f2b7e0..97e1345 100644 --- a/barker/barker/schemas/cashier_report.py +++ b/barker/barker/schemas/cashier_report.py @@ -1,7 +1,6 @@ from datetime import date, datetime -from typing import Any -from pydantic import BaseModel, ConfigDict, field_serializer, field_validator +from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer, field_validator from . import Daf, to_camel from .user import UserLink @@ -60,7 +59,7 @@ class CashierReport(BaseModel): return datetime.strptime(value, "%d-%b-%Y").date() @field_serializer("start_date") - def serialize_start_date(self, value: date, _info: Any) -> str: + def serialize_start_date(self, value: date, _info: SerializationInfo) -> str: return value.strftime("%d-%b-%Y") @field_validator("finish_date", mode="before") @@ -71,5 +70,5 @@ class CashierReport(BaseModel): return datetime.strptime(value, "%d-%b-%Y").date() @field_serializer("finish_date") - def serialize_finish_date(self, value: date, _info: Any) -> str: + def serialize_finish_date(self, value: date, _info: SerializationInfo) -> str: return value.strftime("%d-%b-%Y") diff --git a/barker/barker/schemas/db_setting.py b/barker/barker/schemas/db_setting.py new file mode 100644 index 0000000..13023bf --- /dev/null +++ b/barker/barker/schemas/db_setting.py @@ -0,0 +1,19 @@ +import uuid + +from typing import Any + +from pydantic import BaseModel, ConfigDict + +from . import to_camel + + +class DbSetting(BaseModel): + id_: uuid.UUID + name: str + details: dict[str, Any] + + model_config = ConfigDict( + str_strip_whitespace=True, + alias_generator=to_camel, + populate_by_name=True, + ) diff --git a/barker/barker/schemas/device.py b/barker/barker/schemas/device.py index da5b082..ada3acc 100644 --- a/barker/barker/schemas/device.py +++ b/barker/barker/schemas/device.py @@ -1,9 +1,9 @@ import uuid from datetime import datetime -from typing import Annotated, Any +from typing import Annotated -from pydantic import BaseModel, ConfigDict, Field, field_serializer +from pydantic import BaseModel, ConfigDict, Field, SerializationInfo, field_serializer from . import to_camel from .section import SectionLink @@ -24,11 +24,11 @@ class Device(DeviceIn): model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True) @field_serializer("creation_date") - def serialize_creation_date(self, value: datetime, _info: Any) -> str: + def serialize_creation_date(self, value: datetime, _info: SerializationInfo) -> str: return value.strftime("%d-%b-%Y %H:%M") @field_serializer("last_date") - def serialize_last_date(self, value: datetime | None, _info: Any) -> str | None: + def serialize_last_date(self, value: datetime | None, _info: SerializationInfo) -> str | None: return None if value is None else value.strftime("%d-%b-%Y %H:%M") diff --git a/barker/barker/schemas/discount_report.py b/barker/barker/schemas/discount_report.py index 9912265..d74eecf 100644 --- a/barker/barker/schemas/discount_report.py +++ b/barker/barker/schemas/discount_report.py @@ -1,7 +1,6 @@ from datetime import date, datetime -from typing import Any -from pydantic import BaseModel, ConfigDict, field_serializer, field_validator +from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer, field_validator from . import Daf, to_camel @@ -26,7 +25,7 @@ class DiscountReport(BaseModel): return datetime.strptime(value, "%d-%b-%Y").date() @field_serializer("start_date") - def serialize_start_date(self, value: date, _info: Any) -> str: + def serialize_start_date(self, value: date, _info: SerializationInfo) -> str: return value.strftime("%d-%b-%Y") @field_validator("finish_date", mode="before") @@ -37,5 +36,5 @@ class DiscountReport(BaseModel): return datetime.strptime(value, "%d-%b-%Y").date() @field_serializer("finish_date") - def serialize_finish_date(self, value: date, _info: Any) -> str: + def serialize_finish_date(self, value: date, _info: SerializationInfo) -> str: return value.strftime("%d-%b-%Y") diff --git a/barker/barker/schemas/guest_book.py b/barker/barker/schemas/guest_book.py index 0d66df7..2e7eb0f 100644 --- a/barker/barker/schemas/guest_book.py +++ b/barker/barker/schemas/guest_book.py @@ -1,12 +1,13 @@ import uuid from datetime import date, datetime -from typing import Annotated, Any +from typing import Annotated from pydantic import ( BaseModel, ConfigDict, Field, + SerializationInfo, field_serializer, field_validator, model_validator, @@ -38,7 +39,7 @@ class GuestBookIn(BaseModel): return datetime.strptime(value, "%d-%b-%Y %H:%M") @field_serializer("booking_date") - def serialize_booking_date(self, value: datetime | None, _info: Any) -> str | None: + def serialize_booking_date(self, value: datetime | None, _info: SerializationInfo) -> str | None: return None if value is None else value.strftime("%d-%b-%Y %H:%M") @field_validator("arrival_date", mode="before") @@ -51,7 +52,7 @@ class GuestBookIn(BaseModel): return datetime.strptime(value, "%d-%b-%Y %H:%M") @field_serializer("arrival_date") - def serialize_arrival_date(self, value: datetime | None, _info: Any) -> str | None: + def serialize_arrival_date(self, value: datetime | None, _info: SerializationInfo) -> str | None: return None if value is None else value.strftime("%d-%b-%Y %H:%M") @model_validator(mode="after") @@ -75,7 +76,7 @@ class GuestBook(GuestBookIn): return datetime.strptime(value, "%d-%b-%Y %H:%M") @field_serializer("last_edit_date") - def serialize_last_edit_date(self, value: datetime, _info: Any) -> str: + def serialize_last_edit_date(self, value: datetime, _info: SerializationInfo) -> str: return value.strftime("%d-%b-%Y %H:%M") @@ -107,7 +108,7 @@ class GuestBookListItem(BaseModel): return datetime.strptime(value, "%d-%b-%Y %H:%M") @field_serializer("booking_date") - def serialize_booking_date(self, value: datetime | None, _info: Any) -> str | None: + def serialize_booking_date(self, value: datetime | None, _info: SerializationInfo) -> str | None: return None if value is None else value.strftime("%d-%b-%Y %H:%M") @field_validator("arrival_date", mode="before") @@ -120,7 +121,7 @@ class GuestBookListItem(BaseModel): return datetime.strptime(value, "%d-%b-%Y %H:%M") @field_serializer("arrival_date") - def serialize_arrival_date(self, value: datetime | None, _info: Any) -> str | None: + def serialize_arrival_date(self, value: datetime | None, _info: SerializationInfo) -> str | None: return None if value is None else value.strftime("%d-%b-%Y %H:%M") @field_validator("last_edit_date", mode="before") @@ -131,7 +132,7 @@ class GuestBookListItem(BaseModel): return datetime.strptime(value, "%d-%b-%Y %H:%M") @field_serializer("last_edit_date") - def serialize_last_edit_date(self, value: datetime, _info: Any) -> str: + def serialize_last_edit_date(self, value: datetime, _info: SerializationInfo) -> str: return value.strftime("%d-%b-%Y %H:%M") @@ -148,5 +149,5 @@ class GuestBookList(BaseModel): return datetime.strptime(value, "%d-%b-%Y").date() @field_serializer("date_") - def serialize_date(self, value: date, _info: Any) -> str: + def serialize_date(self, value: date, _info: SerializationInfo) -> str: return value.strftime("%d-%b-%Y") diff --git a/barker/barker/schemas/health_response.py b/barker/barker/schemas/health_response.py new file mode 100644 index 0000000..a9c32f3 --- /dev/null +++ b/barker/barker/schemas/health_response.py @@ -0,0 +1,6 @@ +from pydantic import BaseModel + + +class HealthResponse(BaseModel): + status: str + database: str diff --git a/barker/barker/schemas/menu_engineering_report.py b/barker/barker/schemas/menu_engineering_report.py index 57b11c4..16de451 100644 --- a/barker/barker/schemas/menu_engineering_report.py +++ b/barker/barker/schemas/menu_engineering_report.py @@ -1,9 +1,8 @@ import uuid from datetime import date, datetime -from typing import Any -from pydantic import BaseModel, ConfigDict, field_serializer, field_validator +from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer, field_validator from . import Daf, to_camel @@ -37,7 +36,7 @@ class MeReport(BaseModel): return datetime.strptime(value, "%d-%b-%Y").date() @field_serializer("start_date") - def serialize_start_date(self, value: date, _info: Any) -> str: + def serialize_start_date(self, value: date, _info: SerializationInfo) -> str: return value.strftime("%d-%b-%Y") @field_validator("finish_date", mode="before") @@ -48,5 +47,5 @@ class MeReport(BaseModel): return datetime.strptime(value, "%d-%b-%Y").date() @field_serializer("finish_date") - def serialize_finish_date(self, value: date, _info: Any) -> str: + def serialize_finish_date(self, value: date, _info: SerializationInfo) -> str: return value.strftime("%d-%b-%Y") diff --git a/barker/barker/schemas/product.py b/barker/barker/schemas/product.py index 325d83f..60dffec 100644 --- a/barker/barker/schemas/product.py +++ b/barker/barker/schemas/product.py @@ -1,9 +1,9 @@ import uuid from datetime import date, datetime -from typing import Annotated, Any +from typing import Annotated -from pydantic import BaseModel, ConfigDict, Field, field_serializer, field_validator +from pydantic import BaseModel, ConfigDict, Field, SerializationInfo, field_serializer, field_validator from . import to_camel from .sale_category import SaleCategoryLink @@ -37,7 +37,7 @@ class Product(ProductIn): return datetime.strptime(value, "%d-%b-%Y").date() @field_serializer("valid_from") - def serialize_valid_from(self, value: date | None, _info: Any) -> str | None: + def serialize_valid_from(self, value: date | None, _info: SerializationInfo) -> str | None: return None if value is None else value.strftime("%d-%b-%Y") @field_validator("valid_till", mode="before") @@ -50,7 +50,7 @@ class Product(ProductIn): return datetime.strptime(value, "%d-%b-%Y").date() @field_serializer("valid_till") - def serialize_valid_till(self, value: date | None, _info: Any) -> str | None: + def serialize_valid_till(self, value: date | None, _info: SerializationInfo) -> str | None: return None if value is None else value.strftime("%d-%b-%Y") diff --git a/barker/barker/schemas/product_sale_report.py b/barker/barker/schemas/product_sale_report.py index e13473b..79884f1 100644 --- a/barker/barker/schemas/product_sale_report.py +++ b/barker/barker/schemas/product_sale_report.py @@ -2,9 +2,17 @@ import uuid from datetime import date, datetime from decimal import Decimal -from typing import Annotated, Any +from typing import Annotated -from pydantic import BaseModel, ConfigDict, Field, field_serializer, field_validator, model_serializer +from pydantic import ( + BaseModel, + ConfigDict, + Field, + SerializationInfo, + field_serializer, + field_validator, + model_serializer, +) from . import Daf, to_camel from .user import UserLink @@ -57,7 +65,7 @@ class ProductSaleReport(BaseModel): return datetime.strptime(value, "%d-%b-%Y").date() @field_serializer("start_date") - def serialize_start_date(self, value: date, _info: Any) -> str: + def serialize_start_date(self, value: date, _info: SerializationInfo) -> str: return value.strftime("%d-%b-%Y") @field_validator("finish_date", mode="before") @@ -68,5 +76,5 @@ class ProductSaleReport(BaseModel): return datetime.strptime(value, "%d-%b-%Y").date() @field_serializer("finish_date") - def serialize_finish_date(self, value: date, _info: Any) -> str: + def serialize_finish_date(self, value: date, _info: SerializationInfo) -> str: return value.strftime("%d-%b-%Y") diff --git a/barker/barker/schemas/product_updates_report.py b/barker/barker/schemas/product_updates_report.py new file mode 100644 index 0000000..eb04bef --- /dev/null +++ b/barker/barker/schemas/product_updates_report.py @@ -0,0 +1,35 @@ +from datetime import date, datetime + +from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer, field_validator + +from . import to_camel + + +class ProductUpdatesReport(BaseModel): + start_date: date + finish_date: date + report: list[str] + + model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True) + + @field_validator("start_date", mode="before") + @classmethod + def parse_start_date(cls, value: str | date) -> date: + if isinstance(value, date): + return value + return datetime.strptime(value, "%d-%b-%Y").date() + + @field_serializer("start_date") + def serialize_start_date(self, value: date, _info: SerializationInfo) -> str: + return value.strftime("%d-%b-%Y") + + @field_validator("finish_date", mode="before") + @classmethod + def parse_finish_date(cls, value: str | date) -> date: + if isinstance(value, date): + return value + return datetime.strptime(value, "%d-%b-%Y").date() + + @field_serializer("finish_date") + def serialize_finish_date(self, value: date, _info: SerializationInfo) -> str: + return value.strftime("%d-%b-%Y") diff --git a/barker/barker/schemas/running_table.py b/barker/barker/schemas/running_table.py new file mode 100644 index 0000000..63de265 --- /dev/null +++ b/barker/barker/schemas/running_table.py @@ -0,0 +1,43 @@ +import uuid + +from datetime import datetime + +from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer, field_validator + +from . import to_camel +from .section import SectionLink + + +class RunningTable(BaseModel): + id_: uuid.UUID + name: str + seats: int + section: SectionLink + is_active: bool + sort_order: int + + # present only when status exists in DB + status: str | None = None + voucher_id: uuid.UUID | None = None + pax: int | None = None + date_: datetime | None = None + amount: float | None = None # you round to 0 decimals; keep Decimal if you prefer + guest: str | None = None + bold: bool | None = None + + model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True) + + @field_validator("date_", mode="before") + @classmethod + def parse_date(cls, value: str | datetime | None) -> datetime | None: + if value is None: + return None + if isinstance(value, datetime): + return value + return datetime.strptime(value, "%d-%b-%Y %H:%M") + + @field_serializer("date_") + def serialize_date(self, value: datetime | None, _info: SerializationInfo) -> str | None: + if value is None: + return None + return value.strftime("%d-%b-%Y %H:%M") diff --git a/barker/barker/schemas/sale_report.py b/barker/barker/schemas/sale_report.py index ba5ffe4..d7ac6a0 100644 --- a/barker/barker/schemas/sale_report.py +++ b/barker/barker/schemas/sale_report.py @@ -1,9 +1,8 @@ import uuid from datetime import date, datetime -from typing import Any -from pydantic import BaseModel, ConfigDict, field_serializer, field_validator +from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer, field_validator from . import Daf, to_camel from .user import UserLink @@ -31,7 +30,7 @@ class SaleReport(BaseModel): return datetime.strptime(value, "%d-%b-%Y").date() @field_serializer("start_date") - def serialize_start_date(self, value: date, _info: Any) -> str: + def serialize_start_date(self, value: date, _info: SerializationInfo) -> str: return value.strftime("%d-%b-%Y") @field_validator("finish_date", mode="before") @@ -42,5 +41,5 @@ class SaleReport(BaseModel): return datetime.strptime(value, "%d-%b-%Y").date() @field_serializer("finish_date") - def serialize_finish_date(self, value: date, _info: Any) -> str: + def serialize_finish_date(self, value: date, _info: SerializationInfo) -> str: return value.strftime("%d-%b-%Y") diff --git a/barker/barker/schemas/stock_keeping_unit.py b/barker/barker/schemas/stock_keeping_unit.py index d3a3099..5a1295a 100644 --- a/barker/barker/schemas/stock_keeping_unit.py +++ b/barker/barker/schemas/stock_keeping_unit.py @@ -2,9 +2,9 @@ import uuid from datetime import date, datetime from decimal import Decimal -from typing import Annotated, Any +from typing import Annotated -from pydantic import BaseModel, ConfigDict, Field, field_serializer, field_validator +from pydantic import BaseModel, ConfigDict, Field, SerializationInfo, field_serializer, field_validator from . import Daf, to_camel from .menu_category import MenuCategoryLink @@ -38,7 +38,7 @@ class StockKeepingUnit(BaseModel): return datetime.strptime(value, "%d-%b-%Y").date() @field_serializer("valid_from") - def serialize_valid_from(self, value: date | None, _info: Any) -> str | None: + def serialize_valid_from(self, value: date | None, _info: SerializationInfo) -> str | None: return None if value is None else value.strftime("%d-%b-%Y") @field_validator("valid_till", mode="before") @@ -51,5 +51,5 @@ class StockKeepingUnit(BaseModel): return datetime.strptime(value, "%d-%b-%Y").date() @field_serializer("valid_till") - def serialize_valid_till(self, value: date | None, _info: Any) -> str | None: + def serialize_valid_till(self, value: date | None, _info: SerializationInfo) -> str | None: return None if value is None else value.strftime("%d-%b-%Y") diff --git a/barker/barker/schemas/tax_report.py b/barker/barker/schemas/tax_report.py index fe257b8..1f0b9ca 100644 --- a/barker/barker/schemas/tax_report.py +++ b/barker/barker/schemas/tax_report.py @@ -1,7 +1,6 @@ from datetime import date, datetime -from typing import Any -from pydantic import BaseModel, ConfigDict, field_serializer, field_validator +from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer, field_validator from . import Daf, to_camel @@ -28,7 +27,7 @@ class TaxReport(BaseModel): return datetime.strptime(value, "%d-%b-%Y").date() @field_serializer("start_date") - def serialize_start_date(self, value: date, _info: Any) -> str: + def serialize_start_date(self, value: date, _info: SerializationInfo) -> str: return value.strftime("%d-%b-%Y") @field_validator("finish_date", mode="before") @@ -39,5 +38,5 @@ class TaxReport(BaseModel): return datetime.strptime(value, "%d-%b-%Y").date() @field_serializer("finish_date") - def serialize_finish_date(self, value: date, _info: Any) -> str: + def serialize_finish_date(self, value: date, _info: SerializationInfo) -> str: return value.strftime("%d-%b-%Y") diff --git a/barker/barker/schemas/temporal_product.py b/barker/barker/schemas/temporal_product.py index eb801d9..91eefe1 100644 --- a/barker/barker/schemas/temporal_product.py +++ b/barker/barker/schemas/temporal_product.py @@ -2,9 +2,9 @@ import uuid from datetime import date, datetime from decimal import Decimal -from typing import Annotated, Any +from typing import Annotated -from pydantic import BaseModel, ConfigDict, Field, field_serializer, field_validator +from pydantic import BaseModel, ConfigDict, Field, SerializationInfo, field_serializer, field_validator from . import Daf, to_camel from .menu_category import MenuCategoryLink @@ -33,7 +33,7 @@ class Product(BaseModel): return datetime.strptime(value, "%d-%b-%Y").date() @field_serializer("valid_from") - def serialize_valid_from(self, value: date | None, _info: Any) -> str | None: + def serialize_valid_from(self, value: date | None, _info: SerializationInfo) -> str | None: return None if value is None else value.strftime("%d-%b-%Y") @field_validator("valid_till", mode="before") @@ -46,7 +46,7 @@ class Product(BaseModel): return datetime.strptime(value, "%d-%b-%Y").date() @field_serializer("valid_till") - def serialize_valid_till(self, value: date | None, _info: Any) -> str | None: + def serialize_valid_till(self, value: date | None, _info: SerializationInfo) -> str | None: return None if value is None else value.strftime("%d-%b-%Y") @@ -78,7 +78,7 @@ class StockKeepingUnit(BaseModel): return datetime.strptime(value, "%d-%b-%Y").date() @field_serializer("valid_from") - def serialize_valid_from(self, value: date | None, _info: Any) -> str | None: + def serialize_valid_from(self, value: date | None, _info: SerializationInfo) -> str | None: return None if value is None else value.strftime("%d-%b-%Y") @field_validator("valid_till", mode="before") @@ -91,7 +91,7 @@ class StockKeepingUnit(BaseModel): return datetime.strptime(value, "%d-%b-%Y").date() @field_serializer("valid_till") - def serialize_valid_till(self, value: date | None, _info: Any) -> str | None: + def serialize_valid_till(self, value: date | None, _info: SerializationInfo) -> str | None: return None if value is None else value.strftime("%d-%b-%Y") diff --git a/barker/barker/schemas/update_product_prices.py b/barker/barker/schemas/update_product_prices.py index e0bb17a..f45c901 100644 --- a/barker/barker/schemas/update_product_prices.py +++ b/barker/barker/schemas/update_product_prices.py @@ -1,9 +1,8 @@ import uuid from datetime import date, datetime -from typing import Any -from pydantic import BaseModel, ConfigDict, field_serializer, field_validator +from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer, field_validator from . import Daf, to_camel @@ -30,5 +29,5 @@ class UpdateProductPrices(BaseModel): return datetime.strptime(value, "%d-%b-%Y").date() @field_serializer("date_") - def serialize_date(self, value: date, _info: Any) -> str: + def serialize_date(self, value: date, _info: SerializationInfo) -> str: return value.strftime("%d-%b-%Y") diff --git a/barker/barker/schemas/user.py b/barker/barker/schemas/user.py index c853d74..8ba3684 100644 --- a/barker/barker/schemas/user.py +++ b/barker/barker/schemas/user.py @@ -1,9 +1,8 @@ import uuid from datetime import datetime -from typing import Any -from pydantic import BaseModel, ConfigDict, field_serializer +from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer from . import to_camel from .role import RoleItem @@ -44,5 +43,5 @@ class UserList(BaseModel): model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True) @field_serializer("last_date") - def serialize_last_date(self, value: datetime | None, _info: Any) -> str | None: + def serialize_last_date(self, value: datetime | None, _info: SerializationInfo) -> str | None: return None if value is None else value.strftime("%d-%b-%Y %H:%M") diff --git a/barker/barker/schemas/voucher_out.py b/barker/barker/schemas/voucher_out.py index 0b02949..3ed3d12 100644 --- a/barker/barker/schemas/voucher_out.py +++ b/barker/barker/schemas/voucher_out.py @@ -4,7 +4,7 @@ from datetime import datetime, timedelta from decimal import Decimal from typing import Annotated -from pydantic import BaseModel, ConfigDict, Field, field_serializer, field_validator, model_validator +from pydantic import BaseModel, ConfigDict, Field, SerializationInfo, field_serializer, field_validator, model_validator from ..core.config import settings from ..models.inventory_type import InventoryType @@ -110,7 +110,7 @@ class Kot(BaseModel): model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True) @field_serializer("date_") - def serialize_date(self, value: datetime, _info): + def serialize_date(self, value: datetime, _info: SerializationInfo) -> str: return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%d-%b-%Y %H:%M:%S") @@ -149,25 +149,25 @@ class VoucherOut(BaseModel): ) @field_serializer("date_") - def serialize_date(self, value: datetime, _info): + def serialize_date(self, value: datetime, _info: SerializationInfo) -> str: return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%H:%M") @field_serializer("date_tip") - def serialize_date_tip(self, value: datetime, _info): + def serialize_date_tip(self, value: datetime, _info: SerializationInfo) -> str: return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%d-%b-%Y %H:%M:%S") @field_serializer("creation_date") - def serialize_creation_date(self, value: datetime, _info): + def serialize_creation_date(self, value: datetime, _info: SerializationInfo) -> str: return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%H:%M") @field_serializer("creation_date_tip") - def serialize_creation_date_tip(self, value: datetime, _info): + def serialize_creation_date_tip(self, value: datetime, _info: SerializationInfo) -> str: return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%d-%b-%Y %H:%M:%S") @field_serializer("last_edit_date") - def serialize_last_edit_date(self, value: datetime, _info): + def serialize_last_edit_date(self, value: datetime, _info: SerializationInfo) -> str: return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%H:%M") @field_serializer("last_edit_date_tip") - def serialize_last_edit_date_tip(self, value: datetime, _info): + def serialize_last_edit_date_tip(self, value: datetime, _info: SerializationInfo) -> str: return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%d-%b-%Y %H:%M:%S")