Switched to mysql implementation and added persistence for students.
This commit is contained in:
		
							parent
							
								
									df92a2c2d5
								
							
						
					
					
						commit
						d9d9a51707
					
				| 
						 | 
					@ -1,34 +0,0 @@
 | 
				
			||||||
package nl.andrewlalis.teaching_assistant_assistant.config;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
 | 
					 | 
				
			||||||
import org.springframework.boot.jdbc.DataSourceBuilder;
 | 
					 | 
				
			||||||
import org.springframework.context.annotation.Bean;
 | 
					 | 
				
			||||||
import org.springframework.context.annotation.Configuration;
 | 
					 | 
				
			||||||
import org.springframework.context.annotation.Primary;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import javax.sql.DataSource;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * Configures the data source for this application.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
@Configuration
 | 
					 | 
				
			||||||
public class DataSourceConfig {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private static final String USERNAME = "root";
 | 
					 | 
				
			||||||
    private static final String PASSWORD = "root";
 | 
					 | 
				
			||||||
    private static final String DB_HOST = "localhost";
 | 
					 | 
				
			||||||
    private static final String DB_NAME = "teaching_assistant_assistant";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @ConfigurationProperties(prefix = "spring.datasource")
 | 
					 | 
				
			||||||
    @Bean
 | 
					 | 
				
			||||||
    @Primary
 | 
					 | 
				
			||||||
    public DataSource getDataSource() {
 | 
					 | 
				
			||||||
        return DataSourceBuilder
 | 
					 | 
				
			||||||
                .create()
 | 
					 | 
				
			||||||
                .url("jdbc:h2:~/" + DB_NAME)
 | 
					 | 
				
			||||||
                .username(USERNAME)
 | 
					 | 
				
			||||||
                .password(PASSWORD)
 | 
					 | 
				
			||||||
                .build();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -3,7 +3,8 @@ package nl.andrewlalis.teaching_assistant_assistant.controllers.courses;
 | 
				
			||||||
import nl.andrewlalis.teaching_assistant_assistant.model.Course;
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.Course;
 | 
				
			||||||
import nl.andrewlalis.teaching_assistant_assistant.model.people.teams.StudentTeam;
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.people.teams.StudentTeam;
 | 
				
			||||||
import nl.andrewlalis.teaching_assistant_assistant.model.repositories.CourseRepository;
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.repositories.CourseRepository;
 | 
				
			||||||
import nl.andrewlalis.teaching_assistant_assistant.model.repositories.TeamRepository;
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.repositories.StudentRepository;
 | 
				
			||||||
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.repositories.StudentTeamRepository;
 | 
				
			||||||
import nl.andrewlalis.teaching_assistant_assistant.util.team_importing.StudentTeamImporter;
 | 
					import nl.andrewlalis.teaching_assistant_assistant.util.team_importing.StudentTeamImporter;
 | 
				
			||||||
import org.springframework.stereotype.Controller;
 | 
					import org.springframework.stereotype.Controller;
 | 
				
			||||||
import org.springframework.ui.Model;
 | 
					import org.springframework.ui.Model;
 | 
				
			||||||
| 
						 | 
					@ -25,11 +26,14 @@ public class ImportStudents {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private CourseRepository courseRepository;
 | 
					    private CourseRepository courseRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private TeamRepository teamRepository;
 | 
					    private StudentTeamRepository studentTeamRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected ImportStudents(CourseRepository courseRepository, TeamRepository teamRepository) {
 | 
					    private StudentRepository studentRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected ImportStudents(CourseRepository courseRepository, StudentTeamRepository studentTeamRepository, StudentRepository studentRepository) {
 | 
				
			||||||
        this.courseRepository = courseRepository;
 | 
					        this.courseRepository = courseRepository;
 | 
				
			||||||
        this.teamRepository = teamRepository;
 | 
					        this.studentTeamRepository = studentTeamRepository;
 | 
				
			||||||
 | 
					        this.studentRepository = studentRepository;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @GetMapping("/courses/{code}/import_students")
 | 
					    @GetMapping("/courses/{code}/import_students")
 | 
				
			||||||
| 
						 | 
					@ -50,8 +54,33 @@ public class ImportStudents {
 | 
				
			||||||
            return "redirect:/courses";
 | 
					            return "redirect:/courses";
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Course course = optionalCourse.get();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            List<StudentTeam> studentTeams = StudentTeamImporter.importFromCSV(file.getInputStream(), optionalCourse.get());
 | 
					            List<StudentTeam> studentTeams = StudentTeamImporter.importFromCSV(file.getInputStream(), optionalCourse.get());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Save all the new students first, then save all the teams they belong to.
 | 
				
			||||||
 | 
					            for (StudentTeam team : studentTeams) {
 | 
				
			||||||
 | 
					                team.getMembers().forEach(student -> student.assignToCourse(course));
 | 
				
			||||||
 | 
					                this.studentRepository.saveAll(team.getStudents());
 | 
				
			||||||
 | 
					                team.setCourse(course);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            studentTeams.forEach(team -> {
 | 
				
			||||||
 | 
					                team.getMembers().forEach(student -> {
 | 
				
			||||||
 | 
					                    student.assignToCourse(course);
 | 
				
			||||||
 | 
					                    course.addParticipant(student);
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					                team.setCourse(course);
 | 
				
			||||||
 | 
					                course.addStudentTeam(team);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                //this.studentRepository.saveAll((team.getMembers()));
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //this.studentTeamRepository.saveAll(studentTeams);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            this.courseRepository.save(course);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        } catch (IOException e) {
 | 
					        } catch (IOException e) {
 | 
				
			||||||
            e.printStackTrace();
 | 
					            e.printStackTrace();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,8 @@
 | 
				
			||||||
package nl.andrewlalis.teaching_assistant_assistant.model;
 | 
					package nl.andrewlalis.teaching_assistant_assistant.model;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import nl.andrewlalis.teaching_assistant_assistant.model.assignments.Assignment;
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.assignments.Assignment;
 | 
				
			||||||
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.people.Person;
 | 
				
			||||||
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.people.Student;
 | 
				
			||||||
import nl.andrewlalis.teaching_assistant_assistant.model.people.teams.StudentTeam;
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.people.teams.StudentTeam;
 | 
				
			||||||
import nl.andrewlalis.teaching_assistant_assistant.model.people.teams.TeachingAssistantTeam;
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.people.teams.TeachingAssistantTeam;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -57,6 +59,19 @@ public class Course extends BasicEntity {
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
    private List<TeachingAssistantTeam> teachingAssistantTeams;
 | 
					    private List<TeachingAssistantTeam> teachingAssistantTeams;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * The list of all participants in this course, both teaching assistants and students.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    @ManyToMany(
 | 
				
			||||||
 | 
					            cascade = CascadeType.ALL
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    @JoinTable(
 | 
				
			||||||
 | 
					            name = "course_participants",
 | 
				
			||||||
 | 
					            joinColumns = @JoinColumn(name = "course_id"),
 | 
				
			||||||
 | 
					            inverseJoinColumns = @JoinColumn(name = "person_id")
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    private List<Person> participants;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Default constructor for JPA.
 | 
					     * Default constructor for JPA.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
| 
						 | 
					@ -64,6 +79,7 @@ public class Course extends BasicEntity {
 | 
				
			||||||
        this.assignments = new ArrayList<>();
 | 
					        this.assignments = new ArrayList<>();
 | 
				
			||||||
        this.studentTeams = new ArrayList<>();
 | 
					        this.studentTeams = new ArrayList<>();
 | 
				
			||||||
        this.teachingAssistantTeams = new ArrayList<>();
 | 
					        this.teachingAssistantTeams = new ArrayList<>();
 | 
				
			||||||
 | 
					        this.participants = new ArrayList<>();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
| 
						 | 
					@ -85,6 +101,12 @@ public class Course extends BasicEntity {
 | 
				
			||||||
        this.teachingAssistantTeams.add(team);
 | 
					        this.teachingAssistantTeams.add(team);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void addParticipant(Person person) {
 | 
				
			||||||
 | 
					        if (!this.participants.contains(person)) {
 | 
				
			||||||
 | 
					            this.participants.add(person);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /*
 | 
					    /*
 | 
				
			||||||
    Getters and Setters
 | 
					    Getters and Setters
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
| 
						 | 
					@ -109,6 +131,16 @@ public class Course extends BasicEntity {
 | 
				
			||||||
        return teachingAssistantTeams;
 | 
					        return teachingAssistantTeams;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public List<Student> getStudents() {
 | 
				
			||||||
 | 
					        List<Student> students = new ArrayList<>();
 | 
				
			||||||
 | 
					        this.participants.forEach(participant -> {
 | 
				
			||||||
 | 
					            if (participant instanceof Student) {
 | 
				
			||||||
 | 
					                students.add((Student) participant);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        return students;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public String toString() {
 | 
					    public String toString() {
 | 
				
			||||||
        StringBuilder sb = new StringBuilder(this.getName()).append('\n');
 | 
					        StringBuilder sb = new StringBuilder(this.getName()).append('\n');
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,7 @@
 | 
				
			||||||
package nl.andrewlalis.teaching_assistant_assistant.model.people;
 | 
					package nl.andrewlalis.teaching_assistant_assistant.model.people;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import nl.andrewlalis.teaching_assistant_assistant.model.BasicEntity;
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.BasicEntity;
 | 
				
			||||||
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.Course;
 | 
				
			||||||
import nl.andrewlalis.teaching_assistant_assistant.model.people.teams.Team;
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.people.teams.Team;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import javax.persistence.*;
 | 
					import javax.persistence.*;
 | 
				
			||||||
| 
						 | 
					@ -41,11 +42,21 @@ public abstract class Person extends BasicEntity {
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
    private List<Team> teams;
 | 
					    private List<Team> teams;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * The list of courses that this person belongs to.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    @ManyToMany(
 | 
				
			||||||
 | 
					            fetch = FetchType.LAZY,
 | 
				
			||||||
 | 
					            mappedBy = "participants"
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    private List<Course> courses;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Default constructor for JPA.
 | 
					     * Default constructor for JPA.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    protected Person () {
 | 
					    protected Person () {
 | 
				
			||||||
        this.teams = new ArrayList<>();
 | 
					        this.teams = new ArrayList<>();
 | 
				
			||||||
 | 
					        this.courses = new ArrayList<>();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
| 
						 | 
					@ -64,8 +75,16 @@ public abstract class Person extends BasicEntity {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void assignToTeam(Team team) {
 | 
					    public void assignToTeam(Team team) {
 | 
				
			||||||
 | 
					        if (!this.teams.contains(team)) {
 | 
				
			||||||
            this.teams.add(team);
 | 
					            this.teams.add(team);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void assignToCourse(Course course) {
 | 
				
			||||||
 | 
					        if (!this.courses.contains(course)) {
 | 
				
			||||||
 | 
					            this.courses.add(course);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /*
 | 
					    /*
 | 
				
			||||||
    Getters and Setters
 | 
					    Getters and Setters
 | 
				
			||||||
| 
						 | 
					@ -91,6 +110,10 @@ public abstract class Person extends BasicEntity {
 | 
				
			||||||
        return this.githubUsername;
 | 
					        return this.githubUsername;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public List<Course> getCourses() {
 | 
				
			||||||
 | 
					        return this.courses;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Determines if two Persons are equal. They are considered equal when all of the basic identifying information
 | 
					     * Determines if two Persons are equal. They are considered equal when all of the basic identifying information
 | 
				
			||||||
     * about the person is the same, regardless of case.
 | 
					     * about the person is the same, regardless of case.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,18 +1,20 @@
 | 
				
			||||||
package nl.andrewlalis.teaching_assistant_assistant.model.people.teams;
 | 
					package nl.andrewlalis.teaching_assistant_assistant.model.people.teams;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import nl.andrewlalis.teaching_assistant_assistant.model.assignments.grades.AssignmentGrade;
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.assignments.grades.AssignmentGrade;
 | 
				
			||||||
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.people.Person;
 | 
				
			||||||
import nl.andrewlalis.teaching_assistant_assistant.model.people.Student;
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.people.Student;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import javax.persistence.Entity;
 | 
					import javax.persistence.Entity;
 | 
				
			||||||
import javax.persistence.FetchType;
 | 
					import javax.persistence.FetchType;
 | 
				
			||||||
import javax.persistence.OneToMany;
 | 
					import javax.persistence.OneToMany;
 | 
				
			||||||
 | 
					import java.util.ArrayList;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * A group of students.
 | 
					 * A group of students.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@Entity
 | 
					@Entity
 | 
				
			||||||
public class StudentTeam extends Team<Student> {
 | 
					public class StudentTeam extends Team {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * The list of assignment grades which this student group has received.
 | 
					     * The list of assignment grades which this student group has received.
 | 
				
			||||||
| 
						 | 
					@ -27,8 +29,13 @@ public class StudentTeam extends Team<Student> {
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public StudentTeam() {}
 | 
					    public StudentTeam() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    public List<Student> getStudents() {
 | 
				
			||||||
    public void addMember(Student person) {
 | 
					        List<Person> people = super.getMembers();
 | 
				
			||||||
        this.getMembers().add(person);
 | 
					        List<Student> students = new ArrayList<>();
 | 
				
			||||||
 | 
					        people.forEach(person -> {
 | 
				
			||||||
 | 
					            students.add((Student) person);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        return students;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,7 @@
 | 
				
			||||||
package nl.andrewlalis.teaching_assistant_assistant.model.people.teams;
 | 
					package nl.andrewlalis.teaching_assistant_assistant.model.people.teams;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import nl.andrewlalis.teaching_assistant_assistant.model.assignments.grades.SectionGrade;
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.assignments.grades.SectionGrade;
 | 
				
			||||||
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.people.Person;
 | 
				
			||||||
import nl.andrewlalis.teaching_assistant_assistant.model.people.TeachingAssistant;
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.people.TeachingAssistant;
 | 
				
			||||||
import nl.andrewlalis.teaching_assistant_assistant.model.people.TeachingAssistantRole;
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.people.TeachingAssistantRole;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,13 +9,14 @@ import javax.persistence.Column;
 | 
				
			||||||
import javax.persistence.Entity;
 | 
					import javax.persistence.Entity;
 | 
				
			||||||
import javax.persistence.JoinColumn;
 | 
					import javax.persistence.JoinColumn;
 | 
				
			||||||
import javax.persistence.OneToMany;
 | 
					import javax.persistence.OneToMany;
 | 
				
			||||||
 | 
					import java.util.ArrayList;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * A group of teaching assistants.
 | 
					 * A group of teaching assistants.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@Entity
 | 
					@Entity
 | 
				
			||||||
public class TeachingAssistantTeam extends Team<TeachingAssistant> {
 | 
					public class TeachingAssistantTeam extends Team {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * The role that this teaching assistant team plays.
 | 
					     * The role that this teaching assistant team plays.
 | 
				
			||||||
| 
						 | 
					@ -33,8 +35,10 @@ public class TeachingAssistantTeam extends Team<TeachingAssistant> {
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public TeachingAssistantTeam() {}
 | 
					    public TeachingAssistantTeam() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    public List<TeachingAssistant> getTeachingAssistants() {
 | 
				
			||||||
    public void addMember(TeachingAssistant person) {
 | 
					        List<Person> people = super.getMembers();
 | 
				
			||||||
        this.getMembers().add(person);
 | 
					        List<TeachingAssistant> teachingAssistants = new ArrayList<>(people.size());
 | 
				
			||||||
 | 
					        people.forEach(person -> teachingAssistants.add((TeachingAssistant) person));
 | 
				
			||||||
 | 
					        return teachingAssistants;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,7 +17,7 @@ import java.util.List;
 | 
				
			||||||
@Inheritance(
 | 
					@Inheritance(
 | 
				
			||||||
        strategy = InheritanceType.JOINED
 | 
					        strategy = InheritanceType.JOINED
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
public abstract class Team<P extends Person> extends BasicEntity {
 | 
					public abstract class Team extends BasicEntity {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * The list of members in this group.
 | 
					     * The list of members in this group.
 | 
				
			||||||
| 
						 | 
					@ -30,7 +30,7 @@ public abstract class Team<P extends Person> extends BasicEntity {
 | 
				
			||||||
            joinColumns = @JoinColumn(name = "team_id"),
 | 
					            joinColumns = @JoinColumn(name = "team_id"),
 | 
				
			||||||
            inverseJoinColumns = @JoinColumn(name = "person_id")
 | 
					            inverseJoinColumns = @JoinColumn(name = "person_id")
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
    protected List<P> members;
 | 
					    protected List<Person> members;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * The course that this team belongs to. A team cannot exist on its own, it must belong to a course.
 | 
					     * The course that this team belongs to. A team cannot exist on its own, it must belong to a course.
 | 
				
			||||||
| 
						 | 
					@ -47,23 +47,23 @@ public abstract class Team<P extends Person> extends BasicEntity {
 | 
				
			||||||
        this.members = new ArrayList<>();
 | 
					        this.members = new ArrayList<>();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void addMember(P person) {
 | 
					    public void addMember(Person person) {
 | 
				
			||||||
        if (!this.containsMember(person)) {
 | 
					        if (!this.containsMember(person)) {
 | 
				
			||||||
            this.members.add(person);
 | 
					            this.members.add(person);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void addMembers(List<P> people) {
 | 
					    public void addMembers(List<Person> people) {
 | 
				
			||||||
        for (P person : people) {
 | 
					        for (Person person : people) {
 | 
				
			||||||
            this.addMember(person);
 | 
					            this.addMember(person);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public boolean containsMember(P person) {
 | 
					    public boolean containsMember(Person person) {
 | 
				
			||||||
        return this.members.contains(person);
 | 
					        return this.members.contains(person);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void removeMember(P person) {
 | 
					    public void removeMember(Person person) {
 | 
				
			||||||
        this.members.remove(person);
 | 
					        this.members.remove(person);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -79,7 +79,7 @@ public abstract class Team<P extends Person> extends BasicEntity {
 | 
				
			||||||
     * Gets a list of all members of this team.
 | 
					     * Gets a list of all members of this team.
 | 
				
			||||||
     * @return A list of all the members in this team.
 | 
					     * @return A list of all the members in this team.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public List<P> getMembers() {
 | 
					    public List<Person> getMembers() {
 | 
				
			||||||
        return this.members;
 | 
					        return this.members;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -90,7 +90,7 @@ public abstract class Team<P extends Person> extends BasicEntity {
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public String toString() {
 | 
					    public String toString() {
 | 
				
			||||||
        StringBuilder sb = new StringBuilder();
 | 
					        StringBuilder sb = new StringBuilder();
 | 
				
			||||||
        for (P p : this.getMembers()) {
 | 
					        for (Person p : this.getMembers()) {
 | 
				
			||||||
            sb.append(p.getFullName()).append(", ");
 | 
					            sb.append(p.getFullName()).append(", ");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return sb.toString();
 | 
					        return sb.toString();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,17 @@
 | 
				
			||||||
 | 
					package nl.andrewlalis.teaching_assistant_assistant.model.repositories;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.people.Student;
 | 
				
			||||||
 | 
					import org.springframework.data.repository.CrudRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Optional;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public interface StudentRepository extends CrudRepository<Student, Long> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Tries to find a student by its unique student number.
 | 
				
			||||||
 | 
					     * @param studentNumber The student number to search for.
 | 
				
			||||||
 | 
					     * @return An optional Student object.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public Optional<Student> findByStudentNumber(int studentNumber);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					package nl.andrewlalis.teaching_assistant_assistant.model.repositories;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.people.teams.StudentTeam;
 | 
				
			||||||
 | 
					import org.springframework.data.repository.CrudRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public interface StudentTeamRepository extends CrudRepository<StudentTeam, Long> {
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,10 @@
 | 
				
			||||||
spring.jpa.hibernate.ddl-auto=create
 | 
					spring.jpa.hibernate.ddl-auto=create-drop
 | 
				
			||||||
#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
 | 
					spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
 | 
				
			||||||
 | 
					spring.datasource.username=root
 | 
				
			||||||
#spring.jpa.properties.hibernate.show_sql=true
 | 
					spring.datasource.password=root
 | 
				
			||||||
 | 
					spring.datasource.url=jdbc:mysql://localhost:3306/teaching_assistant_assistant?serverTimezone=UTC
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#spring.jpa.properties.hibernate.show_sql=false
 | 
				
			||||||
#spring.jpa.properties.hibernate.use_sql_comments=true
 | 
					#spring.jpa.properties.hibernate.use_sql_comments=true
 | 
				
			||||||
#spring.jpa.properties.hibernate.format_sql=true
 | 
					#spring.jpa.properties.hibernate.format_sql=true
 | 
				
			||||||
#spring.jpa.properties.hibernate.type=trace
 | 
					#spring.jpa.properties.hibernate.type=trace
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,6 +11,7 @@
 | 
				
			||||||
            <th>Name</th>
 | 
					            <th>Name</th>
 | 
				
			||||||
            <th>Code</th>
 | 
					            <th>Code</th>
 | 
				
			||||||
            <th>Created at</th>
 | 
					            <th>Created at</th>
 | 
				
			||||||
 | 
					            <th>Students</th>
 | 
				
			||||||
        </tr>
 | 
					        </tr>
 | 
				
			||||||
        <tr th:each="course: ${courses}">
 | 
					        <tr th:each="course: ${courses}">
 | 
				
			||||||
            <td>
 | 
					            <td>
 | 
				
			||||||
| 
						 | 
					@ -18,6 +19,7 @@
 | 
				
			||||||
            </td>
 | 
					            </td>
 | 
				
			||||||
            <td th:text="${course.getCode()}"></td>
 | 
					            <td th:text="${course.getCode()}"></td>
 | 
				
			||||||
            <td th:text="${course.getCreatedOn()}"></td>
 | 
					            <td th:text="${course.getCreatedOn()}"></td>
 | 
				
			||||||
 | 
					            <td th:text="${course.getStudents().size()}"></td>
 | 
				
			||||||
        </tr>
 | 
					        </tr>
 | 
				
			||||||
    </table>
 | 
					    </table>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,6 +41,22 @@
 | 
				
			||||||
            </td>
 | 
					            </td>
 | 
				
			||||||
        </tr>
 | 
					        </tr>
 | 
				
			||||||
    </table>
 | 
					    </table>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <h3>All Students (<span th:text="${course.getStudents().size()}"></span>):</h3>
 | 
				
			||||||
 | 
					    <table>
 | 
				
			||||||
 | 
					        <tr th:each="student: ${course.getStudents()}">
 | 
				
			||||||
 | 
					            <td>
 | 
				
			||||||
 | 
					                <a
 | 
				
			||||||
 | 
					                    th:href="@{/students/{student_id}
 | 
				
			||||||
 | 
					                    (student_id=${student.getId()})}">
 | 
				
			||||||
 | 
					                    Student <span th:text="${student.getId()}"></span>
 | 
				
			||||||
 | 
					                </a>
 | 
				
			||||||
 | 
					            </td>
 | 
				
			||||||
 | 
					            <td th:text="${student.getFullName()}"></td>
 | 
				
			||||||
 | 
					            <td th:text="${student.getStudentNumber()}"></td>
 | 
				
			||||||
 | 
					            <td th:text="${student.getEmailAddress()}"></td>
 | 
				
			||||||
 | 
					        </tr>
 | 
				
			||||||
 | 
					    </table>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<div id="sidebar">
 | 
					<div id="sidebar">
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue