Spaces:
Running
Running
File size: 4,968 Bytes
35c6a2c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
from typing import List,Optional
from fastapi import APIRouter, Depends, HTTPException
from fastapi.security import OAuth2PasswordBearer
from sqlalchemy.orm import Session
from core.seguridad import verify_token
from cruds.ReservaCrud import *
from cruds.UsuarioCrud import get_user_by_id
import pytz
from db.session import get_session
from schemas.ReservaSh import *
from schemas.UsuarioSh import UserRead
# Obtener la zona horaria de Colombia
colombia_tz = pytz.timezone('America/Bogota')
router = APIRouter()
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/users/login")
BARBERO = "BARBERO"
async def get_current_user(token:str = Depends(oauth2_scheme), db:Session = Depends(get_session)):
user_id = await verify_token(token)
if user_id is None:
raise HTTPException(status_code=481,detail="Invalid token")
user_db = get_user_by_id(user_id, db)
if user_db is None:
raise HTTPException(status_code=484,detail="User not found")
return user_db
@router.post("/create-reserve",response_model=ReserveRead)
async def create_reserve(reserve:ReserveCreate,db:Session = Depends(get_session),current_user:UserRead = Depends(get_current_user)):
if current_user.estado_usuario:
if current_user.rol == BARBERO:
fecha_actual_colombia = datetime.now(colombia_tz)
return create_new_reserve(reserve,current_user.id_usuario,fecha_actual_colombia,db)
else:
raise HTTPException(status_code=401, detail="Not authorized")
else:
raise HTTPException(status_code=403, detail="El estado del usuario es inactivo /create-reserve")
@router.post("/update-reserve", response_model=ReserveRead)
def reserve_update(reserve: ReserveUpdate, db: Session = Depends(get_session), current_user: UserRead = Depends(get_current_user)):
if current_user.estado_usuario and current_user.rol == BARBERO:
updated_reserve = update_reserve(reserve, current_user.id_usuario, db)
if updated_reserve is None:
raise HTTPException(status_code=404, detail="reserve not found or reserva is not at 0")
return updated_reserve
else:
raise HTTPException(status_code=401, detail="Not authorized")
@router.post("/update-reserve-tarifa", response_model=ReserveRead)
def reserve_update_tarifa(reserve: ReserveUpdateTarifa, db: Session = Depends(get_session), current_user: UserRead = Depends(get_current_user)):
if current_user.estado_usuario and current_user.rol == BARBERO:
updated_reserve_tarifa = update_reserve_tarifa(reserve, current_user.id_usuario, db)
if updated_reserve_tarifa is None:
raise HTTPException(status_code=404, detail="reserve tarifa not found")
return updated_reserve_tarifa
else:
raise HTTPException(status_code=401, detail="Not authorized")
@router.post("/delete-reserve",response_model=ReserveRead)
async def update_status(reserve:ReserveUpdateStatus,db:Session = Depends(get_session),current_user:UserRead = Depends(get_current_user)):
if current_user.estado_usuario:
if current_user.rol == BARBERO:
return update_status_reserve(reserve,db,current_user.id_usuario)
raise HTTPException(status_code=401, detail="Not authorized")
raise HTTPException(status_code=403, detail="El estado del usuario es inactivo /update-reserve")
@router.get("/get-reserve-pendiente",response_model=List[ReserveRead])
async def get_reserve_pendiente(db:Session = Depends(get_session),current_user:UserRead = Depends(get_current_user)):
if current_user.estado_usuario:
if current_user.rol == BARBERO:
return get_reserve_false(current_user.id_usuario,db)
raise HTTPException(status_code=401, detail="Not authorized")
raise HTTPException(status_code=403, detail="El estado del usuario es inactivo /get_reserve_pendiente")
@router.get("/get-reserve-all",response_model=List[ReserveRead])
async def get_all(fecha_inicio : Optional[str] = None,fecha_fin : Optional[str] = None,db:Session = Depends(get_session),current_user:UserRead = Depends(get_current_user)):
if current_user.estado_usuario:
if current_user.rol == BARBERO:
return get_reserve_all(current_user.id_usuario,db,fecha_inicio,fecha_fin)
raise HTTPException(status_code=401, detail="Not authorized")
raise HTTPException(status_code=403, detail="El estado del usuario es inactivo /get_reserve_all")
@router.get("/get-reservations-available")
async def reservations_available(fecha:Optional[str] = None,db:Session = Depends(get_session),current_user:UserRead = Depends(get_current_user)):
if current_user.estado_usuario:
if current_user.rol == BARBERO:
return get_reservations_available(current_user.id_usuario,db,fecha)
raise HTTPException(status_code=401, detail="Not authorized")
raise HTTPException(status_code=403, detail="El estado del usuario es inactivo /get-reservations-available")
|