mirror of
https://github.com/aronwk-aaron/MSState-Library-ETD.git
synced 2026-01-29 09:00:15 -06:00
So the data types are mostly correct Ones that need work I have marked TODO: These are just the ones for files, and ones that could be Enum typed, they don't have to be I hate checkboxes, this is dumb but works very well
159 lines
7.3 KiB
Python
159 lines
7.3 KiB
Python
from sqlalchemy.sql import func
|
|
from flask_sqlalchemy import SQLAlchemy
|
|
from flask_migrate import Migrate
|
|
from flask_user import UserMixin
|
|
|
|
db = SQLAlchemy()
|
|
migrate = Migrate()
|
|
|
|
|
|
class User(db.Model, UserMixin):
|
|
__tablename__ = 'users'
|
|
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
|
|
# User authentication information (required for Flask-User)
|
|
email = db.Column(db.Unicode(255), nullable=False, server_default=u'', unique=True)
|
|
email_confirmed_at = db.Column(db.DateTime())
|
|
password = db.Column(db.String(255), nullable=False, server_default='')
|
|
# reset_password_token = db.Column(db.String(100), nullable=False, server_default='')
|
|
active = db.Column(db.Boolean(), nullable=False, server_default='0')
|
|
|
|
# User information
|
|
first_name = db.Column(db.Unicode(50), nullable=False, server_default=u'')
|
|
middle_name = db.Column(db.Unicode(50), nullable=False, server_default=u'')
|
|
last_name = db.Column(db.Unicode(50), nullable=False, server_default=u'')
|
|
|
|
msu_id = db.Column(db.Unicode(9), unique=True)
|
|
net_id = db.Column(db.Unicode(8), unique=True)
|
|
department = db.Column(db.Unicode(50), server_default=u'')
|
|
|
|
prim_phone = db.Column(db.Unicode(50), nullable=False, server_default=u'')
|
|
sec_phone = db.Column(db.Unicode(50), server_default=u'')
|
|
|
|
country = db.Column(db.Unicode(50), nullable=False, server_default=u'')
|
|
administrative_area = db.Column(db.Unicode(50), nullable=False, server_default=u'')
|
|
locality = db.Column(db.Unicode(50), nullable=False, server_default=u'')
|
|
postal_code = db.Column(db.Unicode(50), nullable=False, server_default=u'')
|
|
thoroughfare = db.Column(db.Unicode(50), nullable=False, server_default=u'')
|
|
premise = db.Column(db.Unicode(50), nullable=False, server_default=u'')
|
|
|
|
pref_first_name = db.Column(db.Unicode(50), server_default=u'')
|
|
pref_middle_name = db.Column(db.Unicode(50), server_default=u'')
|
|
pref_last_name = db.Column(db.Unicode(50), server_default=u'')
|
|
|
|
maiden_name = db.Column(db.Unicode(50), server_default=u'')
|
|
birth_date = db.Column(db.Unicode(50), nullable=False, server_default=u'')
|
|
|
|
# Relationships
|
|
roles = db.relationship('Role', secondary='users_roles',
|
|
backref=db.backref('users', lazy='dynamic'))
|
|
|
|
|
|
# Define the Role data model
|
|
class Role(db.Model):
|
|
__tablename__ = 'roles'
|
|
id = db.Column(db.Integer(), primary_key=True)
|
|
name = db.Column(db.String(50), nullable=False, server_default=u'', unique=True) # for @roles_accepted()
|
|
label = db.Column(db.Unicode(255), server_default=u'') # for display purposes
|
|
|
|
|
|
# Define the UserRoles association model
|
|
class UsersRoles(db.Model):
|
|
__tablename__ = 'users_roles'
|
|
id = db.Column(db.Integer(), primary_key=True)
|
|
user_id = db.Column(db.Integer(), db.ForeignKey('users.id', ondelete='CASCADE'))
|
|
role_id = db.Column(db.Integer(), db.ForeignKey('roles.id', ondelete='CASCADE'))
|
|
|
|
|
|
class UsersProfessors(db.Model):
|
|
__tablename__ = 'users_professors'
|
|
id = db.Column(db.Integer(), primary_key=True)
|
|
user_id = db.Column(db.Integer(), db.ForeignKey('users.id', ondelete='CASCADE'))
|
|
Professor_id = db.Column(db.Integer(), db.ForeignKey('users.id', ondelete='CASCADE'))
|
|
|
|
|
|
class Notification(db.Model):
|
|
__tablename__ = 'notifications'
|
|
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
user_id = db.Column(db.Integer(), db.ForeignKey('users.id', ondelete='CASCADE'))
|
|
text = db.Column(db.Text, nullable=False)
|
|
state = db.Column(db.Boolean, default=False)
|
|
|
|
|
|
class Submission(db.Model):
|
|
__tablename__ = 'submissions'
|
|
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
user_id = db.Column(db.Integer(), db.ForeignKey('users.id', ondelete='CASCADE'))
|
|
title = db.Column(db.Unicode(), nullable=False, server_default=u'')
|
|
abstract = db.Column(db.Unicode(), nullable=False, server_default=u'')
|
|
# TODO: Make Enum type for this
|
|
type = db.Column(db.Integer, nullable=False)
|
|
# TODO: Make Enum type for this
|
|
release_type = db.Column(db.Integer, nullable=False)
|
|
ww_length = db.Column(db.Integer, nullable=False)
|
|
# TODO: figure out files for this
|
|
signature_file = db.Column(db.Text)
|
|
started = db.Column(db.DateTime(timezone=True), server_default=func.now(), nullable=False)
|
|
|
|
state = db.Column(db.Boolean, default=False, nullable=False)
|
|
approved_date = db.Column(db.DateTime(timezone=True))
|
|
|
|
|
|
class Revision(db.Model):
|
|
__tablename__ = 'revisions'
|
|
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
sub_id = db.Column(db.Integer(), db.ForeignKey('submissions.id', ondelete='CASCADE'))
|
|
submitted = db.Column(db.DateTime(timezone=True), server_default=func.now())
|
|
# TODO: figure out files for this
|
|
file = db.Column(db.Text)
|
|
|
|
|
|
class Review(db.Model):
|
|
__tablename__ = 'reviews'
|
|
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
reviewed = db.Column(db.DateTime(timezone=True), server_default=func.now())
|
|
review_ID = db.Column(db.Integer(), db.ForeignKey('reviews.id', ondelete='CASCADE'))
|
|
reviewer_id = db.Column(db.Integer(), db.ForeignKey('users.id', ondelete='CASCADE'))
|
|
# 32 check boxes + comment box
|
|
# check boxes will refer to the ones in the review form
|
|
# new check boxes must be added at the end
|
|
comments = db.Column(db.Unicode(), server_default=u'')
|
|
check_1 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_2 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_3 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_4 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_5 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_6 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_7 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_8 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_9 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_10 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_11 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_12 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_13 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_14 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_15 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_16 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_17 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_18 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_19 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_20 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_21 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_22 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_23 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_24 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_25 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_26 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_27 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_28 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_29 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_30 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_31 = db.Column(db.Boolean, default=False, nullable=False)
|
|
check_32 = db.Column(db.Boolean, default=False, nullable=False)
|
|
|