Browse Source

Election models

JoostSijm 6 years ago
parent
commit
9c4f9dbcc2
1 changed files with 123 additions and 0 deletions
  1. 123 0
      app/models.py

+ 123 - 0
app/models.py

@@ -158,3 +158,126 @@ class File(db.Model):
         lazy='subquery',
         backref=db.backref('pages', lazy=True)
     )
+
+
+class Motion(db.Model):
+    """Model for Motion"""
+    id = db.Column(db.Integer, primary_key=True)
+    name = db.Column(db.String, nullable=False)
+    description = db.Column(db.String)
+    start_at = db.Column(db.DateTime, default=datetime.utcnow)
+    end_at = db.Column(db.DateTime, nullable=False)
+
+    user_id = db.Column(
+        db.Integer,
+        db.ForeignKey("user.id")
+    )
+    user = db.relationship(
+        "User",
+        backref=db.backref("motions", lazy="dynamic")
+    )
+
+    priority_id = db.Column(
+        db.Integer,
+        db.ForeignKey("priority.id")
+    )
+    priority = db.relationship(
+        "Priority",
+        backref=db.backref("motions", lazy="dynamic")
+    )
+
+
+class Priority(db.Model):
+    """Model for Priority"""
+    id = db.Column(db.Integer, primary_key=True)
+    name = db.Column(db.String, nullable=False)
+    description = db.Column(db.String, nullable=False)
+
+
+class Vote(db.Model):
+    """Model for Vote"""
+    id = db.Column(db.Integer, primary_key=True)
+    value = db.Column(db.Boolean)
+    datetime = db.Column(db.DateTime, default=datetime.utcnow)
+
+    motion_id = db.Column(
+        db.Integer,
+        db.ForeignKey("motion.id")
+    )
+    motion = db.relationship(
+        "Motion",
+        backref=db.backref("votes", lazy="dynamic")
+    )
+
+    candidate_id = db.Column(
+        db.Integer,
+        db.ForeignKey("candidate.id")
+    )
+    motion = db.relationship(
+        "Candidate",
+        backref=db.backref("votes", lazy="dynamic")
+    )
+
+
+election_function = db.Table(
+    'election_function',
+    db.Column(
+        'election_id',
+        db.Integer,
+        db.ForeignKey('election.id'),
+        primary_key=True
+    ),
+    db.Column(
+        'function_id',
+        db.Integer,
+        db.ForeignKey('function.id'),
+        primary_key=True
+    )
+)
+
+
+class Election(db.Model):
+    """Model for Election"""
+    id = db.Column(db.Integer, primary_key=True)
+    start_at = db.Column(db.DateTime, default=datetime.utcnow)
+    end_at = db.Column(db.DateTime, nullable=False)
+    name = db.Column(db.String, nullable=False)
+    description = db.Column(db.String)
+
+
+class Function(db.Model):
+    """Model for Function"""
+    id = db.Column(db.Integer, primary_key=True)
+    name = db.Column(db.String, nullable=False)
+    description = db.Column(db.String)
+
+    elections = db.relationship(
+        'Election',
+        secondary=election_function,
+        lazy='subquery',
+        backref=db.backref('functions', lazy=True)
+    )
+
+
+class Candidate(db.Model):
+    """Model for Candidate"""
+    id = db.Column(db.Integer, primary_key=True)
+    motivation = db.Column(db.String)
+
+    user_id = db.Column(
+        db.Integer,
+        db.ForeignKey("user.id")
+    )
+    user = db.relationship(
+        "User",
+        backref=db.backref("eligible", lazy="dynamic")
+    )
+
+    function_id = db.Column(
+        db.Integer,
+        db.ForeignKey("function.id")
+    )
+    user = db.relationship(
+        "Function",
+        backref=db.backref("candidates", lazy="dynamic")
+    )