task/3382: Harmonisera tabellnamn #6

Merged
ansv7779 merged 104 commits from task/3382 into develop 2024-11-12 13:33:44 +01:00
7 changed files with 414 additions and 191 deletions
Showing only changes of commit 065601aa03 - Show all commits

View File

@ -7,12 +7,20 @@ import jakarta.persistence.MappedSuperclass;
@MappedSuperclass
public abstract class AbstractGradingCriterion extends AbstractCriterion {
// ----------------------------------------------------------------------------------
// Basic JPA-mappings
// ----------------------------------------------------------------------------------
@Basic
@Column(name = "points_required_to_pass", nullable = false)
protected int pointsRequiredToPass;
@Basic
@Column(name = "fx")
private boolean fx = true;
// ----------------------------------------------------------------------------------
// Constructors
// ----------------------------------------------------------------------------------
protected AbstractGradingCriterion() {
}
@ -22,11 +30,9 @@ public abstract class AbstractGradingCriterion extends AbstractCriterion {
this.pointsRequiredToPass = pointsRequiredToPass;
}
public abstract boolean isProjectCriterion();
public abstract boolean isIndividualCriterion();
public abstract int getMaxPoints();
// ----------------------------------------------------------------------------------
// Properties (Getters and Setters)
// ----------------------------------------------------------------------------------
public int getPointsRequiredToPass() {
return this.pointsRequiredToPass;
@ -36,6 +42,13 @@ public abstract class AbstractGradingCriterion extends AbstractCriterion {
return this.fx;
}
public void setFx(boolean fx) {
this.fx = fx;
}
// ----------------------------------------------------------------------------------
// Methods Common To All Objects
// ----------------------------------------------------------------------------------
@Override
public boolean equals(final Object o) {
if (o == this) return true;
@ -47,11 +60,6 @@ public abstract class AbstractGradingCriterion extends AbstractCriterion {
&& this.isFx() == other.isFx();
}
@Override
protected boolean canEqual(final Object other) {
return other instanceof AbstractGradingCriterion;
}
@Override
public int hashCode() {
final int PRIME = 59;
@ -66,7 +74,17 @@ public abstract class AbstractGradingCriterion extends AbstractCriterion {
return "AbstractGradingCriterion(pointsRequiredToPass=" + this.getPointsRequiredToPass() + ", fx=" + this.isFx() + ")";
}
public void setFx(boolean fx) {
this.fx = fx;
// ----------------------------------------------------------------------------------
// Other Methods
// ----------------------------------------------------------------------------------
@Override
protected boolean canEqual(final Object other) {
return other instanceof AbstractGradingCriterion;
}
public abstract boolean isProjectCriterion();
public abstract boolean isIndividualCriterion();
public abstract int getMaxPoints();
}

View File

@ -13,13 +13,19 @@ import se.su.dsv.scipro.system.DomainObject;
import se.su.dsv.scipro.system.Language;
@MappedSuperclass
public abstract class AbstractGradingCriterionPoint extends DomainObject implements Comparable<AbstractGradingCriterionPoint> {
public abstract class AbstractGradingCriterionPoint extends DomainObject
implements Comparable<AbstractGradingCriterionPoint> {
public static final int DESCRIPTION_LENGTH = 600;
// ----------------------------------------------------------------------------------
// Basic JPA-mappings
// ----------------------------------------------------------------------------------
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Basic(optional = false)
@Column(name = "point")
private Integer point;
@Basic
@ -30,46 +36,51 @@ public abstract class AbstractGradingCriterionPoint extends DomainObject impleme
@Column(name = "description_en", length = DESCRIPTION_LENGTH)
private String descriptionEn;
// ----------------------------------------------------------------------------------
// Constructors
// ----------------------------------------------------------------------------------
public AbstractGradingCriterionPoint() {
}
// ----------------------------------------------------------------------------------
// Properties (Getters and Setters)
// ----------------------------------------------------------------------------------
@Override
public Long getId() {
return id;
}
public Integer getPoint() {
return this.point;
}
public String getDescription() {
return this.description;
}
public String getDescriptionEn() {
return descriptionEn;
}
public String getDescription(Language language) {
return language == Language.ENGLISH ? getDescriptionEn() : getDescription();
}
public void setId(Long id) {
this.id = id;
}
public Integer getPoint() {
return this.point;
}
public void setPoint(Integer point) {
this.point = point;
}
public String getDescription() {
return this.description;
}
public void setDescription(String description) {
this.description = description;
}
public String getDescriptionEn() {
return descriptionEn;
}
public void setDescriptionEn(String descriptionEn) {
this.descriptionEn = descriptionEn;
}
// ----------------------------------------------------------------------------------
// Methods Common To All Objects and Comparable
// ----------------------------------------------------------------------------------
@Override
public boolean equals(final Object o) {
if (o == this) return true;
@ -83,10 +94,6 @@ public abstract class AbstractGradingCriterionPoint extends DomainObject impleme
&& Objects.equals(this.getDescriptionEn(), other.getDescriptionEn());
}
protected boolean canEqual(final Object other) {
return other instanceof AbstractGradingCriterionPoint;
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), this.getId(), this.getPoint(), this.getDescription(), this.getDescriptionEn());
@ -96,4 +103,15 @@ public abstract class AbstractGradingCriterionPoint extends DomainObject impleme
public String toString() {
return "AbstractGradingCriterionPoint(id=" + this.getId() + ", point=" + this.getPoint() + ", description=" + this.getDescription() + ", descriptionEn=" + this.getDescriptionEn() + ")";
}
// ----------------------------------------------------------------------------------
// Other Methods
// ----------------------------------------------------------------------------------
protected boolean canEqual(final Object other) {
return other instanceof AbstractGradingCriterionPoint;
}
public String getDescription(Language language) {
return language == Language.ENGLISH ? getDescriptionEn() : getDescription();
}
}

View File

@ -1,6 +1,17 @@
package se.su.dsv.scipro.report;
import jakarta.persistence.*;
import jakarta.persistence.Basic;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.DiscriminatorColumn;
import jakarta.persistence.Entity;
import jakarta.persistence.Inheritance;
import jakarta.persistence.InheritanceType;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@ -9,22 +20,38 @@ import java.util.Objects;
@Entity
@DiscriminatorColumn(name = "type")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Table(name = "grading_criterion")
public abstract class GradingCriterion extends AbstractGradingCriterion {
public static final int FEEDBACK_LENGTH = 2000;
@ManyToOne(optional = false)
private GradingReport gradingReport;
@OneToMany(mappedBy = "gradingCriterion", orphanRemoval = true, cascade = CascadeType.PERSIST)
private List<GradingCriterionPoint> gradingCriterionPoints = new ArrayList<>();
// ----------------------------------------------------------------------------------
// Basic JPA-mappings
// ----------------------------------------------------------------------------------
@Basic
@Column(name = "points")
private Integer points;
@Basic
@Column(length = FEEDBACK_LENGTH)
@Column(name = "feedback", length = FEEDBACK_LENGTH)
private String feedback;
// ----------------------------------------------------------------------------------
// JPA-mappings of foreign keys in this table (grading_criterion) referencing other
// tables.
// ----------------------------------------------------------------------------------
@ManyToOne(optional = false)
@JoinColumn(name = "grading_report_id", referencedColumnName = "id")
private GradingReport gradingReport;
// ----------------------------------------------------------------------------------
// JPA-mappings of other tables referencing to this table "grading_criterion"
// ----------------------------------------------------------------------------------
@OneToMany(mappedBy = "gradingCriterion", orphanRemoval = true, cascade = CascadeType.PERSIST)
private List<GradingCriterionPoint> gradingCriterionPoints = new ArrayList<>();
// ----------------------------------------------------------------------------------
// Constructors
// ----------------------------------------------------------------------------------
protected GradingCriterion() {
// JPA
}
@ -41,6 +68,71 @@ public abstract class GradingCriterion extends AbstractGradingCriterion {
}
}
// ----------------------------------------------------------------------------------
// Properties (Getters and Setters)
// ----------------------------------------------------------------------------------
public Integer getPoints() {
return this.points;
}
public void setPoints(Integer points) {
this.points = points;
}
public String getFeedback() {
return this.feedback;
}
public void setFeedback(String feedback) {
this.feedback = feedback;
}
public List<GradingCriterionPoint> getGradingCriterionPoints() {
return this.gradingCriterionPoints;
}
public GradingReport getGradingReport() {
return this.gradingReport;
}
// ----------------------------------------------------------------------------------
// Methods Common To All Objects
// ----------------------------------------------------------------------------------
@Override
public boolean equals(final Object o) {
if (o == this) return true;
if (!(o instanceof GradingCriterion)) return false;
final GradingCriterion other = (GradingCriterion) o;
return other.canEqual(this)
&& super.equals(o)
&& Objects.equals(this.getGradingReport(), other.getGradingReport())
&& Objects.equals(this.getPoints(), other.getPoints())
&& Objects.equals(this.getFeedback(), other.getFeedback());
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), this.getGradingReport(), this.getPoints(), this.getFeedback());
}
@Override
public String toString() {
return "GradingCriterion(gradingReport=" + this.getGradingReport() + ", points=" + this.getPoints() +
", feedback=" + this.getFeedback() + ")";
}
// ----------------------------------------------------------------------------------
// Other Methods
// ----------------------------------------------------------------------------------
@Override
protected boolean canEqual(final Object other) {
return other instanceof GradingCriterion;
}
public boolean isPassFail() {
return getMaxPoints() == 1 && getPointsRequiredToPass() == 1;
}
public boolean meetsMinimumPointRequirement() {
return Objects.requireNonNullElse(getPoints(), 0) >= getPointsRequiredToPass();
}
@ -57,59 +149,4 @@ public abstract class GradingCriterion extends AbstractGradingCriterion {
public int getMaxPoints() {
return Collections.max(gradingCriterionPoints).getPoint();
}
public GradingReport getGradingReport() {
return this.gradingReport;
}
public Integer getPoints() {
return this.points;
}
public String getFeedback() {
return this.feedback;
}
public List<GradingCriterionPoint> getGradingCriterionPoints() {
return this.gradingCriterionPoints;
}
public void setPoints(Integer points) {
this.points = points;
}
public void setFeedback(String feedback) {
this.feedback = feedback;
}
@Override
public boolean equals(final Object o) {
if (o == this) return true;
if (!(o instanceof GradingCriterion)) return false;
final GradingCriterion other = (GradingCriterion) o;
return other.canEqual(this)
&& super.equals(o)
&& Objects.equals(this.getGradingReport(), other.getGradingReport())
&& Objects.equals(this.getPoints(), other.getPoints())
&& Objects.equals(this.getFeedback(), other.getFeedback());
}
@Override
protected boolean canEqual(final Object other) {
return other instanceof GradingCriterion;
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), this.getGradingReport(), this.getPoints(), this.getFeedback());
}
@Override
public String toString() {
return "GradingCriterion(gradingReport=" + this.getGradingReport() + ", points=" + this.getPoints() + ", feedback=" + this.getFeedback() + ")";
}
public boolean isPassFail() {
return getMaxPoints() == 1 && getPointsRequiredToPass() == 1;
}
}

View File

@ -1,37 +1,39 @@
package se.su.dsv.scipro.report;
import jakarta.persistence.Entity;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import java.util.Objects;
@Entity
@Table(name = "GradingCriterionPoint")
@Table(name = "grading_criterion_point")
public class GradingCriterionPoint extends AbstractGradingCriterionPoint {
// ----------------------------------------------------------------------------------
// JPA-mappings of foreign keys in this table (grading_criterion_point) referencing other
// tables.
// ----------------------------------------------------------------------------------
@ManyToOne(optional = false)
@JoinColumn(name = "grading_criterion_id", referencedColumnName = "id")
private GradingCriterion gradingCriterion;
// ----------------------------------------------------------------------------------
// Constructors
// ----------------------------------------------------------------------------------
public GradingCriterionPoint() {
}
public GradingCriterionPoint(
final Integer point,
final String description,
final String descriptionEn,
final GradingCriterion gradingCriterion)
{
public GradingCriterionPoint(final Integer point, final String description,
final String descriptionEn, final GradingCriterion gradingCriterion) {
setPoint(point);
setDescription(description);
setDescriptionEn(descriptionEn);
this.gradingCriterion = gradingCriterion;
}
@Override
public int compareTo(AbstractGradingCriterionPoint abstractGradingCriterionPoint) {
return this.getPoint().compareTo(abstractGradingCriterionPoint.getPoint());
}
// ----------------------------------------------------------------------------------
// Properties (Getters and Setters)
// ----------------------------------------------------------------------------------
public GradingCriterion getGradingCriterion() {
return this.gradingCriterion;
}
@ -40,9 +42,12 @@ public class GradingCriterionPoint extends AbstractGradingCriterionPoint {
this.gradingCriterion = gradingCriterion;
}
// ----------------------------------------------------------------------------------
// Methods Common To All Objects and Comparable
// ----------------------------------------------------------------------------------
@Override
public String toString() {
return "GradingCriterionPoint(gradingCriterion=" + this.getGradingCriterion() + ")";
public int compareTo(AbstractGradingCriterionPoint abstractGradingCriterionPoint) {
return this.getPoint().compareTo(abstractGradingCriterionPoint.getPoint());
}
@Override
@ -55,13 +60,22 @@ public class GradingCriterionPoint extends AbstractGradingCriterionPoint {
&& Objects.equals(this.getGradingCriterion(), other.getGradingCriterion());
}
@Override
public int hashCode() {
return Objects.hashCode(this.getGradingCriterion());
}
@Override
public String toString() {
return "GradingCriterionPoint(gradingCriterion=" + this.getGradingCriterion() + ")";
}
// ----------------------------------------------------------------------------------
// Other Methods
// ----------------------------------------------------------------------------------
@Override
protected boolean canEqual(final Object other) {
return other instanceof GradingCriterionPoint;
}
@Override
public int hashCode() {
return Objects.hashCode(this.getGradingCriterion());
}
}

View File

@ -1,11 +1,19 @@
package se.su.dsv.scipro.report;
import jakarta.persistence.Basic;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import se.su.dsv.scipro.project.Project;
import se.su.dsv.scipro.system.Language;
import se.su.dsv.scipro.system.ProjectType;
import se.su.dsv.scipro.system.User;
import jakarta.persistence.*;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Collections;
@ -13,6 +21,7 @@ import java.util.List;
import java.util.stream.Collectors;
@Entity
@Table(name = "grading_report")
public abstract class GradingReport extends Report {
public enum Grade {
@ -21,40 +30,51 @@ public abstract class GradingReport extends Report {
public enum State { INITIAL, REVIEWING, FINALIZED }
// ----------------------------------------------------------------------------------
// Basic JPA-mappings
// ----------------------------------------------------------------------------------
@Basic
@Column(name = "state")
@Enumerated(EnumType.STRING)
private State state = State.INITIAL;
@ManyToOne(optional = false)
private Project project;
@OneToMany(mappedBy = "gradingReport", cascade = {CascadeType.ALL})
private List<GradingCriterion> gradingCriteria = new ArrayList<>();
@Basic
@Column(name = "date_submitted_to_examiner")
private Instant dateSubmittedToExaminer;
// ----------------------------------------------------------------------------------
// JPA-mappings of foreign keys in this table (grading_report) referencing other
// tables.
// ----------------------------------------------------------------------------------
@ManyToOne(optional = false)
private Project project;
// ----------------------------------------------------------------------------------
// JPA-mappings of other tables referencing to this table "grading_report"
// ----------------------------------------------------------------------------------
@OneToMany(mappedBy = "gradingReport", cascade = {CascadeType.ALL})
private List<GradingCriterion> gradingCriteria = new ArrayList<>();
// ----------------------------------------------------------------------------------
// Constructors
// ----------------------------------------------------------------------------------
protected GradingReport() {
// JPA
}
@Override
public void submit() {
super.submit();
setState(State.FINALIZED);
setDateSubmittedToExaminer(Instant.now());
}
public Project getProject() {
return project;
}
GradingReport(Project project) {
this.project = project;
}
void addCriterion(GradingCriterion criterion) {
gradingCriteria.add(criterion);
// ----------------------------------------------------------------------------------
// Properties (Getters and Setters)
// ----------------------------------------------------------------------------------
public State getState() {
return state;
}
public void setState(final State state) {
this.state = state;
}
public Instant getDateSubmittedToExaminer(){
@ -65,12 +85,8 @@ public abstract class GradingReport extends Report {
this.dateSubmittedToExaminer = dateSubmittedToExaminer;
}
public State getState() {
return state;
}
public void setState(final State state) {
this.state = state;
public Project getProject() {
return project;
}
public List<GradingCriterion> getGradingCriteria() {
@ -78,6 +94,21 @@ public abstract class GradingReport extends Report {
return Collections.unmodifiableList(gradingCriteria);
}
// ----------------------------------------------------------------------------------
// Methods Common To All Objects
// ----------------------------------------------------------------------------------
@Override
public String toString() {
return "GradingReport(state=" + this.getState() + ", project=" + this.getProject() + ")";
}
// ----------------------------------------------------------------------------------
// Other Methods
// ----------------------------------------------------------------------------------
void addCriterion(GradingCriterion criterion) {
gradingCriteria.add(criterion);
}
public String getProjectTitle() {
return project.getTitle();
}
@ -106,7 +137,9 @@ public abstract class GradingReport extends Report {
}
@Override
public String toString() {
return "GradingReport(state=" + this.getState() + ", project=" + this.getProject() + ")";
public void submit() {
super.submit();
setState(State.FINALIZED);
setDateSubmittedToExaminer(Instant.now());
}
}

View File

@ -1,26 +1,24 @@
package se.su.dsv.scipro.report;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import se.su.dsv.scipro.project.Project;
import se.su.dsv.scipro.system.User;
import jakarta.persistence.Basic;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import se.su.dsv.scipro.project.Project;
import se.su.dsv.scipro.system.User;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@Entity
@Table(name = "supervisor_grading_report")
public class SupervisorGradingReport extends GradingReport {
private static final Logger LOG = LoggerFactory.getLogger(SupervisorGradingReport.class);
@ManyToOne(optional = false)
private User user;
// ----------------------------------------------------------------------------------
// Basic JPA-mappings
// ----------------------------------------------------------------------------------
@Basic
@Column(name = "rejection_comment")
private String rejectionComment;
@ -33,6 +31,17 @@ public class SupervisorGradingReport extends GradingReport {
@Column(name = "motivation")
private String motivation;
// ----------------------------------------------------------------------------------
// JPA-mappings of foreign keys in this table (grading_criterion) referencing other
// tables.
// ----------------------------------------------------------------------------------
@ManyToOne(optional = false)
@JoinColumn(name = "user_id", referencedColumnName = "id")
private User user;
// ----------------------------------------------------------------------------------
// Constructors
// ----------------------------------------------------------------------------------
protected SupervisorGradingReport() {
// JPA
}
@ -42,6 +51,40 @@ public class SupervisorGradingReport extends GradingReport {
this.user = user;
}
// ----------------------------------------------------------------------------------
// Properties (Getters and Setters)
// ----------------------------------------------------------------------------------
public User getUser() {
return this.user;
}
public String getRejectionComment() {
return rejectionComment;
}
public void setRejectionComment(String rejectionComment) {
this.rejectionComment = rejectionComment;
}
public String getRejectionCommentFeedback() {
return rejectionCommentFeedback;
}
public void setRejectionCommentFeedback(String rejectionCommentFeedback) {
this.rejectionCommentFeedback = rejectionCommentFeedback;
}
public String getMotivation() {
return motivation;
}
public void setMotivation(String motivation) {
this.motivation = motivation;
}
// ----------------------------------------------------------------------------------
// Other Methods
// ----------------------------------------------------------------------------------
public List<GradingCriterion> getProjectCriteria() {
List<GradingCriterion> result = new ArrayList<>();
for (GradingCriterion criterion : getGradingCriteria()) {
@ -82,34 +125,6 @@ public class SupervisorGradingReport extends GradingReport {
return true;
}
public User getUser() {
return this.user;
}
public String getRejectionComment() {
return rejectionComment;
}
public void setRejectionComment(String rejectionComment) {
this.rejectionComment = rejectionComment;
}
public String getRejectionCommentFeedback() {
return rejectionCommentFeedback;
}
public void setRejectionCommentFeedback(String rejectionCommentFeedback) {
this.rejectionCommentFeedback = rejectionCommentFeedback;
}
public String getMotivation() {
return motivation;
}
public void setMotivation(String motivation) {
this.motivation = motivation;
}
public boolean hasProvidedOverallMotivation() {
return getMotivation() != null && !getMotivation().isBlank();
}

View File

@ -2271,24 +2271,112 @@ alter table `criterion`
foreign key (report_id) references report (id)
on delete cascade on update cascade;
-- todo: table: GradingCriterionPoint, except foreign key to becoming table grading_criterion
-- table: GradingCriterionPoint, except foreign key to becoming table grading_criterion
-- todo: table: GradingCriterion, except foreign key to becoming table grading_report
alter table `GradingCriterionPoint` drop foreign key `FK_GradingCriterion_id`;
-- todo: add foreign key reference from grading_criterion_point to grading_criterion
alter table `GradingCriterionPoint` drop key `FK_GradingCriterion_id`;
-- todo: table: SupervisorGradingReport, except foreign key to becoming table grading_report
alter table `GradingCriterionPoint` change `GradingCriterion_id` `grading_criterion_id` bigint(20) not null
after `description_en`;
-- todo: table: ReviewerGradingReport, except foreign key to becoming table grading_report
rename table `GradingCriterionPoint` to `grading_criterion_point`;
-- todo: table: GradingReport
-- table: GradingCriterion, except foreign key to becoming table grading_report
-- todo: add foreign key reference from reviewer_grading_report to grading_report
alter table `GradingCriterion` drop foreign key `FK_k2ynx2lcpdl969alj5nt3f7xx`;
-- todo: add foreign key reference from supervisor_grading_report to grading_report
alter table `GradingCriterion` drop key `FK_k2ynx2lcpdl969alj5nt3f7xx`;
-- todo: add foreign key reference from grading_criterion to grading_report
alter table `GradingCriterion` change `title_sv` `title_sv` varchar(255) not null after `version`;
alter table `GradingCriterion` change `title_en` `title_en` varchar(255) not null default '' after `title_sv`;
alter table `GradingCriterion` change `type` `type` varchar(64) not null after `title_en`;
alter table `GradingCriterion` change `points_required_to_pass` `points_required_to_pass` int(11) not null after `type`;
alter table `GradingCriterion` change `feedback` `feedback` longtext default null after `points`;
alter table `GradingCriterion` change `gradingReport_id` `grading_report_id` bigint(20) not null after `fx`;
rename table `GradingCriterion` to `grading_criterion`;
alter table `grading_criterion`
add constraint fk_grading_criterion_grading_report_id
foreign key (grading_report_id) references grading_report (id)
on delete cascade on update cascade;
-- add foreign key reference from grading_criterion_point to grading_criterion
alter table `grading_criterion_point`
add constraint fk_gcp_grading_criterion_id
foreign key (grading_criterion_id) references grading_criterion (id)
on delete cascade on update cascade;
-- table: SupervisorGradingReport, except foreign key to becoming table grading_report
alter table `SupervisorGradingReport` drop foreign key `supervisor_grading_report_user_id`;
alter table `SupervisorGradingReport` drop foreign key `FK_cwxdypciob8dmndx5elwi3fe5`;
alter table `SupervisorGradingReport` drop key `supervisor_grading_report_user_id`;
alter table `SupervisorGradingReport` drop key `FK_cwxdypciob8dmndx5elwi3fe5`;
rename table `SupervisorGradingReport` to `supervisor_grading_report`;
alter table `supervisor_grading_report`
add constraint fk_sgr_user_id
foreign key (user_id) references user (id)
on delete cascade on update cascade;
-- table: ReviewerGradingReport, except foreign key to becoming table grading_report
alter table `ReviewerGradingReport` drop foreign key `FK_axsaeqbamfc41dhih1s62g998`;
alter table `ReviewerGradingReport` drop key `FK_axsaeqbamfc41dhih1s62g998`;
rename table `ReviewerGradingReport` to `reviewer_grading_report`;
-- table: GradingReport
alter table `GradingReport` drop foreign key `GradingReport_ibfk_1`;
alter table `GradingReport` drop foreign key `FK_6ygpk1qq218jgwuuyx0bp6vui`;
alter table `GradingReport` drop key `FK_6ygpk1qq218jgwuuyx0bp6vui`;
rename table `GradingReport` to `grading_report`;
alter table `grading_report`
add constraint fk_grading_report_id
foreign key (id) references report (id)
on delete cascade on update cascade;
alter table `grading_report`
add constraint fk_grading_report_project_id
foreign key (project_id) references project (id)
on delete cascade on update cascade;
-- add foreign key reference from reviewer_grading_report to grading_report
alter table `reviewer_grading_report`
add constraint fk_reviewer_grading_report_id
foreign key (id) references grading_report (id)
on delete cascade on update cascade;
-- add foreign key reference from supervisor_grading_report to grading_report
alter table `supervisor_grading_report`
add constraint fk_sgr_id
foreign key (id) references grading_report (id)
on delete cascade on update cascade;
-- add foreign key reference from grading_criterion to grading_report
alter table `grading_criterion`
add constraint fk_grading_criterion_grading_report_id
foreign key (grading_report_id) references grading_report (id)
on delete cascade on update cascade;
/*
* Step 15: project and related tables
*/
-- todo:
/*
* Step XX: Many-to-Many tables between project and user.