politikorama/app/controller/api/representative.py

78 lines
2.8 KiB
Python

# encoding: utf-8
from flask import request, current_app
from flask_restful import Resource
from sqlalchemy import or_
from app.model.representative import RepresentativeModel
class RepresentativesApi(Resource):
def get(self):
page = int(request.args.get("page", 1))
print(page)
query = RepresentativeModel.query
if request.args.get("name", "") != "":
query = query.filter(or_(
RepresentativeModel.last_name.like(
f"%{request.args.get('name')}%"
),
RepresentativeModel.first_name.like(
f"%{request.args.get('name')}%"
),
))
query = query.order_by(RepresentativeModel.last_name)
return [
{
"first_name": representative.first_name,
"last_name": representative.last_name,
"full_name": representative.full_name,
"picture": representative.picture,
"active": True,
"memberships": [
{
"reference": membership.reference,
"source": membership.entity.source,
"start_date": membership.start.strftime("%Y-%m-%d"),
"end_date": membership.end.strftime("%Y-%m-%d") if membership.end is not None else None,
"entity": {
"reference": membership.entity.reference,
"type": {
"code": membership.entity.type.code,
"name": membership.entity.type.name,
},
"name": membership.entity.name,
},
"role": {
"code": membership.role.code,
"name": membership.role.name,
},
}
for membership
in representative.memberships
],
"references": [
{
"reference": reference.reference,
"source": reference.source.name,
}
for reference
in representative.references
],
}
for representative
in query.paginate(
page, current_app.config["API_PER_PAGE"], error_out=False
).items
]
class RepresentativeApi(Resource):
def get(self, representative_id):
representative = RepresentativeModel.query.get(representative_id)
if representative is None:
return None, 404
print(representative.serialize())
return representative.serialize()