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")