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:
parent
d9e0397b21
commit
e16e1822b8
|
@ -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,
|
||||
)
|
||||
|
|
|
@ -33,6 +33,7 @@ class MenuCategory(MenuCategoryIn):
|
|||
|
||||
class MenuCategoryLink(BaseModel):
|
||||
id_: uuid.UUID = Field(...)
|
||||
name: Optional[str]
|
||||
products: Optional[List[ProductLink]]
|
||||
|
||||
class Config:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -33,6 +33,7 @@ class ModifierCategory(ModifierCategoryIn):
|
|||
|
||||
class ModifierCategoryLink(BaseModel):
|
||||
id_: uuid.UUID = Field(...)
|
||||
name: Optional[str]
|
||||
|
||||
class Config:
|
||||
fields = {"id_": "id"}
|
||||
|
|
|
@ -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"]
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 === '';
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -57,7 +57,6 @@
|
|||
*/
|
||||
import 'zone.js/dist/zone'; // Included with Angular CLI.
|
||||
|
||||
|
||||
/***************************************************************************************************
|
||||
* APPLICATION IMPORTS
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue