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 +
            '}';
}

}