barker/barker/barker/routers/customer.py

117 lines
3.2 KiB
Python
Raw Normal View History

import uuid
2020-09-22 02:29:14 +00:00
from typing import Optional
2020-09-22 02:29:14 +00:00
from fastapi import APIRouter, HTTPException, status, Depends, Security
from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.orm import Session
2020-09-22 02:29:14 +00:00
from ..schemas.auth import UserToken
import barker.schemas.master as schemas
from ..core.security import get_current_active_user as get_user
from ..db.session import SessionLocal
from ..models.master import Customer
2020-09-22 02:29:14 +00:00
router = APIRouter()
2020-09-22 02:29:14 +00:00
# Dependency
def get_db():
try:
db = SessionLocal()
yield db
finally:
db.close()
2020-09-22 02:29:14 +00:00
@router.post("", response_model=schemas.Customer)
def save(
data: schemas.CustomerIn, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["customers"]),
):
try:
item = Customer(company=data.company, name=data.name, phone=data.phone, address=data.address)
db.add(item)
db.commit()
return customer_info(item)
except SQLAlchemyError as e:
db.rollback()
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e),
)
except Exception:
db.rollback()
raise
2020-09-22 02:29:14 +00:00
@router.put("/{id_}", response_model=schemas.Customer)
def update(
id_: uuid.UUID,
data: schemas.CustomerIn,
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["customers"]),
):
try:
item: Customer = db.query(Customer).filter(Customer.id == id_).first()
item.company = data.company
item.name = data.name
item.phone = data.phone
item.address = data.address
db.commit()
return customer_info(item)
except SQLAlchemyError as e:
db.rollback()
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e),
)
except Exception:
db.rollback()
raise
2020-09-22 02:29:14 +00:00
@router.delete("/{id_}")
def delete(
id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["customers"]),
):
try:
item: Customer = db.query(Customer).filter(Customer.id == id_).first()
if item is None:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND, detail="Sale Category not found",
)
db.delete(item)
db.commit()
except Exception:
db.rollback()
raise
2020-09-22 02:29:14 +00:00
@router.get("")
def show_blank(
db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["customers"]),
):
return customer_info(None)
@router.get("/list")
def show_list(db: Session = Depends(get_db), user: UserToken = Depends(get_user)):
return [customer_info(item) for item in db.query(Customer).order_by(Customer.name).all()]
@router.get("/{id_}")
def show_id(
id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["customers"]),
):
item: Customer = db.query(Customer).filter(Customer.id == id_).first()
return customer_info(item)
2020-09-22 02:29:14 +00:00
def customer_info(item: Optional[Customer]):
if item is None:
return {"name": "", "company": "", "address": "", "phone": ""}
return {
"id": item.id,
"company": item.company,
"name": item.name,
"address": item.address,
"phone": item.phone,
}