package ru.mcs.diary.group;
import jakarta.persistence.*;
import lombok.*;
import ru.mcs.diary.common.BaseEntity;
import ru.mcs.diary.schedule.Lesson;
import ru.mcs.diary.schedule.Schedule;
import ru.mcs.diary.student.Student;
import ru.mcs.diary.teacher.Teacher;
import java.util.HashSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@Entity
@Table(name = "study_groups")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class StudyGroup extends BaseEntity {
@Column(nullable = false, length = 100)
private String name;
@Column(columnDefinition = "TEXT")
private String description;
@Enumerated(EnumType.STRING)
@Column(name = "grade_scale", nullable = false, length = 20)
@Builder.Default
private GradeScale gradeScale = GradeScale.FIVE_POINT;
@Builder.Default
private Boolean active = true;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "teacher_id", nullable = false)
private Teacher teacher;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "subject_id", nullable = false)
private Subject subject;
@ManyToMany
@JoinTable(
name = "student_groups",
joinColumns = @JoinColumn(name = "group_id"),
inverseJoinColumns = @JoinColumn(name = "student_id")
)
@Builder.Default
private Set<Student> students = new HashSet<>();
@OneToMany(mappedBy = "group", cascade = CascadeType.ALL, orphanRemoval = true)
@Builder.Default
private List<Schedule> schedules = new ArrayList<>();
@OneToMany(mappedBy = "group", cascade = CascadeType.ALL)
@Builder.Default
private List<Lesson> lessons = new ArrayList<>();
public void addStudent(Student student) {
students.add(student);
student.getGroups().add(this);
}
public void removeStudent(Student student) {
students.remove(student);
student.getGroups().remove(this);
}
}