async def make_transaction( transaction_in: TransactionIn): #entra modelo transaccion user_in_db = get_user(transaction_in.username) #valida usuario if user_in_db == None: raise HTTPException(status_code=404, detail="El usuario no existe") if user_in_db.balance < transaction_in.value: #valida el saldo con lo que se retirara raise HTTPException(status_code=400, detail="Sin fondos suficientes") # ya todo validado user_in_db.balance = user_in_db.balance - transaction_in.value #resta la transaccion del saldo update_user(user_in_db) #actualiza la base de datos #creamos el un objeto trnasaccionIN con el mapeo de la transaccion transaction_in_db = TransactionInDB( **transaction_in.dict(), actual_balance=user_in_db.balance ) #guarda el balance del usuario en ese momento como un atributo suyo transaction_in_db = save_transaction( transaction_in_db) #guarda esa transaccionIN transaction_out = TransactionOut( **transaction_in_db.dict()) #crea la TransaccionOUT con su mapeo return transaction_out #retorna el modelo de transaccion OUT
async def make_transaction(transaction_in: TransactionIn): user_in_db = get_user(transaction_in.username) if user_in_db == None: raise HTTPException(status_code=404, detail="El usuario no existe") if user_in_db.balance < transaction_in.value: raise HTTPException(status_code=400, detail="Sin fondos suficientes") user_in_db.balance = user_in_db.balance - transaction_in.value update_user(user_in_db) transaction_in_db = TransactionInDB(**transaction_in.dict(), actual_balance = user_in_db.balance) transaction_in_db = save_transaction(transaction_in_db) transaction_out = TransactionOut(**transaction_in_db.dict()) return transaction_out
async def make_transaction(transaction_in: TransactionIn): user_in_db = get_user(transaction_in.username) if user_in_db == None: raise HTTPException(status_code=404, detail="El usuario no existe") user_in_db.balance = user_in_db.balance + transaction_in.income user_in_db.balance = user_in_db.balance - transaction_in.expense update_user(user_in_db) transaction_in_db = TransactionInDB(**transaction_in.dict(), actual_balance = user_in_db.balance) transaction_in_db = save_transaction(transaction_in_db) transaction_out = TransactionOut(**transaction_in_db.dict()) return transaction_out
async def make_transaction(transaction_in: TransactionIn, db: Session = Depends(get_db)): validate_transaction(transaction_in) user_in_db = db.query(UserInDB).get(transaction_in.username) if user_in_db == None: raise HTTPException(status_code=404, detail="El usuario no existe") if user_in_db.balance < transaction_in.value: raise HTTPException(status_code=400, detail="No se tienen los fondos suficientes") user_in_db.balance = user_in_db.balance - transaction_in.value db.commit() db.refresh(user_in_db) transaction_in_db = TransactionInDB(**transaction_in.dict(), actual_balance=user_in_db.balance) db.add(transaction_in_db) db.commit() db.refresh(transaction_in_db) return transaction_in_db
async def make_transaction(transaction_in: TransactionIn, session: Session = Depends(get_db)): user_in_db = session.query(UserInDB).get(transaction_in.username) if user_in_db == None: raise HTTPException(status_code=404, detail="El usuario no existe") if user_in_db.balance < transaction_in.value: raise HTTPException(status_code=400, detail="No se tienen los fondos suficientes") user_in_db.balance = user_in_db.balance - transaction_in.value # Vamos a actualizar en la db session.commit() # Actualiza la sesión que tenemos creada session.refresh(user_in_db) transaction_in_db = TransactionInDB(**transaction_in.dict(), actual_balance = user_in_db.balance) # Como queremos agregar un nuevo valor a la bd, # debemos insertarle el elemento a nuestra sesión session.add(transaction_in_db) session.commit() session.refresh(transaction_in_db) return transaction_in_db
async def make_transaction(transaction_in: TransactionIn): user_in_db = get_user(transaction_in.ID_empleado) if user_in_db != None: raise HTTPException(status_code=404, detail="El usuario ya existe") #update_user(user_in_db) transaction_in_db = TransactionInDB(**transaction_in.dict()) transaction_in_db = save_transaction(transaction_in_db) transaction_out = TransactionOut(**transaction_in_db.dict()) return transaction_out
async def make_transaction(transaction_in: TransactionIn):#Recibe un usuario y valor a retirar user_in_db = get_user(transaction_in.username)#Verifica si el usuario existe if user_in_db == None: raise HTTPException(status_code=404, detail="El usuario no existe") if user_in_db.balance < transaction_in.value: raise HTTPException(status_code=400, detail="Sin fondos suficientes") user_in_db.balance = user_in_db.balance - transaction_in.value #Resta el balance actual con el valor que retiro update_user(user_in_db) #Actualiza el usuario transaction_in_db = TransactionInDB( **transaction_in.dict(), actual_balance=user_in_db.balance) transaction_in_db = save_transaction(transaction_in_db) #Guarda la transaccion transaction_out = TransactionOut(**transaction_in_db.dict()) #Pasa la transaccion para retornarla al usuario return transaction_out
async def make_transaction(transaction_in: TransactionIn): user_in_db = get_user(transaction_in) if user_in_db == None: #Puede entenderse como un tipo de return raise HTTPException( status_code=404, detail="El usuario no existe") #para cuando existe el error #(no se ejecutan las acciones siguientes) if user_in_db.balance < transaction_in.value: ##Esta también(las que contienen rise) raise HTTPException(status_code=400, detail="Sin fondos suficientes") user_in_db.balance -= transaction_in.value update_user(user_in_db) transaction_in_db = TransactionInDB( **transaction_in.dict(), actual_balance=user_in_db.balance ) # "**" sirve para mapear en el objeto transaction_out = TransactionOut(**transaction_in_db.dict()) return transaction_out
async def make_transaction(transaction_in: TransactionIn): hotel_in_db = get_hotel(transaction_in.nombre) if hotel_in_db == None: raise HTTPException(status_code=404, detail="El hotel no existe") if hotel_in_db.totalHabitaciones < transaction_in.totalHabitaciones: raise HTTPException(status_code=400, detail=" ") hotel_in_db.totalHabitaciones = hotel_in_db.totalHabitaciones - transaction_in.reserva update_hotel(hotel_in_db) transaction_in_db = TransactionInDB(**transaction_in.dict(), totalHabs = hotel_in_db.totalHabitaciones) transaction_in_db = save_transaction(transaction_in_db) transaction_out = TransactionOut(**transaction_in_db.dict()) return transaction_out
async def make_transaction(transaction_in: TransactionIn): user_in_db = get_user(transaction_in.nombre) if user_in_db == None: raise HTTPException(status_code=404, detail="El hotel no existe") if user_in_db.totalHabitaciones < transaction_in.totalHabitaciones: raise HTTPException(status_code=400, detail="No se tienen los fondos suficientes") user_in_db.totalHabitaciones = user_in_db.totalHabitaciones - transaction_in.reserva update_user(user_in_db) transaction_in_db = TransactionInDB(**transaction_in.dict(), totalHabs=user_in_db.totalHabitaciones) transaction_in_db = save_transaction(transaction_in_db) transaction_out = TransactionOut(**transaction_in_db.dict()) return transaction_out
def save_transaction(transaction_in_db: TransactionInDB): generator["id"] = generator["id"] + 1 transaction_in_db.id_transaction = generator["id"] database_transactions.append(transaction_in_db) return transaction_in_db
return {"Autenticado": True} @api.get("/user/balance/{username}") async def get_balance(username: str): user_in_db = get_user(username) if user_in_db == None: raise HTTPException(status_code=404, detail="El usuario no existe") user_out = UserOut(**user_in_db.dict()) return user_out @api.put("/user/transaction/") async def make_transaction(transaction_in: TransactionIn): user_in_db = get_user(transaction_in.username) if user_in_db == None: raise HTTPException(status_code=404, detail="El usuario no existe") user_in_db.balance = user_in_db.balance + transaction_in.income user_in_db.balance = user_in_db.balance - transaction_in.expense update_user(user_in_db) transaction_in_db = TransactionInDB(**transaction_in.dict(), actual_balance = user_in_db.balance) transaction_in_db = save_transaction(transaction_in_db) transaction_out = TransactionOut(**transaction_in_db.dict()) return transaction_out