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:
@ -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,
|
||||||
|
)
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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"}
|
||||||
|
|||||||
@ -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"]
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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 === '';
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user