From 5ed02a5fbfb03e934f4147efed292a33afef6b1b Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Sat, 5 Sep 2015 14:46:50 -0400 Subject: [PATCH] Flesh out database schema --- fosspay/objects.py | 57 +++++++++++++++++++++++++++++++++++++++++----- requirements.txt | 1 + 2 files changed, 52 insertions(+), 6 deletions(-) diff --git a/fosspay/objects.py b/fosspay/objects.py index 9f185da..2f313ea 100644 --- a/fosspay/objects.py +++ b/fosspay/objects.py @@ -1,22 +1,29 @@ from sqlalchemy import Column, Integer, String, Unicode, Boolean, DateTime from sqlalchemy import ForeignKey, Table, UnicodeText, Text, text from sqlalchemy.orm import relationship, backref +from sqlalchemy_utils import ChoiceType + from .database import Base from datetime import datetime +from enum import Enum import bcrypt import os import hashlib +class DonationType(Enum): + one_time = "one_time" + monthly = "monthly" + class User(Base): - __tablename__ = 'user' - id = Column(Integer, primary_key = True) - email = Column(String(256), nullable = False, index = True) + __tablename__ = 'users' + id = Column(Integer, primary_key=True) + email = Column(String(256), nullable=False, index=True) admin = Column(Boolean()) password = Column(String) created = Column(DateTime) - passwordReset = Column(String(128)) - passwordResetExpiry = Column(DateTime) + password_reset = Column(String(128)) + password_reset_expires = Column(DateTime) def set_password(self, password): self.password = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") @@ -28,7 +35,7 @@ class User(Base): self.set_password(password) def __repr__(self): - return '' % self.username + return "".format(self.username) # Flask.Login stuff # We don't use most of these features @@ -40,3 +47,41 @@ class User(Base): return False def get_id(self): return self.email + +class Donation(Base): + __tablename__ = 'donations' + id = Column(Integer, primary_key=True) + user_id = Column(Integer, ForeignKey("users.id"), nullable=False) + user = relationship("User", backref=backref("donations")) + project_id = Column(Integer, ForeignKey("projects.id")) + project = relationship("Project", backref=backref("donations")) + type = Column(ChoiceType(DonationType, impl=String())) + amount = Column(Integer, nullable=False) + created = Column(DateTime, nullable=False) + + def __init__(self, user, type, amount): + self.user = user + self.type = type + self.amount = amount + self.created = datetime.now() + + def __repr__(self): + return "".format( + self.id, + self.user.email, + self.amount, + self.type + ) + +class Project(Base): + __tablename__ = 'projects' + id = Column(Integer, primary_key=True) + name = Column(String, nullable=False) + created = Column(DateTime, nullable=False) + + def __init__(self, name): + self.name = name + self.created = datetime.now() + + def __repr__(self): + return "".format(self.id, self.name) diff --git a/requirements.txt b/requirements.txt index a15cd06..a38b3e1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,3 +3,4 @@ Flask Jinja2 Flask-Misaka gunicorn +sqlalchemy-utils