Create Ticket Validation Entity
In this lesson, we'll create the ticket validation entity that records the validation of a ticket when attendees enter an event.
This entity tracks important details like the validation method used (QR code scan or manual) and the validation status, forming a key part of our ticket management system.
Creating the Ticket Validation Entity
The TicketValidation entity represents a single validation attempt of a ticket:
@Entity
@Table(name = "ticket_validations")
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class TicketValidation {
@Id
@Column(name = "id", nullable = false, updatable = false)
@GeneratedValue(strategy = GenerationType.UUID)
private UUID id;
@Column(name = "status", nullable = false)
@Enumerated(EnumType.STRING)
private TicketValidationStatusEnum status;
@Column(name = "validation_method", nullable = false)
@Enumerated(EnumType.STRING)
private TicketValidationMethod validationMethod;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ticket_id")
private Ticket ticket;
@CreatedDate
@Column(name = "created_at", updatable = false, nullable = false)
private LocalDateTime createdAt;
@LastModifiedDate
@Column(name = "updated_at", nullable = false)
private LocalDateTime updatedAt;
}Establishing the Relationship with Ticket
We need to update the Ticket class to maintain the relationship with its validations:
@Entity
@Table(name = "tickets")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Ticket {
@Id
@Column(name = "id", nullable = false, updatable = false)
@GeneratedValue(strategy = GenerationType.UUID)
private UUID id;
@Column(name = "status", nullable = false)
@Enumerated(EnumType.STRING)
private TicketStatusEnum status;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ticket_type_id")
private TicketType ticketType;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "purchaser_id")
private User purchaser;
@OneToMany(mappedBy = "ticket", cascade = CascadeType.ALL)
private List<TicketValidation> validations = new ArrayList<>();
// TODO: QrCode
@CreatedDate
@Column(name = "created_at", updatable = false, nullable = false)
private LocalDateTime createdAt;
@LastModifiedDate
@Column(name = "updated_at", nullable = false)
private LocalDateTime updatedAt;
}Summary
- Created
TicketValidationclass to model a ticket being validated at the event - Added
validationsreference to theTicketclass