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:
Amritanshu Agrawal 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
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,
)

View File

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

View File

@ -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

View File

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

View File

@ -6,8 +6,8 @@ authors = ["tanshu <git@tanshu.com>"]
[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"]

View File

@ -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);
}

View File

@ -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;
}
}

View File

@ -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<Modifier> {
public data: Modifier[];
@ -45,7 +46,7 @@ export class ModifierListDataSource extends DataSource<Modifier> {
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 === '';
});
}
}

View File

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