ApiCourseKey.java
package edu.ucsb.cs156.frontiers.entities;
import jakarta.persistence.*;
import java.time.ZonedDateTime;
import lombok.*;
@Data
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Builder
@Entity
@Table(name = "api_course_key")
public class ApiCourseKey {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "course_id", nullable = false)
@ToString.Exclude
private Course course;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "created_by_id", nullable = false)
@ToString.Exclude
private User createdBy;
@Column(nullable = false)
private String keyHash;
@Column(nullable = false)
private String salt;
@Column(nullable = false)
private String keySuffix;
@Column(nullable = false)
private ZonedDateTime createdAt;
@Column(nullable = false)
private ZonedDateTime expiresAt;
@Builder.Default
@Column(nullable = false)
private boolean revoked = false;
private ZonedDateTime lastUsedAt;
@Builder.Default
@Column(nullable = false)
private long usageCount = 0;
public boolean isActive(ZonedDateTime now) {
return !revoked && now.isBefore(expiresAt);
}
}