Initial commit

This commit is contained in:
marianesaldana
2026-05-23 08:59:34 -06:00
commit 80dbd947e5
36446 changed files with 3729147 additions and 0 deletions

View File

@@ -0,0 +1,74 @@
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from ..database import get_db
from ..models.address import Address
from ..schemas.address import AddressCreate, AddressUpdate, AddressOut
from ..services import eta_service
from .deps import get_current_user
router = APIRouter(prefix="/addresses", tags=["addresses"])
@router.get("/", response_model=list[AddressOut])
def list_addresses(db: Session = Depends(get_db), user=Depends(get_current_user)):
return db.query(Address).filter(Address.user_id == user.id).all()
@router.post("/", response_model=AddressOut, status_code=201)
def create_address(data: AddressCreate, db: Session = Depends(get_db), user=Depends(get_current_user)):
# Assign the closest route based on coordinates
route_id = None
if data.lat and data.lng:
route_id = eta_service.assign_route(data.lat, data.lng)
# If this is default, unset others
if data.is_default:
db.query(Address).filter(Address.user_id == user.id).update({"is_default": False})
# First address is automatically default
existing_count = db.query(Address).filter(Address.user_id == user.id).count()
is_default = data.is_default or existing_count == 0
address = Address(
user_id=user.id,
label=data.label,
street=data.street,
colony=data.colony,
city=data.city,
lat=data.lat,
lng=data.lng,
route_id=route_id,
is_default=is_default,
)
db.add(address)
db.commit()
db.refresh(address)
return address
@router.patch("/{address_id}", response_model=AddressOut)
def update_address(address_id: int, data: AddressUpdate, db: Session = Depends(get_db), user=Depends(get_current_user)):
address = db.query(Address).filter(Address.id == address_id, Address.user_id == user.id).first()
if not address:
raise HTTPException(status_code=404, detail="Domicilio no encontrado")
if data.label is not None:
address.label = data.label
if data.street is not None:
address.street = data.street
if data.colony is not None:
address.colony = data.colony
if data.is_default is True:
db.query(Address).filter(Address.user_id == user.id).update({"is_default": False})
address.is_default = True
db.commit()
db.refresh(address)
return address
@router.delete("/{address_id}", status_code=204)
def delete_address(address_id: int, db: Session = Depends(get_db), user=Depends(get_current_user)):
address = db.query(Address).filter(Address.id == address_id, Address.user_id == user.id).first()
if not address:
raise HTTPException(status_code=404, detail="Domicilio no encontrado")
db.delete(address)
db.commit()