oep backend model
model - course, customerusers,enrollment, enrollementid, user
package com.example.OepAchievers.Model;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import jakarta.persistence.*;
import java.math.BigDecimal;
import java.util.HashSet;
import java.util.Set;
import java.util.Objects;
@Entity
@Table(name = "courses")
public class Course {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String title;
@Column(length = 1000)
private String description;
private BigDecimal price;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "instructor_id")
@JsonIgnoreProperties({"coursesTeaching", "enrollments", "hibernateLazyInitializer", "handler"})
private User instructor;
@Enumerated(EnumType.STRING)
private CourseStatus status = CourseStatus.DRAFT;
@OneToMany(mappedBy = "course", cascade = CascadeType.ALL)
@JsonIgnoreProperties("course")
private Set<Enrollment> enrollments = new HashSet<>();
public enum CourseStatus {
DRAFT, PUBLISHED, ARCHIVED
}
// Constructors
public Course() {}
public Course(String title, String description, BigDecimal price, User instructor) {
this.title = title;
this.description = description;
this.price = price;
this.instructor = instructor;
}
// Getters
public Long getId() {
return id;
}
public String getTitle() {
return title;
}
public String getDescription() {
return description;
}
public BigDecimal getPrice() {
return price;
}
public User getInstructor() {
return instructor;
}
public CourseStatus getStatus() {
return status;
}
public Set<Enrollment> getEnrollments() {
return enrollments;
}
// Setters
public void setId(Long id) {
this.id = id;
}
public void setTitle(String title) {
this.title = title;
}
public void setDescription(String description) {
this.description = description;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public void setInstructor(User instructor) {
this.instructor = instructor;
}
public void setStatus(CourseStatus status) {
this.status = status;
}
public void setEnrollments(Set<Enrollment> enrollments) {
this.enrollments = enrollments;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Course)) return false;
Course course = (Course) o;
return Objects.equals(id, course.id);
}
@Override
public int hashCode() {
return Objects.hash(id);
}
}
package com.example.OepAchievers.Model;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import java.util.Collection;
import java.util.List;
public class CustomUsers implements UserDetails {
private final User user;
// public final List<GrantedAuthority> authorities;
public CustomUsers(User user) {
this.user = user;
// this.authorities = List.of(new SimpleGrantedAuthority(user.getRole().name()));
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return List.of(new SimpleGrantedAuthority(user.getRole().name()));
}
@Override
public String getPassword() {
return user.getPassword();
}
@Override
public String getUsername() {
return user.getUsername();
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
}
package com.example.OepAchievers.Model;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import jakarta.persistence.*;
import java.time.LocalDateTime;
import java.util.Objects;
@Entity
@Table(name = "enrollments")
public class Enrollment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "student_id")
@JsonIgnoreProperties({"enrollments", "coursesTeaching", "hibernateLazyInitializer", "handler"})
private User student;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "course_id")
@JsonIgnoreProperties({"enrollments", "instructor", "hibernateLazyInitializer", "handler"})
private Course course;
@Column(nullable = false)
private LocalDateTime enrollmentDate = LocalDateTime.now();
@Enumerated(EnumType.STRING)
private EnrollmentStatus status = EnrollmentStatus.ACTIVE;
private Double progress = 0.0;
public enum EnrollmentStatus {
ACTIVE, COMPLETED, DROPPED
}
// Constructors
public Enrollment() {}
public Enrollment(User student, Course course) {
this.student = student;
this.course = course;
}
// Getters
public Long getId() {
return id;
}
public User getStudent() {
return student;
}
public Course getCourse() {
return course;
}
public LocalDateTime getEnrollmentDate() {
return enrollmentDate;
}
public EnrollmentStatus getStatus() {
return status;
}
public Double getProgress() {
return progress;
}
// Setters
public void setId(Long id) {
this.id = id;
}
public void setStudent(User student) {
this.student = student;
}
public void setCourse(Course course) {
this.course = course;
}
public void setEnrollmentDate(LocalDateTime enrollmentDate) {
this.enrollmentDate = enrollmentDate;
}
public void setStatus(EnrollmentStatus status) {
this.status = status;
}
public void setProgress(Double progress) {
this.progress = progress;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Enrollment)) return false;
Enrollment that = (Enrollment) o;
return Objects.equals(id, that.id);
}
@Override
public int hashCode() {
return Objects.hash(id);
}
}
package com.example.OepAchievers.Model;
import jakarta.persistence.Embeddable;
import java.io.Serializable;
import java.util.Objects;
@Embeddable
public class EnrollmentId implements Serializable {
private Long studentId;
private String courseId;
// Constructors
public EnrollmentId() {}
public EnrollmentId(Long studentId, String courseId) {
this.studentId = studentId;
this.courseId = courseId;
}
// Getters
public Long getStudentId() {
return studentId;
}
public String getCourseId() {
return courseId;
}
// Setters
public void setStudentId(Long studentId) {
this.studentId = studentId;
}
public void setCourseId(String courseId) {
this.courseId = courseId;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof EnrollmentId)) return false;
EnrollmentId that = (EnrollmentId) o;
return Objects.equals(studentId, that.studentId) &&
Objects.equals(courseId, that.courseId);
}
@Override
public int hashCode() {
return Objects.hash(studentId, courseId);
}
}
package com.example.OepAchievers.Model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import jakarta.persistence.*;
import java.util.HashSet;
import java.util.Set;
import java.util.Objects;
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String email;
private String password;
private String username;
@Enumerated(EnumType.STRING)
private Role role;
private boolean active = true;
@OneToMany(mappedBy = "instructor")
// @JsonIgnoreProperties({"instructor", "enrollments"})
private Set<Course> coursesTeaching = new HashSet<>();
@OneToMany(mappedBy = "student")
// @JsonIgnoreProperties("student")
private Set<Enrollment> enrollments = new HashSet<>();
public enum Role {
STUDENT, INSTRUCTOR, ADMIN
}
// Constructors
public User() {}
public User(String email, String password, String username, Role role) {
this.email = email;
this.password = password;
this.username = username;
this.role = role;
}
// Getters
public Long getId() {
return id;
}
public String getEmail() {
return email;
}
public String getPassword() {
return password;
}
public String getUsername() {
return username;
}
public Role getRole() {
return role;
}
public boolean isActive() {
return active;
}
public Set<Course> getCoursesTeaching() {
return coursesTeaching;
}
public Set<Enrollment> getEnrollments() {
return enrollments;
}
// Setters
public void setId(Long id) {
this.id = id;
}
public void setEmail(String email) {
this.email = email;
}
public void setPassword(String password) {
this.password = password;
}
public void setUsername(String username) {
this.username = username;
}
public void setRole(Role role) {
this.role = role;
}
public void setActive(boolean active) {
this.active = active;
}
public void setCoursesTeaching(Set<Course> coursesTeaching) {
this.coursesTeaching = coursesTeaching;
}
public void setEnrollments(Set<Enrollment> enrollments) {
this.enrollments = enrollments;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof User)) return false;
User user = (User) o;
return Objects.equals(id, user.id);
}
@Override
public int hashCode() {
return Objects.hash(id);
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", email='" + email + '\'' +
", password='" + password + '\'' +
", username='" + username + '\'' +
", role=" + role +
", active=" + active +
", coursesTeaching=" + coursesTeaching +
", enrollments=" + enrollments +
'}';
}
}