ClassSession.java
package com.wavii.model;
import jakarta.persistence.*;
import lombok.*;
import java.time.LocalDateTime;
import java.util.UUID;
/**
* Entidad que representa una sesión de clase individual (clase particular).
* Contiene la fecha, duración, estado y enlace de la reunión.
*/
@Entity
@Table(name = "class_sessions")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ClassSession {
@Id
@GeneratedValue(strategy = GenerationType.UUID)
private UUID id;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "enrollment_id", nullable = false)
private ClassEnrollment enrollment;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "teacher_id", nullable = false)
private User teacher;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "student_id", nullable = false)
private User student;
@Column(nullable = false)
private LocalDateTime scheduledAt;
@Column(nullable = false)
@Builder.Default
private Integer durationMinutes = 60;
@Column(length = 30, nullable = false)
@Builder.Default
private String status = "scheduled";
@Column(length = 300)
private String meetingUrl;
@Column(length = 500)
private String notes;
@Column(nullable = false, updatable = false)
@Builder.Default
private LocalDateTime createdAt = LocalDateTime.now();
@Builder.Default
private LocalDateTime updatedAt = LocalDateTime.now();
@PreUpdate
void onUpdate() {
updatedAt = LocalDateTime.now();
}
}