import json
from flask import request
from flask_login import login_required
from flask_restplus import Resource, fields
from legislei.app import current_user, rest_api_v1
from legislei.controllers.dto import subscription_dto
from legislei.exceptions import InvalidModelId
from legislei.house_selector import check_if_house_exists
from legislei.services.inscricoes import Inscricao
_new_subscription_dto = rest_api_v1.model('AssemblymanId', {
'casa': fields.String(description="Id de casa legislativa", required=True),
'parlamentar': fields.String(description="Id de parlamentar", required=True)
})
_subscription_config = rest_api_v1.model('SubscriptionConfig', {
'intervalo': fields.Integer(
description="Intervalo em dias de atualização dos relatórios da inscrição (valores válidos: 7, 14, 21 e 28)",
required=True
)
})
[documentos]@rest_api_v1.route("/usuarios/inscricoes")
class SubscriptionList(Resource):
[documentos] @login_required
@rest_api_v1.doc(
description="Retorna todas as inscrições do usuário",
security='apikey',
responses={
200: 'Sucesso',
401: 'Sem autorização'
}
)
@rest_api_v1.marshal_with(subscription_dto)
def get(self):
parlamentares, intervalo = Inscricao().obter_minhas_inscricoes(current_user.email)
parlamentares_dicts = [json.loads(x.to_json()) for x in parlamentares]
return {'intervalo': intervalo, 'parlamentares': parlamentares_dicts}
[documentos] @login_required
@rest_api_v1.doc(
description="Cria uma nova inscrição de atividades parlamentares",
security='apikey',
responses={
201: 'Criada',
401: 'Sem autorização',
400: 'Parâmetros inválidos ou incompletos'
}
)
@rest_api_v1.expect(_new_subscription_dto, validate=True)
def post(self):
try:
Inscricao().nova_inscricao(
request.json['casa'],
request.json['parlamentar'],
current_user.email
)
return {'message': 'Criada'}, 201
except InvalidModelId:
return {'message': 'Id de casa legislativa inválido'}, 400
[documentos] @login_required
@rest_api_v1.doc(
description="Atualiza as configurações de inscrições do usuário",
security="apikey",
responses={
200: 'Sucesso',
400: 'Parâmetros inválidos ou incompletos',
401: 'Sem autorização'
}
)
@rest_api_v1.expect(_subscription_config, validate=True)
def put(self):
Inscricao().alterar_configs(request.json["intervalo"], current_user.email)
return {'message': 'Configurações de inscrições atualizadas'}
[documentos]@rest_api_v1.route("/usuarios/inscricoes/<casa>/<parlamentar>")
class Subscription(Resource):
[documentos] @login_required
@rest_api_v1.doc(
description="Deleta uma inscrição",
security='apikey',
responses={
200: 'Sucesso',
400: 'Parâmetros inválidos',
401: 'Sem autorização'
}
)
def delete(self, casa, parlamentar):
if not check_if_house_exists(casa):
return {'message': 'Id de casa legislativa inválido'}, 400
Inscricao().remover_inscricao(casa, parlamentar, current_user.email)
return {'message': 'Inscrição deletada'}, 200