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.
This commit is contained in:
2020-11-25 12:38:22 +05:30
parent d9e0397b21
commit e16e1822b8
9 changed files with 57 additions and 45 deletions

View File

@ -1,8 +1,8 @@
import uuid 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 fastapi import APIRouter, Depends, HTTPException, Security, status
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError
@ -31,7 +31,7 @@ def save(
data: schemas.ModifierIn, data: schemas.ModifierIn,
db: Session = Depends(get_db), db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["modifiers"]), user: UserToken = Security(get_user, scopes=["modifiers"]),
): ) -> schemas.Modifier:
try: try:
item = Modifier( item = Modifier(
name=data.name, name=data.name,
@ -60,7 +60,7 @@ def update(
data: schemas.ModifierIn, data: schemas.ModifierIn,
db: Session = Depends(get_db), db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["modifiers"]), user: UserToken = Security(get_user, scopes=["modifiers"]),
): ) -> schemas.Modifier:
try: try:
item: Modifier = db.query(Modifier).filter(Modifier.id == id_).first() item: Modifier = db.query(Modifier).filter(Modifier.id == id_).first()
item.name = data.name item.name = data.name
@ -81,17 +81,17 @@ def update(
raise raise
@router.delete("/{id_}") @router.delete("/{id_}", response_model=schemas.ModifierBlank)
def delete( def delete(
id_: uuid.UUID, id_: uuid.UUID,
db: Session = Depends(get_db), db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["modifiers"]), user: UserToken = Security(get_user, scopes=["modifiers"]),
): ) -> schemas.ModifierBlank:
try: try:
item: Modifier = db.query(Modifier).filter(Modifier.id == id_).first() item: Modifier = db.query(Modifier).filter(Modifier.id == id_).first()
db.delete(item) db.delete(item)
db.commit() db.commit()
return modifier_info(item) return modifier_blank()
except SQLAlchemyError as e: except SQLAlchemyError as e:
db.rollback() db.rollback()
raise HTTPException( raise HTTPException(
@ -103,46 +103,47 @@ def delete(
raise raise
@router.get("") @router.get("", response_model=schemas.ModifierBlank)
def show_blank( def show_blank(
db: Session = Depends(get_db), db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["modifiers"]), user: UserToken = Security(get_user, scopes=["modifiers"]),
): ) -> schemas.ModifierBlank:
return modifier_info(None) return modifier_blank()
@router.get("/list") @router.get("/list", response_model=List[schemas.Modifier])
def show_list(db: Session = Depends(get_db), user: UserToken = Depends(get_user)): 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()] 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( def show_id(
id_: uuid.UUID, id_: uuid.UUID,
db: Session = Depends(get_db), db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["modifiers"]), user: UserToken = Security(get_user, scopes=["modifiers"]),
): ) -> schemas.Modifier:
item: Modifier = db.query(Modifier).filter(Modifier.id == id_).first() item: Modifier = db.query(Modifier).filter(Modifier.id == id_).first()
return modifier_info(item) return modifier_info(item)
def modifier_info(item: Optional[Modifier]): def modifier_info(item: Modifier) -> schemas.Modifier:
if item is None: return schemas.Modifier(
return { id=item.id,
"name": "", name=item.name,
"showInBill": False, showInBill=item.show_in_bill,
"price": 0, price=item.price,
"isActive": True, isActive=item.is_active,
"modifierCategory": {}, modifierCategory=schemas.ModifierCategoryLink(
} id=item.modifier_category.id,
return { name=item.modifier_category.name,
"id": item.id, ),
"name": item.name, )
"showInBill": item.show_in_bill,
"price": item.price,
"isActive": item.is_active, def modifier_blank() -> schemas.ModifierBlank:
"modifierCategory": { return schemas.ModifierBlank(
"id": item.modifier_category.id, name="",
"name": item.modifier_category.name, showInBill=False,
}, price=0,
} isActive=True,
)

View File

@ -33,6 +33,7 @@ class MenuCategory(MenuCategoryIn):
class MenuCategoryLink(BaseModel): class MenuCategoryLink(BaseModel):
id_: uuid.UUID = Field(...) id_: uuid.UUID = Field(...)
name: Optional[str]
products: Optional[List[ProductLink]] products: Optional[List[ProductLink]]
class Config: class Config:

View File

@ -32,3 +32,13 @@ class ModifierLink(BaseModel):
class Config: class Config:
fields = {"id_": "id"} 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

View File

@ -33,6 +33,7 @@ class ModifierCategory(ModifierCategoryIn):
class ModifierCategoryLink(BaseModel): class ModifierCategoryLink(BaseModel):
id_: uuid.UUID = Field(...) id_: uuid.UUID = Field(...)
name: Optional[str]
class Config: class Config:
fields = {"id_": "id"} fields = {"id_": "id"}

View File

@ -6,8 +6,8 @@ authors = ["tanshu <git@tanshu.com>"]
[tool.poetry.dependencies] [tool.poetry.dependencies]
python = "^3.8" python = "^3.8"
uvicorn = "^0.12.1" uvicorn = "^0.12.3"
fastapi = "^0.61.1" fastapi = "^0.61.2"
python-jose = {extras = ["cryptography"], version = "^3.2.0"} python-jose = {extras = ["cryptography"], version = "^3.2.0"}
passlib = {extras = ["bcrypt"], version = "^1.7.3"} passlib = {extras = ["bcrypt"], version = "^1.7.3"}
psycopg2-binary = "^2.8.6" psycopg2-binary = "^2.8.6"
@ -17,15 +17,15 @@ PyJWT = "^1.7.1"
alembic = "^1.4.3" alembic = "^1.4.3"
itsdangerous = "^1.1.0" itsdangerous = "^1.1.0"
python-dotenv = "^0.14.0" python-dotenv = "^0.14.0"
pydantic = {extras = ["dotenv"], version = "^1.6.1"} pydantic = {extras = ["dotenv"], version = "^1.7.2"}
starlette = "^0.13.6" starlette = "^0.13.6"
arq = "^0.19" arq = "^0.19.1"
[tool.poetry.dev-dependencies] [tool.poetry.dev-dependencies]
flake8 = "^3.8.4" flake8 = "^3.8.4"
black = "^20.8b1" black = "^20.8b1"
isort = "^5.6.2" isort = "^5.6.2"
pre-commit = "^2.7.1" pre-commit = "^2.9.0"
[build-system] [build-system]
requires = ["poetry-core>=1.0.0"] requires = ["poetry-core>=1.0.0"]

View File

@ -6,7 +6,7 @@ export class Modifier {
name: string; name: string;
showInBill: boolean; showInBill: boolean;
price: number; price: number;
modifierCategory: ModifierCategory; modifierCategory?: ModifierCategory;
isActive: boolean; isActive: boolean;
billPrice?: number; billPrice?: number;
@ -15,7 +15,6 @@ export class Modifier {
this.name = ''; this.name = '';
this.showInBill = true; this.showInBill = true;
this.price = 0; this.price = 0;
this.modifierCategory = new ModifierCategory();
this.isActive = true; this.isActive = true;
Object.assign(this, init); Object.assign(this, init);
} }

View File

@ -53,7 +53,7 @@ export class ModifierDetailComponent implements OnInit, AfterViewInit {
showInBill: this.item.showInBill, showInBill: this.item.showInBill,
price: this.item.price || '', price: this.item.price || '',
isActive: this.item.isActive, 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.showInBill = formModel.showInBill;
this.item.price = +formModel.price; this.item.price = +formModel.price;
this.item.isActive = formModel.isActive; this.item.isActive = formModel.isActive;
this.item.modifierCategory.id = formModel.modifierCategory; this.item.modifierCategory = new ModifierCategory({ id: formModel.modifierCategory });
return this.item; return this.item;
} }
} }

View File

@ -3,6 +3,7 @@ import { merge, Observable } from 'rxjs';
import { map, tap } from 'rxjs/operators'; import { map, tap } from 'rxjs/operators';
import { Modifier } from '../../core/modifier'; import { Modifier } from '../../core/modifier';
import { ModifierCategory } from '../../core/modifier-category';
export class ModifierListDataSource extends DataSource<Modifier> { export class ModifierListDataSource extends DataSource<Modifier> {
public data: Modifier[]; public data: Modifier[];
@ -45,7 +46,7 @@ export class ModifierListDataSource extends DataSource<Modifier> {
private getFilteredData(data: Modifier[]): Modifier[] { private getFilteredData(data: Modifier[]): Modifier[] {
const filter = this.filterValue === undefined ? '' : this.filterValue; const filter = this.filterValue === undefined ? '' : this.filterValue;
return data.filter((x) => { return data.filter((x) => {
return x.modifierCategory.id === filter || filter === ''; return (x.modifierCategory as ModifierCategory).id === filter || filter === '';
}); });
} }
} }

View File

@ -57,7 +57,6 @@
*/ */
import 'zone.js/dist/zone'; // Included with Angular CLI. import 'zone.js/dist/zone'; // Included with Angular CLI.
/*************************************************************************************************** /***************************************************************************************************
* APPLICATION IMPORTS * APPLICATION IMPORTS
*/ */