Commit 3aea41e9 by Javier

Se modifica Obtención de Cuenta, redirección SIP

parent cdff72d6
from fastapi import Body, Depends, FastAPI, HTTPException, Query, Response, Request from fastapi import Body, Depends, FastAPI, HTTPException, Query, Response, Request
from fastapi.responses import JSONResponse from fastapi.responses import JSONResponse
from typing import Optional, Tuple
from pydantic import BaseModel
import mbilling.models as models import mbilling.models as models
import mbilling.connector as mbc import mbilling.connector as mbc
import mbilling.exceptions as mbe import mbilling.exceptions as mbe
...@@ -48,19 +46,25 @@ def magnus_error_handler(request: Request, ex: MagnusCommandError): ...@@ -48,19 +46,25 @@ def magnus_error_handler(request: Request, ex: MagnusCommandError):
) )
@app.get('/account/{account_name}', response_model=models.User, name="Obtener Cuenta", description="Obtiene la información de una Cuenta de Facturación", @app.get('/v2/account/{account_name}', response_model=models.User, name="get_account",
tags=['Account']) description="Obtiene la información de una Cuenta de Facturación", tags=['Account'])
def get_account(account_name: str = Query(..., regex=r'[89][1-9]\d{7}', name='Número', description='Cuenta SIP a recargar')): def get_account(account_name: str = Query(..., regex=r'[89][1-9]\d{7}', name='Número', description='Cuenta SIP a recargar')):
user = mbc.get_user(account_name) user = mbc.find_user_account(account_name)
if not user: if not user:
raise HTTPException( raise HTTPException(
status_code=404, detail="No existe ningún usuario que contenga el número.") status_code=404, detail="No existe ningún usuario que contenga el número.")
elif user.username != account_name:
raise HTTPException(
status_code=302, detail=app.url_path_for('get_account', account_name=user.username)
)
else: else:
return user sip = [app.url_path_for('Obtiene una Cuenta SIP', caller_id=sip.name)
for sip in mbc.get_sip_accounts_by_user(user)]
return models.User.generate_from_automap(user, sip)
@app.post('/account', response_model=models.User, name="Crea una Cuenta de Facturación", @app.post('/v2/account', response_model=models.User, name="Crea una Cuenta de Facturación",
description="Agrega una nueva Cuenta de Facturación y las cuentas SIP al sistema.", tags=['Account'], description="Agrega una nueva Cuenta de Facturación y las cuentas SIP al sistema.", tags=['Account'],
status_code=201) status_code=201)
def add_account(user_data: models.CreateUser): def add_account(user_data: models.CreateUser):
...@@ -78,7 +82,7 @@ def add_account(user_data: models.CreateUser): ...@@ -78,7 +82,7 @@ def add_account(user_data: models.CreateUser):
status_code=409, detail='Existe una cuenta SIP con esta numeración asignada a otro usuario.') status_code=409, detail='Existe una cuenta SIP con esta numeración asignada a otro usuario.')
@app.put('/account/{account_name}', response_model=models.User, name="Modificar Cuenta", description="Modifica la información de una Cuenta de Facturación", @app.put('/v2/account/{account_name}', response_model=models.User, name="Modificar Cuenta", description="Modifica la información de una Cuenta de Facturación",
tags=['Account'], status_code=200) tags=['Account'], status_code=200)
def modify_account(account_name: str, user_data: models.CreateUser): def modify_account(account_name: str, user_data: models.CreateUser):
...@@ -89,16 +93,48 @@ def modify_account(account_name: str, user_data: models.CreateUser): ...@@ -89,16 +93,48 @@ def modify_account(account_name: str, user_data: models.CreateUser):
status_code=404, detail='No existe ningún usuario con esa numeración.') status_code=404, detail='No existe ningún usuario con esa numeración.')
@app.post('/account/{account_name}/sip', response_model=models.SipAccount, name="Generar cuenta SIP", description="Agrega una nueva cuenta SIP al sistema", @app.post('/v2/account/{account_name}/sip', response_model=models.SipAccount, name="Generar cuenta SIP", description="Agrega una nueva cuenta SIP al sistema",
tags=["SIP"], status_code=201) tags=["Account"], status_code=201)
def add_sip(sip: models.CreateSipAccount, account_name: str = Query(..., regex=models.PHONE_REGEX, name='Número', description='Cuenta SIP a recargar'),): def add_account_sip(sip: models.CreateSipAccount, account_name: str = Query(..., regex=models.PHONE_REGEX, name='Número', description='Cuenta SIP a recargar'),):
try:
return mbc.create_sip(account_name, sip)
except mbe.UserNotFound as e:
raise HTTPException(status_code=404, detail=str(e))
except mbe.SipRegisteredError as e:
raise HTTPException(status_code=409, detail=str(e))
@app.get('/v2/account/{account_name}/balance')
def get_account_balance(account_name : str, last_movements : int = 10):
pass
@app.get('/v2/account/{account_name}/sip', response_model=list[models.SipAccount], name="Obtener Cuentas SIP",
description="Devuelve todas la cuentas SIP asignadas a la cuenta de Facturación", tags=["Account"], status_code=200)
def get_account_sip(account_name: str = Query(..., regex=models.PHONE_REGEX, name='Número', description='Cuenta SIP a recargar')):
if not mbc.find_user_account(sip.cid): user = mbc.find_user_account(account_name)
try: if user:
mbc.create_sip(account_name, sip) return [models.SipAccount.generate_from_automap(sip, user.username) for sip in mbc.get_sip_accounts_by_user(user)]
except mbe.UserNotFound:
raise HTTPException(
status_code=404, detail='No existe ningún usuario con el número de cuenta indicado.')
else: else:
raise HTTPException( raise HTTPException(
status_code=409, detail='La cuenta SIP ya está asignada a otro usuario.') status_code=404, detail='No existe ningún usuario con esa numeración.')
@app.get('/v2/sip/{caller_id}', response_model=models.SipAccount, name="Obtiene una Cuenta SIP", description="Devuelve los datos de conexión de la cuenta.",
tags=["SIP"], status_code=200)
def add_account_sip(caller_id: str = Query(..., regex=models.PHONE_REGEX, name='Número', description='Cuenta SIP a consultar'),):
try:
sip, user = mbc.get_sip_account(caller_id)
return models.SipAccount.generate_from_automap(
sip, user.username
)
except mbe.UserNotFound as e:
raise HTTPException(status_code=404, detail=str(e))
except mbe.SipNotFound as e:
raise HTTPException(status_code=404, detail=str(e))
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment