63 lines
2.1 KiB
Python
63 lines
2.1 KiB
Python
from fastapi import APIRouter, HTTPException, status, Depends
|
|
from sqlalchemy.orm import Session
|
|
from typing import List
|
|
from app.schemas import Address as AddressSchema, AddressCreate, AddressUpdate
|
|
from app.models import Address as AddressModel
|
|
from app.dependencies import get_db
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/", response_model=List[AddressSchema])
|
|
async def get_return_addresses(db: Session = Depends(get_db)):
|
|
return db.query(AddressModel).all()
|
|
|
|
|
|
@router.post("/", response_model=AddressSchema, status_code=status.HTTP_201_CREATED)
|
|
async def create_return_address(address: AddressCreate, db: Session = Depends(get_db)):
|
|
if db.query(AddressModel).filter(AddressModel.city == address.city).first():
|
|
raise HTTPException(
|
|
status_code=status.HTTP_400_BAD_REQUEST,
|
|
detail="Address in this city already exists.",
|
|
)
|
|
|
|
db_address = AddressModel(
|
|
street=address.street,
|
|
city=address.city,
|
|
zipcode=address.zipcode,
|
|
country=address.country,
|
|
)
|
|
|
|
db.add(db_address)
|
|
db.commit()
|
|
db.refresh(db_address)
|
|
return db_address
|
|
|
|
|
|
@router.put("/{address_id}", response_model=AddressSchema)
|
|
async def update_return_address(
|
|
address_id: int, address: AddressUpdate, db: Session = Depends(get_db)
|
|
):
|
|
db_address = db.query(AddressModel).filter(AddressModel.id == address_id).first()
|
|
if not db_address:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_404_NOT_FOUND, detail="Address not found."
|
|
)
|
|
for key, value in address.dict(exclude_unset=True).items():
|
|
setattr(db_address, key, value)
|
|
db.commit()
|
|
db.refresh(db_address)
|
|
return db_address
|
|
|
|
|
|
@router.delete("/{address_id}", status_code=status.HTTP_204_NO_CONTENT)
|
|
async def delete_return_address(address_id: int, db: Session = Depends(get_db)):
|
|
db_address = db.query(AddressModel).filter(AddressModel.id == address_id).first()
|
|
if not db_address:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_404_NOT_FOUND, detail="Address not found."
|
|
)
|
|
db.delete(db_address)
|
|
db.commit()
|
|
return
|