Spaces:
Sleeping
Sleeping
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 | |
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") | |
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") | |
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") | |
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") | |
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") | |
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") | |
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") | |