GradeHistory.java

package edu.ucsb.cs156.courses.entities;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import jakarta.persistence.UniqueConstraint;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * GradeHistory - Entity for grade history data. Each object represents one row from the CSV files
 * located in this repository: <a href=
 * "https://github.com/rtora/UCSB_Grades">https://github.com/rtora/UCSB_Grades</a>
 *
 * <p>There is a unique constraint on the combination of year, quarter, subjectArea, course,
 * instructor, and grade, since we do not want duplicate rows of data for the same course.
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity(name = "historygrade")
@Table(
    uniqueConstraints = {
      @UniqueConstraint(
          name = "UniqueGradeHistory",
          columnNames = {"yyyyq", "course", "instructor", "grade", "count"})
    })
public class GradeHistory {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  private String yyyyq;
  private String course;
  private String instructor;
  private String grade;
  private int count;

  public String getSubjectArea() {
    if (course == null) return null;
    return course.substring(0, 8).trim();
  }

  public String getCourseNum() {
    if (course == null) return null;
    return course.substring(8).trim();
  }
}