Create Event Entity
In a ticketing platform, events are central to everything - they're what people buy tickets for and attend. Let's create the event entity which will store all the important information about events in our system.
Create the Event Entity
The event entity needs to store basic event details and maintain relationships with users who organize, attend, or staff the event.
@Entity
@Table(name = "events")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Event {
@Id
@Column(name = "id", updatable = false, nullable = false)
@GeneratedValue(strategy = GenerationType.UUID)
private UUID id;
@Column(name = "name", nullable = false)
private String name;
@Column(name = "start")
private LocalDateTime start;
@Column(name = "end")
private LocalDateTime end;
@Column(name = "venue", nullable = false)
private String venue;
@Column(name = "sales_start")
private LocalDateTime salesStart;
@Column(name = "sales_end")
private LocalDateTime salesEnd;
@Column(name = "status", nullable = false)
@Enumerated(EnumType.STRING)
private EventStatusEnum status;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "organizer_id")
private User organizer;
@ManyToMany(mappedBy = "attendingEvents")
private List<User> attendees = new ArrayList<>();
@ManyToMany(mappedBy = "staffingEvents")
private List<User> staff = new ArrayList<>();
@CreatedDate
@Column(name = "created_at", updatable = false, nullable = false)
private LocalDateTime createdAt;
@LastModifiedDate
@Column(name = "updated_at", nullable = false)
private LocalDateTime updatedAt;
}Update the User Entity
The User class needs corresponding relationships to events:
@Entity
@Table(name = "users")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User {
@Id
@Column(name = "id", updatable = false, nullable = false)
private UUID id;
@Column(name = "name", nullable = false)
private String name;
@Column(name = "email", nullable = false)
private String email;
@OneToMany(mappedBy = "organizer", cascade = CascadeType.ALL)
private List<Event> organizedEvents = new ArrayList<>();
@ManyToMany
@JoinTable(
name = "user_attending_events",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "event_id")
)
private List<Event> attendingEvents = new ArrayList<>();
@ManyToMany
@JoinTable(
name = "user_staffing_events",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "event_id")
)
private List<Event> staffingEvents = new ArrayList<>();
@CreatedDate
@Column(name = "created_at", updatable = false, nullable = false)
private LocalDateTime createdAt;
@LastModifiedDate
@Column(name = "updated_at", nullable = false)
private LocalDateTime updatedAt;
}Summary
- Created an initial
Eventclass - Added
Eventreferences to theUserclass