diff --git a/barker/barker/routers/modifier.py b/barker/barker/routers/modifier.py index 9fd41ec..778263d 100644 --- a/barker/barker/routers/modifier.py +++ b/barker/barker/routers/modifier.py @@ -1,8 +1,8 @@ import uuid -from typing import Optional +from typing import List -import barker.schemas.master as schemas +import barker.schemas.modifier as schemas from fastapi import APIRouter, Depends, HTTPException, Security, status from sqlalchemy.exc import SQLAlchemyError @@ -31,7 +31,7 @@ def save( data: schemas.ModifierIn, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["modifiers"]), -): +) -> schemas.Modifier: try: item = Modifier( name=data.name, @@ -60,7 +60,7 @@ def update( data: schemas.ModifierIn, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["modifiers"]), -): +) -> schemas.Modifier: try: item: Modifier = db.query(Modifier).filter(Modifier.id == id_).first() item.name = data.name @@ -81,17 +81,17 @@ def update( raise -@router.delete("/{id_}") +@router.delete("/{id_}", response_model=schemas.ModifierBlank) def delete( id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["modifiers"]), -): +) -> schemas.ModifierBlank: try: item: Modifier = db.query(Modifier).filter(Modifier.id == id_).first() db.delete(item) db.commit() - return modifier_info(item) + return modifier_blank() except SQLAlchemyError as e: db.rollback() raise HTTPException( @@ -103,46 +103,47 @@ def delete( raise -@router.get("") +@router.get("", response_model=schemas.ModifierBlank) def show_blank( db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["modifiers"]), -): - return modifier_info(None) +) -> schemas.ModifierBlank: + return modifier_blank() -@router.get("/list") -def show_list(db: Session = Depends(get_db), user: UserToken = Depends(get_user)): +@router.get("/list", response_model=List[schemas.Modifier]) +def show_list(db: Session = Depends(get_db), user: UserToken = Depends(get_user)) -> List[schemas.Modifier]: return [modifier_info(item) for item in db.query(Modifier).order_by(Modifier.name).all()] -@router.get("/{id_}") +@router.get("/{id_}", response_model=schemas.Modifier) def show_id( id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["modifiers"]), -): +) -> schemas.Modifier: item: Modifier = db.query(Modifier).filter(Modifier.id == id_).first() return modifier_info(item) -def modifier_info(item: Optional[Modifier]): - if item is None: - return { - "name": "", - "showInBill": False, - "price": 0, - "isActive": True, - "modifierCategory": {}, - } - return { - "id": item.id, - "name": item.name, - "showInBill": item.show_in_bill, - "price": item.price, - "isActive": item.is_active, - "modifierCategory": { - "id": item.modifier_category.id, - "name": item.modifier_category.name, - }, - } +def modifier_info(item: Modifier) -> schemas.Modifier: + return schemas.Modifier( + id=item.id, + name=item.name, + showInBill=item.show_in_bill, + price=item.price, + isActive=item.is_active, + modifierCategory=schemas.ModifierCategoryLink( + id=item.modifier_category.id, + name=item.modifier_category.name, + ), + ) + + +def modifier_blank() -> schemas.ModifierBlank: + return schemas.ModifierBlank( + name="", + showInBill=False, + price=0, + isActive=True, + ) diff --git a/barker/barker/schemas/menu_category.py b/barker/barker/schemas/menu_category.py index 4a4809f..1eef5e5 100644 --- a/barker/barker/schemas/menu_category.py +++ b/barker/barker/schemas/menu_category.py @@ -33,6 +33,7 @@ class MenuCategory(MenuCategoryIn): class MenuCategoryLink(BaseModel): id_: uuid.UUID = Field(...) + name: Optional[str] products: Optional[List[ProductLink]] class Config: diff --git a/barker/barker/schemas/modifier.py b/barker/barker/schemas/modifier.py index 0ad967e..715899c 100644 --- a/barker/barker/schemas/modifier.py +++ b/barker/barker/schemas/modifier.py @@ -32,3 +32,13 @@ class ModifierLink(BaseModel): class Config: fields = {"id_": "id"} + + +class ModifierBlank(ModifierIn): + name: str + modifier_category: Optional[ModifierCategoryLink] + + class Config: + fields = {"id_": "id"} + anystr_strip_whitespace = True + alias_generator = to_camel diff --git a/barker/barker/schemas/modifier_category.py b/barker/barker/schemas/modifier_category.py index a61419b..1de3af9 100644 --- a/barker/barker/schemas/modifier_category.py +++ b/barker/barker/schemas/modifier_category.py @@ -33,6 +33,7 @@ class ModifierCategory(ModifierCategoryIn): class ModifierCategoryLink(BaseModel): id_: uuid.UUID = Field(...) + name: Optional[str] class Config: fields = {"id_": "id"} diff --git a/barker/pyproject.toml b/barker/pyproject.toml index 0040ed8..63cb06f 100644 --- a/barker/pyproject.toml +++ b/barker/pyproject.toml @@ -6,8 +6,8 @@ authors = ["tanshu "] [tool.poetry.dependencies] python = "^3.8" -uvicorn = "^0.12.1" -fastapi = "^0.61.1" +uvicorn = "^0.12.3" +fastapi = "^0.61.2" python-jose = {extras = ["cryptography"], version = "^3.2.0"} passlib = {extras = ["bcrypt"], version = "^1.7.3"} psycopg2-binary = "^2.8.6" @@ -17,15 +17,15 @@ PyJWT = "^1.7.1" alembic = "^1.4.3" itsdangerous = "^1.1.0" python-dotenv = "^0.14.0" -pydantic = {extras = ["dotenv"], version = "^1.6.1"} +pydantic = {extras = ["dotenv"], version = "^1.7.2"} starlette = "^0.13.6" -arq = "^0.19" +arq = "^0.19.1" [tool.poetry.dev-dependencies] flake8 = "^3.8.4" black = "^20.8b1" isort = "^5.6.2" -pre-commit = "^2.7.1" +pre-commit = "^2.9.0" [build-system] requires = ["poetry-core>=1.0.0"] diff --git a/bookie/src/app/core/modifier.ts b/bookie/src/app/core/modifier.ts index b9807fe..fb3bc3d 100644 --- a/bookie/src/app/core/modifier.ts +++ b/bookie/src/app/core/modifier.ts @@ -6,7 +6,7 @@ export class Modifier { name: string; showInBill: boolean; price: number; - modifierCategory: ModifierCategory; + modifierCategory?: ModifierCategory; isActive: boolean; billPrice?: number; @@ -15,7 +15,6 @@ export class Modifier { this.name = ''; this.showInBill = true; this.price = 0; - this.modifierCategory = new ModifierCategory(); this.isActive = true; Object.assign(this, init); } diff --git a/bookie/src/app/modifiers/modifier-detail/modifier-detail.component.ts b/bookie/src/app/modifiers/modifier-detail/modifier-detail.component.ts index dd95168..6c86028 100644 --- a/bookie/src/app/modifiers/modifier-detail/modifier-detail.component.ts +++ b/bookie/src/app/modifiers/modifier-detail/modifier-detail.component.ts @@ -53,7 +53,7 @@ export class ModifierDetailComponent implements OnInit, AfterViewInit { showInBill: this.item.showInBill, price: this.item.price || '', isActive: this.item.isActive, - modifierCategory: this.item.modifierCategory.id ? this.item.modifierCategory.id : '', + modifierCategory: this.item.modifierCategory ? (this.item.modifierCategory.id as string) : '', }); } @@ -108,7 +108,7 @@ export class ModifierDetailComponent implements OnInit, AfterViewInit { this.item.showInBill = formModel.showInBill; this.item.price = +formModel.price; this.item.isActive = formModel.isActive; - this.item.modifierCategory.id = formModel.modifierCategory; + this.item.modifierCategory = new ModifierCategory({ id: formModel.modifierCategory }); return this.item; } } diff --git a/bookie/src/app/modifiers/modifier-list/modifier-list-datasource.ts b/bookie/src/app/modifiers/modifier-list/modifier-list-datasource.ts index e251025..5342a7a 100644 --- a/bookie/src/app/modifiers/modifier-list/modifier-list-datasource.ts +++ b/bookie/src/app/modifiers/modifier-list/modifier-list-datasource.ts @@ -3,6 +3,7 @@ import { merge, Observable } from 'rxjs'; import { map, tap } from 'rxjs/operators'; import { Modifier } from '../../core/modifier'; +import { ModifierCategory } from '../../core/modifier-category'; export class ModifierListDataSource extends DataSource { public data: Modifier[]; @@ -45,7 +46,7 @@ export class ModifierListDataSource extends DataSource { private getFilteredData(data: Modifier[]): Modifier[] { const filter = this.filterValue === undefined ? '' : this.filterValue; return data.filter((x) => { - return x.modifierCategory.id === filter || filter === ''; + return (x.modifierCategory as ModifierCategory).id === filter || filter === ''; }); } } diff --git a/bookie/src/polyfills.ts b/bookie/src/polyfills.ts index 52a7ba1..955e1ce 100644 --- a/bookie/src/polyfills.ts +++ b/bookie/src/polyfills.ts @@ -57,7 +57,6 @@ */ import 'zone.js/dist/zone'; // Included with Angular CLI. - /*************************************************************************************************** * APPLICATION IMPORTS */