From 7cb339c0bb8aacaeae47838a68c7af60cf414618 Mon Sep 17 00:00:00 2001 From: Byron Ullauri Date: Wed, 26 Dec 2018 13:07:09 -0500 Subject: Resolve "Update API project list" (#409) * refactoring models _to_serialize property * updated project api members list * addressing flake8: line too long --- ihatemoney/models.py | 48 ++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 10 deletions(-) (limited to 'ihatemoney/models.py') diff --git a/ihatemoney/models.py b/ihatemoney/models.py index 9e9fbeb..3c36e76 100644 --- a/ihatemoney/models.py +++ b/ihatemoney/models.py @@ -13,11 +13,6 @@ db = SQLAlchemy() class Project(db.Model): - _to_serialize = ( - "id", "name", "contact_email", "members", "active_members", - "balance" - ) - id = db.Column(db.String(64), primary_key=True) name = db.Column(db.UnicodeText) @@ -26,6 +21,23 @@ class Project(db.Model): members = db.relationship("Person", backref="project") @property + def _to_serialize(self): + obj = { + "id": self.id, + "name": self.name, + "contact_email": self.contact_email, + "members": [], + } + + balance = self.balance + for member in self.members: + member_obj = member._to_serialize + member_obj['balance'] = balance.get(member.id, 0) + obj['members'].append(member_obj) + + return obj + + @property def active_members(self): return [m for m in self.members if m.activated] @@ -276,8 +288,6 @@ class Person(db.Model): query_class = PersonQuery - _to_serialize = ("id", "name", "weight", "activated") - id = db.Column(db.Integer, primary_key=True) project_id = db.Column(db.String(64), db.ForeignKey("project.id")) bills = db.relationship("Bill", backref="payer") @@ -286,6 +296,15 @@ class Person(db.Model): weight = db.Column(db.Float, default=1) activated = db.Column(db.Boolean, default=True) + @property + def _to_serialize(self): + return { + "id": self.id, + "name": self.name, + "weight": self.weight, + "activated": self.activated, + } + def has_bills(self): """return if the user do have bills or not""" bills_as_ower_number = db.session.query(billowers)\ @@ -330,9 +349,6 @@ class Bill(db.Model): query_class = BillQuery - _to_serialize = ("id", "payer_id", "owers", "amount", "date", - "creation_date", "what") - id = db.Column(db.Integer, primary_key=True) payer_id = db.Column(db.Integer, db.ForeignKey("person.id")) @@ -345,6 +361,18 @@ class Bill(db.Model): archive = db.Column(db.Integer, db.ForeignKey("archive.id")) + @property + def _to_serialize(self): + return { + "id": self.id, + "payer_id": self.payer_id, + "owers": self.owers, + "amount": self.amount, + "date": self.date, + "creation_date": self.creation_date, + "what": self.what, + } + def pay_each(self): """Compute what each share has to pay""" if self.owers: -- cgit v1.1