From 8a48b73eaea83b98755e1def20f8928a331a0e73 Mon Sep 17 00:00:00 2001 From: Mindiell Date: Thu, 4 Aug 2022 07:24:47 +0200 Subject: [PATCH] fix: representative API --- app/controller/api/representative.py | 41 ++++++++++++++++++++++++++-- app/model/membership.py | 5 +++- app/model/representative.py | 8 +++++- 3 files changed, 49 insertions(+), 5 deletions(-) diff --git a/app/controller/api/representative.py b/app/controller/api/representative.py index 520e6a0..d530113 100644 --- a/app/controller/api/representative.py +++ b/app/controller/api/representative.py @@ -22,10 +22,45 @@ class RepresentativesApi(Resource): ), )) query = query.order_by(RepresentativeModel.last_name) - print(request.args.get("name")) - print(query) return [ - representative.serialize() + { + "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 diff --git a/app/model/membership.py b/app/model/membership.py index 4abe5b0..2f49a5b 100644 --- a/app/model/membership.py +++ b/app/model/membership.py @@ -24,7 +24,10 @@ class MembershipModel(db.Model, Model): class AdminView(View): - column_filters = ["entity.name", "entity.type.name", "role.name", "start", "end", "active"] + column_filters = [ + "entity.name", "entity.type.name", "representative.full_name", "role.name", + "start", "end", "active", + ] admin.add_view( diff --git a/app/model/representative.py b/app/model/representative.py index 0d36170..2648523 100644 --- a/app/model/representative.py +++ b/app/model/representative.py @@ -3,6 +3,8 @@ from app import admin, db from app.model.model import Model, View +from sqlalchemy.ext.hybrid import hybrid_property + class RepresentativeModel(db.Model, Model): __tablename__ = "representative" @@ -23,8 +25,12 @@ class RepresentativeModel(db.Model, Model): ) picture = db.Column(db.String(200)) + @hybrid_property + def full_name(self): + return self.first_name + " " + self.last_name + def __repr__(self): - return f"{self.last_name.upper()} {self.first_name.capitalize()}" + return f"{self.first_name.capitalize()} {self.last_name.upper()}" class AdminView(View):