From e16e1822b8764c4fab9889ec2d3a869de60f12d5 Mon Sep 17 00:00:00 2001 From: tanshu Date: Wed, 25 Nov 2020 12:38:22 +0530 Subject: [PATCH] Fix: Modifier Categories was not showing the names of Menu Categories in Modifier Category Detail Component. This was because the Menu Category Link had only the id field. Took this time to improve the Modifier route. --- barker/barker/routers/modifier.py | 69 ++++++++++--------- barker/barker/schemas/menu_category.py | 1 + barker/barker/schemas/modifier.py | 10 +++ barker/barker/schemas/modifier_category.py | 1 + barker/pyproject.toml | 10 +-- bookie/src/app/core/modifier.ts | 3 +- .../modifier-detail.component.ts | 4 +- .../modifier-list/modifier-list-datasource.ts | 3 +- bookie/src/polyfills.ts | 1 - 9 files changed, 57 insertions(+), 45 deletions(-) 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 */