1
0
Fork 0
mirror of https://codeberg.org/Mo8it/AdvLabDB.git synced 2024-12-20 23:41:20 +00:00

Use IN and BETWEEN in CHECK

This commit is contained in:
Mo 2022-05-15 19:06:28 +02:00
parent f18e06a39b
commit ce913f92eb

View file

@ -58,8 +58,7 @@ class PartStudent(db.Model):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
final_part_mark = db.Column( final_part_mark = db.Column(
db.Integer, db.Integer,
db.CheckConstraint(f"final_part_mark >= {MIN_MARK}"), db.CheckConstraint(f"final_part_mark BETWEEN {MIN_MARK} AND {MAX_MARK}"),
db.CheckConstraint(f"final_part_mark <= {MAX_MARK}"),
nullable=True, nullable=True,
) )
@ -274,22 +273,19 @@ class SemesterExperiment(db.Model):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
oral_weighting = db.Column( oral_weighting = db.Column(
db.Float, db.Float,
db.CheckConstraint("oral_weighting >= 0"), db.CheckConstraint("oral_weighting BETWEEN 0 AND 1"),
db.CheckConstraint("oral_weighting <= 1"),
default=0.5, default=0.5,
nullable=False, nullable=False,
) )
protocol_weighting = db.Column( protocol_weighting = db.Column(
db.Float, db.Float,
db.CheckConstraint("protocol_weighting >= 0"), db.CheckConstraint("protocol_weighting BETWEEN 0 AND 1"),
db.CheckConstraint("protocol_weighting <= 1"),
default=0.5, default=0.5,
nullable=False, nullable=False,
) )
final_weighting = db.Column( final_weighting = db.Column(
db.Float, db.Float,
db.CheckConstraint("final_weighting >= 0"), db.CheckConstraint("final_weighting BETWEEN 0 AND 1"),
db.CheckConstraint("final_weighting <= 1"),
default=1.0, default=1.0,
nullable=False, nullable=False,
) )
@ -436,10 +432,8 @@ class Part(db.Model):
class Semester(db.Model): class Semester(db.Model):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
label = db.Column(db.String(10), nullable=False) label = db.Column(db.String(10), db.CheckConstraint("label IN ('WS', 'SS')"), nullable=False)
year = db.Column( year = db.Column(db.Integer, db.CheckConstraint(f"year BETWEEN {MIN_YEAR} AND {MAX_YEAR}"), nullable=False)
db.Integer, db.CheckConstraint(f"year >= {MIN_YEAR}"), db.CheckConstraint(f"year <= {MAX_YEAR}"), nullable=False
)
parts = db.relationship("Part", backref="semester", lazy=True) parts = db.relationship("Part", backref="semester", lazy=True)
semester_experiments = db.relationship("SemesterExperiment", backref="semester", lazy=True) semester_experiments = db.relationship("SemesterExperiment", backref="semester", lazy=True)
@ -448,14 +442,8 @@ class Semester(db.Model):
__table_args__ = (db.UniqueConstraint(label, year),) __table_args__ = (db.UniqueConstraint(label, year),)
def customInit(label, year):
if label not in ("WS", "SS"):
raise DataBaseException("The semester label has to be WS or SS!")
return Semester(label=label, year=year)
def customInitFromOldSemester(label, year, oldSemester, transferParts, transferAssistants): def customInitFromOldSemester(label, year, oldSemester, transferParts, transferAssistants):
semester = Semester.customInit(label=label, year=year) semester = Semester(label=label, year=year)
if transferParts: if transferParts:
semester.transferPartsFrom(oldSemester) semester.transferPartsFrom(oldSemester)
@ -513,21 +501,18 @@ class ExperimentMark(db.Model):
oral_mark = db.Column( oral_mark = db.Column(
db.Integer, db.Integer,
db.CheckConstraint(f"oral_mark >= {MIN_MARK}"), db.CheckConstraint(f"oral_mark BETWEEN {MIN_MARK} AND {MAX_MARK}"),
db.CheckConstraint(f"oral_mark <= {MAX_MARK}"),
nullable=True, nullable=True,
) )
protocol_mark = db.Column( protocol_mark = db.Column(
db.Integer, db.Integer,
db.CheckConstraint(f"oral_mark >= {MIN_MARK}"), db.CheckConstraint(f"oral_mark BETWEEN {MIN_MARK} AND {MAX_MARK}"),
db.CheckConstraint(f"oral_mark <= {MAX_MARK}"),
nullable=True, nullable=True,
) )
final_experiment_mark = db.Column( final_experiment_mark = db.Column(
db.Integer, db.Integer,
db.CheckConstraint(f"oral_mark >= {MIN_MARK}"), db.CheckConstraint(f"oral_mark BETWEEN {MIN_MARK} AND {MAX_MARK}"),
db.CheckConstraint(f"oral_mark <= {MAX_MARK}"),
onupdate=final_experiment_mark_update, onupdate=final_experiment_mark_update,
nullable=True, nullable=True,
) )