class UserMatch(db.Model): """holds matches made through the history of the app""" __tablename__ = "user_matches" match_id = db.Column(db.Integer, autoincrement=True, primary_key=True) user_id_1 = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) user_id_2 = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) match_date = db.Column(db.DateTime, nullable=False) user_2_status = db.Column(db.Boolean, nullable=False) query_pincode = db.Column(db.String(20), nullable=False) def __repr__(self): """return interest choices of the user""" d1 = '< match_id={a}, user_id_1={b},'.format(a=self.match_id, b=self.user_id_1) d2 = ' user_id_2={c}, match_date={d}>'.format(c=self.user_id_2, d=self.match_date) return d1 + d2
class Message(db.Model): __tablename__ = 'messages' id = db.Column(db.Integer, primary_key=True) sender_id = db.Column(db.Integer, db.ForeignKey('users.id')) recipient_id = db.Column(db.Integer, db.ForeignKey('users.id')) body = db.Column(db.String(140)) timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow) def __repr__(self): return '<Message {}>'.format(self.body)
class Message(db.Model): id = db.Column(db.Integer, primary_key=True) sender_id = db.Column(db.Integer, db.ForeignKey('user.id')) recipient_id = db.Column(db.Integer, db.ForeignKey('user.id')) body = db.Column(db.Text) #db.String(140) timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow) @staticmethod def on_changed_body(target, value, oldvalue, initiator): allowed_tags = ['a', 'abbr', 'acronym', 'b', 'blockquote', 'code', 'em', 'i', 'li', 'ol', 'pre', 'strong', 'ul', 'h1', 'h2', 'h3', 'p', 'iframe'] target.body = bleach.linkify(bleach.clean(markdown(value, output_format='html'), tags=allowed_tags, strip=True)) def __repr__(self): return '<Message {}>'.format(self.body)
class Notification(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(128), index=True) user_id = db.Column(db.Integer, db.ForeignKey('users.id')) timestamp = db.Column(db.Float, index=True, default=time) payload_json = db.Column(db.Text) def get_data(self): return json.loads(str(self.payload_json))
class Interest(db.Model): """ User interests and hobbies for matchmaking, Each Column will hold integers that correspond to the information on other tables. """ __tablename__ = 'interests' interest_id = db.Column(db.Integer, autoincrement=True, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('users.id')) book_genre_id = db.Column(db.Integer, db.ForeignKey('book_genres.book_genre_id'), nullable=False) movie_genre_id = db.Column(db.Integer, db.ForeignKey('movie_genres.movie_genre_id'), nullable=False) music_genre_id = db.Column(db.Integer, db.ForeignKey('music_genres.music_genre_id'), nullable=False) fav_cuisine_id = db.Column(db.Integer, db.ForeignKey('fav_cuisines.fav_cuisine_id'), nullable=False) hobby_id = db.Column(db.Integer, db.ForeignKey('hobbies.hobby_id'), nullable=False) religion_id = db.Column(db.Integer, db.ForeignKey('religions.religion_id'), nullable=False) outdoor_id = db.Column(db.Integer, db.ForeignKey('outdoors.outdoor_id'), nullable=False) def __repr__ (self): """return interest choices of the user""" d1 ='< interest_id={a}, book_genre_id={b},'.format(a=self.interest_id, b=self.book_genre_id) d2 =' movie_genre_id={c}, music_genre_id={d},'.format(c=self.movie_genre_id, d=self.music_genre_id) d3 =' food_habit_id={e}, fav_cuisine_id={f},'.format(e=self.food_habit_id, f=self.fav_cuisine_id) d4 =' hobby_id={g}, politicial_view_id={h},'.format(g=self.hobby_id, h=self.political_view_id) d5 =' religion_id={i}, outdoor_id={j}>'.format(i=self.religion_id, j=self.outdoor_id) return d1 + d2 + d3 + d4 + d5
class PendingMatch(db.Model): """holds a list of all pending matches for user queries""" __tablename__ = "pending_matches" user_query_id = db.Column(db.Integer, autoincrement=True, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) query_pin_code = db.Column(db.Integer, nullable=False) query_time = db.Column(db.DateTime, nullable=False) pending = db.Column(db.Boolean, nullable=False) def __repr__(self): """return information about a user query""" d1 = "<user_query_id={a}, user_id={b},".format(a=self.user_query_id, b=self.user_id) d2 = " query_pin_code={c}, query_time={d},".format( c=self.query_pin_code, d=self.query_time) d3 = " pending={e}>".format(e=self.pending) return d1 + d2 + d3
from datetime import datetime from itsdangerous import TimedJSONWebSignatureSerializer as Serializer from dating import db, login_manager, app from flask_login import UserMixin from markdown import markdown import bleach @login_manager.user_loader def load_user(user_id): return User.query.get(int(user_id)) followers = db.Table( 'followers', db.Column('follower_id', db.Integer, db.ForeignKey('user.id')), db.Column('followed_id', db.Integer, db.ForeignKey('user.id')) ) class User(db.Model, UserMixin): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(20), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=True) dp = db.Column(db.String(20), nullable=False, default='default.jpg') dp2 = db.Column(db.String(20), nullable=False, default='flip.png') dp3 = db.Column(db.String(20), nullable=False, default='plane.png') password = db.Column(db.String(60), nullable=False) last_seen = db.Column(db.DateTime, default=datetime.utcnow) date_joined = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) department = db.Column(db.String(20), nullable=False) student_number = db.Column(db.Integer(), unique=True, nullable=True)