From 1d6ee5f178eb9eb9202244a2412ede8269250ee3 Mon Sep 17 00:00:00 2001 From: damini1994 Date: Wed, 30 Oct 2024 15:47:24 +0530 Subject: [PATCH 1/8] #8 Adds AuditingEntityListener --- .../bms_monolith/BmsMonolithApplication.java | 2 ++ .../bms_monolith/audit/AuditAwareImpl.java | 16 +++++++++++++ .../common/entity/BaseAuditingEntity.java | 24 ++++++++++++++++++- ...pplication.properties => application.yaml} | 0 4 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/audit/AuditAwareImpl.java rename book-my-show/backend/java/bms-monolith/src/main/resources/{application.properties => application.yaml} (100%) diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/BmsMonolithApplication.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/BmsMonolithApplication.java index f43b60d..0c6f4b3 100644 --- a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/BmsMonolithApplication.java +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/BmsMonolithApplication.java @@ -2,8 +2,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; @SpringBootApplication +@EnableJpaAuditing(auditorAwareRef = "auditAwareImpl") public class BmsMonolithApplication { public static void main(String[] args) { diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/audit/AuditAwareImpl.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/audit/AuditAwareImpl.java new file mode 100644 index 0000000..814f9ec --- /dev/null +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/audit/AuditAwareImpl.java @@ -0,0 +1,16 @@ +package org.lbcc.bms.bms_monolith.audit; + +import org.springframework.data.domain.AuditorAware; +import org.springframework.stereotype.Component; + +import java.util.Optional; + +@Component("auditAwareImpl") +public class AuditAwareImpl implements AuditorAware { + + @Override + public Optional getCurrentAuditor() { + return Optional.of("BMS_MONOLITH"); + } + +} diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/common/entity/BaseAuditingEntity.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/common/entity/BaseAuditingEntity.java index f02e651..8c7f0f6 100644 --- a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/common/entity/BaseAuditingEntity.java +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/common/entity/BaseAuditingEntity.java @@ -1,12 +1,21 @@ package org.lbcc.bms.bms_monolith.common.entity; -import jakarta.persistence.Id; import jakarta.persistence.MappedSuperclass; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Column; +import jakarta.persistence.EntityListeners; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import lombok.experimental.SuperBuilder; +import org.springframework.data.annotation.CreatedBy; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedBy; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; import java.time.Instant; import java.util.UUID; @@ -17,14 +26,27 @@ @NoArgsConstructor @Setter @SuperBuilder +@EntityListeners(AuditingEntityListener.class) public abstract class BaseAuditingEntity { @Id + @GeneratedValue(strategy = GenerationType.UUID) + @Column(columnDefinition = "CHAR(36)") private UUID id; + @CreatedDate + @Column(updatable = false) private Instant createdDate; + + @LastModifiedDate + @Column(insertable = false) private Instant lastModifiedDate; + @CreatedBy + @Column(updatable = false) private String createdBy; + + @LastModifiedBy + @Column(insertable = false) private String lastModifiedBy; } diff --git a/book-my-show/backend/java/bms-monolith/src/main/resources/application.properties b/book-my-show/backend/java/bms-monolith/src/main/resources/application.yaml similarity index 100% rename from book-my-show/backend/java/bms-monolith/src/main/resources/application.properties rename to book-my-show/backend/java/bms-monolith/src/main/resources/application.yaml From c5afddac511db1631d669968bded63069b4fddc3 Mon Sep 17 00:00:00 2001 From: damini1994 Date: Wed, 30 Oct 2024 15:54:30 +0530 Subject: [PATCH 2/8] #8 Adds BookingStatus, Genre, OperationalStatus, VendorStatus, VenueType enums --- .../bms_monolith/entity/enums/BookingStatus.java | 7 +++++++ .../bms/bms_monolith/entity/enums/Genre.java | 9 +++++++++ .../entity/enums/OperationalStatus.java | 6 ++++++ .../bms_monolith/entity/enums/VendorStatus.java | 7 +++++++ .../bms/bms_monolith/entity/enums/VenueType.java | 6 ++++++ .../src/main/resources/application.yaml | 16 +++++++++++++++- 6 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/enums/BookingStatus.java create mode 100644 book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/enums/Genre.java create mode 100644 book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/enums/OperationalStatus.java create mode 100644 book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/enums/VendorStatus.java create mode 100644 book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/enums/VenueType.java diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/enums/BookingStatus.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/enums/BookingStatus.java new file mode 100644 index 0000000..c8e3c16 --- /dev/null +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/enums/BookingStatus.java @@ -0,0 +1,7 @@ +package org.lbcc.bms.bms_monolith.entity.enums; + +public enum BookingStatus { + BOOKED, + AVAILABLE, + NOT_AVAILABLE; +} diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/enums/Genre.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/enums/Genre.java new file mode 100644 index 0000000..61853ef --- /dev/null +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/enums/Genre.java @@ -0,0 +1,9 @@ +package org.lbcc.bms.bms_monolith.entity.enums; + +public enum Genre { + COMEDY, + DRAMA, + ACTION, + THRILLER, + HORROR; +} diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/enums/OperationalStatus.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/enums/OperationalStatus.java new file mode 100644 index 0000000..e98f001 --- /dev/null +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/enums/OperationalStatus.java @@ -0,0 +1,6 @@ +package org.lbcc.bms.bms_monolith.entity.enums; + +public enum OperationalStatus { + OPERATIONAL, + NON_OPERATIONAL; +} diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/enums/VendorStatus.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/enums/VendorStatus.java new file mode 100644 index 0000000..1543c19 --- /dev/null +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/enums/VendorStatus.java @@ -0,0 +1,7 @@ +package org.lbcc.bms.bms_monolith.entity.enums; + +public enum VendorStatus { + ACTIVE, + INACTIVE, + SUSPENDED; +} diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/enums/VenueType.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/enums/VenueType.java new file mode 100644 index 0000000..bcc5056 --- /dev/null +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/enums/VenueType.java @@ -0,0 +1,6 @@ +package org.lbcc.bms.bms_monolith.entity.enums; + +public enum VenueType { + AUDITORIUM, + STADIUM; +} diff --git a/book-my-show/backend/java/bms-monolith/src/main/resources/application.yaml b/book-my-show/backend/java/bms-monolith/src/main/resources/application.yaml index c41048a..40302a5 100644 --- a/book-my-show/backend/java/bms-monolith/src/main/resources/application.yaml +++ b/book-my-show/backend/java/bms-monolith/src/main/resources/application.yaml @@ -1 +1,15 @@ -spring.application.name=BMS Monolith +spring: + application: + name: BMS Monolith + datasource: + url: jdbc:mysql://localhost:3306/bms + username: root + password: root + driver-class-name: com.mysql.cj.jdbc.Driver + jpa: + show-sql: true + hibernate: + ddl-auto: update + sql: + init: + mode: always \ No newline at end of file From fd28788e7573241273d5393cb74895baafcf6a46 Mon Sep 17 00:00:00 2001 From: damini1994 Date: Wed, 30 Oct 2024 15:56:44 +0530 Subject: [PATCH 3/8] #8 Add entities Event, EventShow, EventType, Seat, SeatInShow, SeatType, SeatTypeInShow, Vendor, Venue --- .../lbcc/bms/bms_monolith/entity/Event.java | 47 ++++++++++++++++++ .../bms/bms_monolith/entity/EventShow.java | 49 +++++++++++++++++++ .../bms/bms_monolith/entity/EventType.java | 18 +++++++ .../lbcc/bms/bms_monolith/entity/Seat.java | 34 +++++++++++++ .../bms/bms_monolith/entity/SeatInShow.java | 32 ++++++++++++ .../bms/bms_monolith/entity/SeatType.java | 25 ++++++++++ .../bms_monolith/entity/SeatTypeInShow.java | 30 ++++++++++++ .../lbcc/bms/bms_monolith/entity/Vendor.java | 31 ++++++++++++ .../lbcc/bms/bms_monolith/entity/Venue.java | 38 ++++++++++++++ 9 files changed, 304 insertions(+) create mode 100644 book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Event.java create mode 100644 book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/EventShow.java create mode 100644 book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/EventType.java create mode 100644 book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Seat.java create mode 100644 book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/SeatInShow.java create mode 100644 book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/SeatType.java create mode 100644 book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/SeatTypeInShow.java create mode 100644 book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Vendor.java create mode 100644 book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Venue.java diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Event.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Event.java new file mode 100644 index 0000000..a680a1d --- /dev/null +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Event.java @@ -0,0 +1,47 @@ +package org.lbcc.bms.bms_monolith.entity; + +import jakarta.persistence.Entity; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import jakarta.persistence.CascadeType; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.FetchType; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.lbcc.bms.bms_monolith.common.entity.BaseAuditingEntity; + +import java.time.Instant; +import java.util.List; + +@Entity +@Getter @Setter +@AllArgsConstructor @NoArgsConstructor +public class Event extends BaseAuditingEntity { + + private String title; + private String description; + + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "vendor_id") + private Vendor vendor; + + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "venue_id") + private Venue venue; + + @OneToMany(mappedBy = "event", cascade = CascadeType.ALL) + private List show; + + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "event_type_id") + private EventType eventType; + + private Instant startDate; + + private String thumbnailUrl; + + private Instant endDate; + +} diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/EventShow.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/EventShow.java new file mode 100644 index 0000000..3b97aa0 --- /dev/null +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/EventShow.java @@ -0,0 +1,49 @@ +package org.lbcc.bms.bms_monolith.entity; + +import jakarta.persistence.Entity; +import jakarta.persistence.ElementCollection; +import jakarta.persistence.CollectionTable; +import jakarta.persistence.Column; +import jakarta.persistence.Enumerated; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.EnumType; +import jakarta.persistence.CascadeType; +import jakarta.persistence.FetchType; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.lbcc.bms.bms_monolith.common.entity.BaseAuditingEntity; +import org.lbcc.bms.bms_monolith.entity.enums.Genre; + +import java.time.Instant; +import java.util.List; + +@Entity +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class EventShow extends BaseAuditingEntity { + + @ElementCollection(targetClass = Genre.class) + @CollectionTable(name = "show_genre", joinColumns = @JoinColumn(name = "show_id")) + @Column(name = "genre") + @Enumerated(EnumType.STRING) + private List genres; + + private Instant startDate; + private Instant endDate; + + @ManyToOne + @JoinColumn(name = "event_id") + private Event event; + + @OneToMany(mappedBy = "show", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + private List seatInShows; + + @OneToMany(mappedBy = "show", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + private List seatTypeInShows; +} diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/EventType.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/EventType.java new file mode 100644 index 0000000..181321b --- /dev/null +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/EventType.java @@ -0,0 +1,18 @@ +package org.lbcc.bms.bms_monolith.entity; + +import jakarta.persistence.Entity; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.lbcc.bms.bms_monolith.common.entity.BaseAuditingEntity; + +@Entity +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class EventType extends BaseAuditingEntity { + + private String label; +} diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Seat.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Seat.java new file mode 100644 index 0000000..e80426e --- /dev/null +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Seat.java @@ -0,0 +1,34 @@ +package org.lbcc.bms.bms_monolith.entity; + +import jakarta.persistence.Entity; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.Enumerated; +import jakarta.persistence.EnumType; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.lbcc.bms.bms_monolith.common.entity.BaseAuditingEntity; +import org.lbcc.bms.bms_monolith.entity.enums.OperationalStatus; + +@Entity +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class Seat extends BaseAuditingEntity { + + @ManyToOne + @JoinColumn(name = "seat_type_id") + private SeatType seatType; + + @ManyToOne + @JoinColumn(name = "venue_id") + private Venue venue; + + @Enumerated(EnumType.STRING) + private OperationalStatus operationalStatus; + + private String label; +} diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/SeatInShow.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/SeatInShow.java new file mode 100644 index 0000000..80aef33 --- /dev/null +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/SeatInShow.java @@ -0,0 +1,32 @@ +package org.lbcc.bms.bms_monolith.entity; + +import jakarta.persistence.Entity; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.Enumerated; +import jakarta.persistence.EnumType; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.lbcc.bms.bms_monolith.common.entity.BaseAuditingEntity; +import org.lbcc.bms.bms_monolith.entity.enums.BookingStatus; + +@Entity +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class SeatInShow extends BaseAuditingEntity { + + @ManyToOne + @JoinColumn(name = "seat_type_in_show_id") + private SeatTypeInShow seatTypeInShow; + + @ManyToOne + @JoinColumn(name = "show_id") + private EventShow show; + + @Enumerated(EnumType.STRING) + private BookingStatus bookingStatus; +} diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/SeatType.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/SeatType.java new file mode 100644 index 0000000..3975c2b --- /dev/null +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/SeatType.java @@ -0,0 +1,25 @@ +package org.lbcc.bms.bms_monolith.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.lbcc.bms.bms_monolith.common.entity.BaseAuditingEntity; + +import java.math.BigDecimal; + +@Entity +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class SeatType extends BaseAuditingEntity { + + private String label; + + @Column(precision = 10, scale = 2) + private BigDecimal price; + +} diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/SeatTypeInShow.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/SeatTypeInShow.java new file mode 100644 index 0000000..b2c4de6 --- /dev/null +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/SeatTypeInShow.java @@ -0,0 +1,30 @@ +package org.lbcc.bms.bms_monolith.entity; + +import jakarta.persistence.Entity; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.JoinColumn; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.lbcc.bms.bms_monolith.common.entity.BaseAuditingEntity; + +import java.math.BigDecimal; + +@Entity +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class SeatTypeInShow extends BaseAuditingEntity { + + @ManyToOne + @JoinColumn(name = "seat_type_id") + private SeatType seatType; + + @ManyToOne + @JoinColumn(name = "show_id") + private EventShow show; + + private BigDecimal price; +} diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Vendor.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Vendor.java new file mode 100644 index 0000000..8b8b395 --- /dev/null +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Vendor.java @@ -0,0 +1,31 @@ +package org.lbcc.bms.bms_monolith.entity; + +import jakarta.persistence.Entity; +import jakarta.persistence.Enumerated; +import jakarta.persistence.EnumType; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.lbcc.bms.bms_monolith.common.entity.BaseAuditingEntity; +import org.lbcc.bms.bms_monolith.entity.enums.VendorStatus; + +@Entity +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class Vendor extends BaseAuditingEntity { + + private String name; + private String contactNumber; + private String email; + private String address; + private String website; + + @Enumerated(EnumType.STRING) + private VendorStatus status; + + private String registrationDate; + private String logoUrl; +} diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Venue.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Venue.java new file mode 100644 index 0000000..e4ae61b --- /dev/null +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Venue.java @@ -0,0 +1,38 @@ +package org.lbcc.bms.bms_monolith.entity; + +import jakarta.persistence.Entity; +import jakarta.persistence.Enumerated; +import jakarta.persistence.EnumType; +import jakarta.persistence.OneToMany; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.lbcc.bms.bms_monolith.common.entity.BaseAuditingEntity; +import org.lbcc.bms.bms_monolith.entity.enums.OperationalStatus; +import org.lbcc.bms.bms_monolith.entity.enums.VenueType; + +import java.math.BigDecimal; +import java.util.List; + +@Entity +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class Venue extends BaseAuditingEntity { + + private String address; + private BigDecimal latitude; + private BigDecimal longitude; + private Integer totalSeatingCapacity; + + @Enumerated(EnumType.STRING) + private VenueType venueType; + + @Enumerated(EnumType.STRING) + private OperationalStatus operationalStatus; + + @OneToMany(mappedBy = "venue") + private List seats; +} From 790abb804a7cc61ce0f533dc72e87dfbb7c58511 Mon Sep 17 00:00:00 2001 From: damini1994 Date: Wed, 30 Oct 2024 15:59:16 +0530 Subject: [PATCH 4/8] #8 Add getAllEvents endpoints --- .../common/constants/BMSConstants.java | 15 ++++++ .../controller/EventController.java | 30 ++++++++++++ .../exception/EventServiceException.java | 8 ++++ .../exception/GlobalExceptionHandler.java | 46 +++++++++++++++++++ .../InvalidPaginationParameterException.java | 8 ++++ .../repository/EventRepository.java | 17 +++++++ .../bms_monolith/service/IEventService.java | 9 ++++ .../service/impl/EventServiceImpl.java | 38 +++++++++++++++ 8 files changed, 171 insertions(+) create mode 100644 book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/common/constants/BMSConstants.java create mode 100644 book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/controller/EventController.java create mode 100644 book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/exception/EventServiceException.java create mode 100644 book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/exception/GlobalExceptionHandler.java create mode 100644 book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/exception/InvalidPaginationParameterException.java create mode 100644 book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/repository/EventRepository.java create mode 100644 book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/service/IEventService.java create mode 100644 book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/service/impl/EventServiceImpl.java diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/common/constants/BMSConstants.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/common/constants/BMSConstants.java new file mode 100644 index 0000000..c479131 --- /dev/null +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/common/constants/BMSConstants.java @@ -0,0 +1,15 @@ +package org.lbcc.bms.bms_monolith.common.constants; + +public final class BMSConstants { + + private BMSConstants() { + } + + public static final String STATUS_200 = "200"; + public static final String MESSAGE_200 = "Request processed successfully"; + public static final String EVENT_SUCCESS_MESSAGE = "Events fetched successfully"; + public static final String UNEXPECTED_ERROR_MESSAGE = "An unexpected error occurred"; + public static final String UNEXPECTED_ERROR_CODE = "UNEXPECTED_ERROR"; + public static final String EVENT_SERVICE_ERROR = "EVENT_SERVICE_ERROR"; + public static final String INVALID_PAGINATION_PARAMETER = "INVALID_PAGINATION_PARAMETER"; +} diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/controller/EventController.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/controller/EventController.java new file mode 100644 index 0000000..8b1f2a0 --- /dev/null +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/controller/EventController.java @@ -0,0 +1,30 @@ +package org.lbcc.bms.bms_monolith.controller; + +import org.lbcc.bms.bms_monolith.common.response.ApiListResponse; +import org.lbcc.bms.bms_monolith.common.response.ApiResponse; +import org.lbcc.bms.bms_monolith.entity.Event; +import org.lbcc.bms.bms_monolith.service.IEventService; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping(path="/api/events", produces = {MediaType.APPLICATION_JSON_VALUE}) +public class EventController { + + private final IEventService iEventService; + + public EventController(IEventService iEventService) { + this.iEventService = iEventService; + } + + @GetMapping() + public ResponseEntity> getAllEvents( + @RequestParam(defaultValue = "0") int page, + @RequestParam(defaultValue = "10") int size) { + ApiListResponse response = iEventService.getAllEvents(page, size); + return ResponseEntity.ok(response); + } + +} diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/exception/EventServiceException.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/exception/EventServiceException.java new file mode 100644 index 0000000..1c1b7d5 --- /dev/null +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/exception/EventServiceException.java @@ -0,0 +1,8 @@ +package org.lbcc.bms.bms_monolith.exception; + +public class EventServiceException extends RuntimeException { + + public EventServiceException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/exception/GlobalExceptionHandler.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/exception/GlobalExceptionHandler.java new file mode 100644 index 0000000..5dbdfb4 --- /dev/null +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/exception/GlobalExceptionHandler.java @@ -0,0 +1,46 @@ +package org.lbcc.bms.bms_monolith.exception; + +import org.lbcc.bms.bms_monolith.common.constants.BMSConstants; +import org.lbcc.bms.bms_monolith.common.response.ApiErrorResponse; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; + +import java.time.Instant; + +@ControllerAdvice +public class GlobalExceptionHandler { + + @ExceptionHandler(EventServiceException.class) + public ResponseEntity handleEventServiceException(EventServiceException ex) { + return buildErrorResponse(HttpStatus.INTERNAL_SERVER_ERROR, ex.getMessage(), BMSConstants.EVENT_SERVICE_ERROR); + } + + @ExceptionHandler(InvalidPaginationParameterException.class) + public ResponseEntity handleInvalidPaginationParameter(InvalidPaginationParameterException ex) { + ApiErrorResponse errorResponse = ApiErrorResponse.builder() + .success(false) + .message(ex.getMessage()) + .code(BMSConstants.INVALID_PAGINATION_PARAMETER) + .timestamp(Instant.now()) + .build(); + + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errorResponse); + } + + @ExceptionHandler(Exception.class) + public ResponseEntity handleGlobalException(Exception ex) { + return buildErrorResponse(HttpStatus.INTERNAL_SERVER_ERROR, BMSConstants.UNEXPECTED_ERROR_MESSAGE, BMSConstants.UNEXPECTED_ERROR_CODE); + } + + private ResponseEntity buildErrorResponse(HttpStatus status, String message, String code) { + ApiErrorResponse errorResponse = ApiErrorResponse.builder() + .success(false) + .message(message) + .code(code) + .timestamp(Instant.now()) + .build(); + return ResponseEntity.status(status).body(errorResponse); + } +} diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/exception/InvalidPaginationParameterException.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/exception/InvalidPaginationParameterException.java new file mode 100644 index 0000000..4a3d3cc --- /dev/null +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/exception/InvalidPaginationParameterException.java @@ -0,0 +1,8 @@ +package org.lbcc.bms.bms_monolith.exception; + +public class InvalidPaginationParameterException extends RuntimeException { + + public InvalidPaginationParameterException(String message) { + super(message); + } +} diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/repository/EventRepository.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/repository/EventRepository.java new file mode 100644 index 0000000..a7cd777 --- /dev/null +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/repository/EventRepository.java @@ -0,0 +1,17 @@ +package org.lbcc.bms.bms_monolith.repository; + +import org.lbcc.bms.bms_monolith.entity.Event; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.UUID; + +@Repository +public interface EventRepository extends JpaRepository { + + @Query("SELECT e FROM Event e JOIN FETCH e.vendor JOIN FETCH e.venue JOIN FETCH e.eventType") + Page findAllWithDetails(Pageable pageable); +} \ No newline at end of file diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/service/IEventService.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/service/IEventService.java new file mode 100644 index 0000000..a14eb0d --- /dev/null +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/service/IEventService.java @@ -0,0 +1,9 @@ +package org.lbcc.bms.bms_monolith.service; + +import org.lbcc.bms.bms_monolith.common.response.ApiListResponse; +import org.lbcc.bms.bms_monolith.entity.Event; + +public interface IEventService { + + ApiListResponse getAllEvents(int page, int size); +} diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/service/impl/EventServiceImpl.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/service/impl/EventServiceImpl.java new file mode 100644 index 0000000..dd4b829 --- /dev/null +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/service/impl/EventServiceImpl.java @@ -0,0 +1,38 @@ +package org.lbcc.bms.bms_monolith.service.impl; + +import lombok.extern.slf4j.Slf4j; +import org.lbcc.bms.bms_monolith.common.constants.BMSConstants; +import org.lbcc.bms.bms_monolith.common.response.ApiListResponse; +import org.lbcc.bms.bms_monolith.entity.Event; +import org.lbcc.bms.bms_monolith.exception.EventServiceException; +import org.lbcc.bms.bms_monolith.repository.EventRepository; +import org.lbcc.bms.bms_monolith.service.IEventService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class EventServiceImpl implements IEventService { + + @Autowired + private EventRepository eventRepository; + + @Override + public ApiListResponse getAllEvents(int page, int size) { + try { + Page eventsPage = eventRepository.findAllWithDetails(PageRequest.of(page, size)); + log.info("Fetched {} events for page {} with size {}", eventsPage.getTotalElements(), page, size); + + return ApiListResponse.builder() + .success(true) + .message(BMSConstants.EVENT_SUCCESS_MESSAGE) + .setPage(eventsPage) + .build(); + } catch (Exception e) { + log.error("Error fetching events: {}", e.getMessage()); + throw new EventServiceException("Failed to fetch events", e); + } + } +} From 1e4e32ab5feea30b4571e8b4a4425458330dfc61 Mon Sep 17 00:00:00 2001 From: damini1994 Date: Wed, 30 Oct 2024 15:59:56 +0530 Subject: [PATCH 5/8] #8 Add test cases for getAllEvents endpoints --- .../controller/EventControllerTest.java | 94 +++++++++++++++++++ .../service/EventServiceImplTest.java | 66 +++++++++++++ 2 files changed, 160 insertions(+) create mode 100644 book-my-show/backend/java/bms-monolith/src/test/java/org/lbcc/bms/bms_monolith/controller/EventControllerTest.java create mode 100644 book-my-show/backend/java/bms-monolith/src/test/java/org/lbcc/bms/bms_monolith/service/EventServiceImplTest.java diff --git a/book-my-show/backend/java/bms-monolith/src/test/java/org/lbcc/bms/bms_monolith/controller/EventControllerTest.java b/book-my-show/backend/java/bms-monolith/src/test/java/org/lbcc/bms/bms_monolith/controller/EventControllerTest.java new file mode 100644 index 0000000..4ba145c --- /dev/null +++ b/book-my-show/backend/java/bms-monolith/src/test/java/org/lbcc/bms/bms_monolith/controller/EventControllerTest.java @@ -0,0 +1,94 @@ +package org.lbcc.bms.bms_monolith.controller; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.lbcc.bms.bms_monolith.common.response.ApiListResponse; +import org.lbcc.bms.bms_monolith.entity.Event; +import org.lbcc.bms.bms_monolith.exception.EventServiceException; +import org.lbcc.bms.bms_monolith.service.IEventService; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.anyInt; +import org.springframework.http.ResponseEntity; +import org.springframework.http.HttpStatus; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; +import java.util.UUID; +import static org.mockito.Mockito.when; + +public class EventControllerTest { + + @Mock + private IEventService eventService; + + @InjectMocks + private EventController eventController; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + void testGetAllEventsSuccess() { + Event event = new Event(); + event.setId(UUID.randomUUID()); + event.setTitle("Sample Event"); + Page eventPage = new PageImpl<>(List.of(event), PageRequest.of(0, 10), 1); + + ApiListResponse apiResponse = ApiListResponse.builder() + .success(true) + .message("Events fetched successfully") + .data(eventPage.getContent()) + .totalItems((int) eventPage.getTotalElements()) + .totalPages(eventPage.getTotalPages()) + .currentPage(eventPage.getNumber()) + .pageSize(eventPage.getSize()) + .hasNextPage(eventPage.hasNext()) + .hasPreviousPage(eventPage.hasPrevious()) + .build(); + + when(eventService.getAllEvents(anyInt(), anyInt())).thenReturn(apiResponse); + + ResponseEntity> response = eventController.getAllEvents(0, 10); + + assertEquals(HttpStatus.OK, response.getStatusCode()); + assertEquals(apiResponse, response.getBody()); + assertEquals("Events fetched successfully", response.getBody().getMessage()); + assertEquals(1, response.getBody().getTotalItems()); + } + + @Test + void testGetAllEventsInvalidPageParameters() { + ApiListResponse apiResponse = ApiListResponse.builder() + .success(false) + .message("Invalid page or size parameters") + .build(); + + when(eventService.getAllEvents(-1, 10)).thenReturn(apiResponse); + ResponseEntity> response = eventController.getAllEvents(-1, 10); + + assertEquals(HttpStatus.OK, response.getStatusCode()); + assertEquals("Invalid page or size parameters", response.getBody().getMessage()); + assertEquals(false, response.getBody().isSuccess()); + } + + @Test + void testGetAllEventsExceptionHandling() { + when(eventService.getAllEvents(anyInt(), anyInt())) + .thenThrow(new EventServiceException("Failed to fetch events", new RuntimeException())); + + EventServiceException exception = assertThrows(EventServiceException.class, () -> { + eventController.getAllEvents(0, 10); + }); + + assertEquals("Failed to fetch events", exception.getMessage()); + } + +} diff --git a/book-my-show/backend/java/bms-monolith/src/test/java/org/lbcc/bms/bms_monolith/service/EventServiceImplTest.java b/book-my-show/backend/java/bms-monolith/src/test/java/org/lbcc/bms/bms_monolith/service/EventServiceImplTest.java new file mode 100644 index 0000000..68cbb4a --- /dev/null +++ b/book-my-show/backend/java/bms-monolith/src/test/java/org/lbcc/bms/bms_monolith/service/EventServiceImplTest.java @@ -0,0 +1,66 @@ +package org.lbcc.bms.bms_monolith.service; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.lbcc.bms.bms_monolith.common.response.ApiListResponse; +import org.lbcc.bms.bms_monolith.entity.Event; +import org.lbcc.bms.bms_monolith.exception.EventServiceException; +import org.lbcc.bms.bms_monolith.repository.EventRepository; +import org.lbcc.bms.bms_monolith.service.impl.EventServiceImpl; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; + +import java.util.Collections; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +public class EventServiceImplTest { + + @Mock + private EventRepository eventRepository; + + @InjectMocks + private EventServiceImpl eventService; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + void testGetAllEventsSuccess() { + Event event = new Event(); + event.setTitle("Sample Event"); + event.setDescription("Sample Description"); + + Page eventPage = new PageImpl<>(Collections.singletonList(event), PageRequest.of(0, 10), 1); + when(eventRepository.findAllWithDetails(PageRequest.of(0, 10))).thenReturn(eventPage); + + ApiListResponse response = eventService.getAllEvents(0, 10); + + assertTrue(response.isSuccess()); + assertEquals("Events fetched successfully", response.getMessage()); + assertNotNull(response.getData()); + assertEquals(1, response.getData().size()); + assertEquals("Sample Event", response.getData().get(0).getTitle()); + } + + @Test + void testGetAllEventsExceptionHandling() { + when(eventRepository.findAllWithDetails(any())).thenThrow(new RuntimeException("Database error")); + Exception exception = assertThrows(EventServiceException.class, () -> { + eventService.getAllEvents(0, 10); + }); + + assertEquals("Failed to fetch events", exception.getMessage()); + } +} From 1d5c440f235a99e877155eb902860f5257372a64 Mon Sep 17 00:00:00 2001 From: damini1994 Date: Sun, 3 Nov 2024 00:16:10 +0530 Subject: [PATCH 6/8] Resolved reviewed comments --- .../backend/java/bms-monolith/pom.xml | 5 +++ .../bms_monolith/BmsMonolithApplication.java | 2 - .../bms_monolith/audit/AuditAwareImpl.java | 16 ------- .../bms_monolith/common/config/JpaConfig.java | 16 +++++++ .../common/response/ApiErrorResponse.java | 3 +- .../controller/EventController.java | 27 +++++++---- .../lbcc/bms/bms_monolith/entity/Event.java | 9 ++++ .../bms/bms_monolith/entity/EventShow.java | 19 ++++---- .../bms_monolith/entity/SeatTypeInShow.java | 10 +---- .../exception/GlobalExceptionHandler.java | 2 - ...tRepository.java => IEventRepository.java} | 4 +- .../bms_monolith/service/IEventService.java | 5 ++- .../service/impl/EventServiceImpl.java | 24 +++++----- .../src/main/resources/application.yaml | 10 +++-- .../controller/EventControllerTest.java | 45 ++++++++++++------- .../service/EventServiceImplTest.java | 30 +++++++------ 16 files changed, 131 insertions(+), 96 deletions(-) delete mode 100644 book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/audit/AuditAwareImpl.java create mode 100644 book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/common/config/JpaConfig.java rename book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/repository/{EventRepository.java => IEventRepository.java} (79%) diff --git a/book-my-show/backend/java/bms-monolith/pom.xml b/book-my-show/backend/java/bms-monolith/pom.xml index 2583367..76f9214 100644 --- a/book-my-show/backend/java/bms-monolith/pom.xml +++ b/book-my-show/backend/java/bms-monolith/pom.xml @@ -50,6 +50,11 @@ mysql-connector-j runtime + + org.springframework.boot + spring-boot-starter-validation + + org.projectlombok lombok diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/BmsMonolithApplication.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/BmsMonolithApplication.java index 0c6f4b3..f43b60d 100644 --- a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/BmsMonolithApplication.java +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/BmsMonolithApplication.java @@ -2,10 +2,8 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.data.jpa.repository.config.EnableJpaAuditing; @SpringBootApplication -@EnableJpaAuditing(auditorAwareRef = "auditAwareImpl") public class BmsMonolithApplication { public static void main(String[] args) { diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/audit/AuditAwareImpl.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/audit/AuditAwareImpl.java deleted file mode 100644 index 814f9ec..0000000 --- a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/audit/AuditAwareImpl.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.lbcc.bms.bms_monolith.audit; - -import org.springframework.data.domain.AuditorAware; -import org.springframework.stereotype.Component; - -import java.util.Optional; - -@Component("auditAwareImpl") -public class AuditAwareImpl implements AuditorAware { - - @Override - public Optional getCurrentAuditor() { - return Optional.of("BMS_MONOLITH"); - } - -} diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/common/config/JpaConfig.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/common/config/JpaConfig.java new file mode 100644 index 0000000..ca00d90 --- /dev/null +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/common/config/JpaConfig.java @@ -0,0 +1,16 @@ +package org.lbcc.bms.bms_monolith.common.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.data.domain.AuditorAware; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; + +import java.util.Optional; + +@EnableJpaAuditing +public class JpaConfig { + + @Bean + public AuditorAware auditorProvider() { + return () -> Optional.of("system"); // TODO: Replace with code to fetch username when spring-security is implemented. + } +} diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/common/response/ApiErrorResponse.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/common/response/ApiErrorResponse.java index eb5cfa5..14d2369 100644 --- a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/common/response/ApiErrorResponse.java +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/common/response/ApiErrorResponse.java @@ -14,7 +14,8 @@ @JsonInclude(JsonInclude.Include.NON_NULL) @NoArgsConstructor public class ApiErrorResponse { - private boolean success; + @Builder.Default + private boolean success = false; private String message; private String code; @Builder.Default diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/controller/EventController.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/controller/EventController.java index 8b1f2a0..8c9b5f1 100644 --- a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/controller/EventController.java +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/controller/EventController.java @@ -1,16 +1,19 @@ package org.lbcc.bms.bms_monolith.controller; +import org.lbcc.bms.bms_monolith.common.constants.BMSConstants; import org.lbcc.bms.bms_monolith.common.response.ApiListResponse; -import org.lbcc.bms.bms_monolith.common.response.ApiResponse; import org.lbcc.bms.bms_monolith.entity.Event; import org.lbcc.bms.bms_monolith.service.IEventService; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.web.PageableDefault; +import org.springframework.data.web.SortDefault; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @RestController -@RequestMapping(path="/api/events", produces = {MediaType.APPLICATION_JSON_VALUE}) +@RequestMapping(path="/events") public class EventController { private final IEventService iEventService; @@ -19,11 +22,19 @@ public EventController(IEventService iEventService) { this.iEventService = iEventService; } - @GetMapping() + @GetMapping public ResponseEntity> getAllEvents( - @RequestParam(defaultValue = "0") int page, - @RequestParam(defaultValue = "10") int size) { - ApiListResponse response = iEventService.getAllEvents(page, size); + @PageableDefault(page = 0, size = 10) + @SortDefault(sort = "startDate", direction = Sort.Direction.DESC) Pageable pageable) { + + Page eventsPage = iEventService.getAllEvents(pageable); + + ApiListResponse response = ApiListResponse.builder() + .success(true) + .message(BMSConstants.EVENT_SUCCESS_MESSAGE) + .setPage(eventsPage) + .build(); + return ResponseEntity.ok(response); } diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Event.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Event.java index a680a1d..5e5f6ab 100644 --- a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Event.java +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Event.java @@ -6,6 +6,8 @@ import jakarta.persistence.CascadeType; import jakarta.persistence.JoinColumn; import jakarta.persistence.FetchType; +import jakarta.persistence.Column; +import jakarta.validation.constraints.Size; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -20,7 +22,11 @@ @AllArgsConstructor @NoArgsConstructor public class Event extends BaseAuditingEntity { + @Size(min=10, max=50, message = "Title must be between 10 and 50 characters.") + @Column(nullable = false, length = 50) private String title; + + @Column(length = 1000) private String description; @ManyToOne(fetch = FetchType.EAGER) @@ -38,10 +44,13 @@ public class Event extends BaseAuditingEntity { @JoinColumn(name = "event_type_id") private EventType eventType; + @Column(nullable = false) private Instant startDate; + @Column(length = 255) private String thumbnailUrl; + @Column(nullable = false) private Instant endDate; } diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/EventShow.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/EventShow.java index 3b97aa0..23ad904 100644 --- a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/EventShow.java +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/EventShow.java @@ -11,21 +11,19 @@ import jakarta.persistence.EnumType; import jakarta.persistence.CascadeType; import jakarta.persistence.FetchType; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import jakarta.validation.constraints.NotNull; +import lombok.Builder; + +import lombok.experimental.SuperBuilder; import org.lbcc.bms.bms_monolith.common.entity.BaseAuditingEntity; import org.lbcc.bms.bms_monolith.entity.enums.Genre; import java.time.Instant; +import java.util.ArrayList; import java.util.List; @Entity -@Getter -@Setter -@AllArgsConstructor -@NoArgsConstructor +@SuperBuilder public class EventShow extends BaseAuditingEntity { @ElementCollection(targetClass = Genre.class) @@ -34,11 +32,14 @@ public class EventShow extends BaseAuditingEntity { @Enumerated(EnumType.STRING) private List genres; + @NotNull private Instant startDate; + + @NotNull private Instant endDate; @ManyToOne - @JoinColumn(name = "event_id") + @JoinColumn(name = "event_id", nullable = false) private Event event; @OneToMany(mappedBy = "show", cascade = CascadeType.ALL, fetch = FetchType.LAZY) diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/SeatTypeInShow.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/SeatTypeInShow.java index b2c4de6..bcae0c2 100644 --- a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/SeatTypeInShow.java +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/SeatTypeInShow.java @@ -3,19 +3,13 @@ import jakarta.persistence.Entity; import jakarta.persistence.ManyToOne; import jakarta.persistence.JoinColumn; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.experimental.SuperBuilder; import org.lbcc.bms.bms_monolith.common.entity.BaseAuditingEntity; import java.math.BigDecimal; @Entity -@Getter -@Setter -@AllArgsConstructor -@NoArgsConstructor +@SuperBuilder public class SeatTypeInShow extends BaseAuditingEntity { @ManyToOne diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/exception/GlobalExceptionHandler.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/exception/GlobalExceptionHandler.java index 5dbdfb4..bc90f06 100644 --- a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/exception/GlobalExceptionHandler.java +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/exception/GlobalExceptionHandler.java @@ -36,10 +36,8 @@ public ResponseEntity handleGlobalException(Exception ex) { private ResponseEntity buildErrorResponse(HttpStatus status, String message, String code) { ApiErrorResponse errorResponse = ApiErrorResponse.builder() - .success(false) .message(message) .code(code) - .timestamp(Instant.now()) .build(); return ResponseEntity.status(status).body(errorResponse); } diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/repository/EventRepository.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/repository/IEventRepository.java similarity index 79% rename from book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/repository/EventRepository.java rename to book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/repository/IEventRepository.java index a7cd777..efa9979 100644 --- a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/repository/EventRepository.java +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/repository/IEventRepository.java @@ -10,8 +10,8 @@ import java.util.UUID; @Repository -public interface EventRepository extends JpaRepository { +public interface IEventRepository extends JpaRepository { - @Query("SELECT e FROM Event e JOIN FETCH e.vendor JOIN FETCH e.venue JOIN FETCH e.eventType") + @Query("SELECT e FROM Event e JOIN FETCH e.vendor JOIN FETCH e.venue JOIN FETCH e.eventType ORDER BY e.startDate DESC") Page findAllWithDetails(Pageable pageable); } \ No newline at end of file diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/service/IEventService.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/service/IEventService.java index a14eb0d..f3c62c7 100644 --- a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/service/IEventService.java +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/service/IEventService.java @@ -1,9 +1,10 @@ package org.lbcc.bms.bms_monolith.service; -import org.lbcc.bms.bms_monolith.common.response.ApiListResponse; import org.lbcc.bms.bms_monolith.entity.Event; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; public interface IEventService { - ApiListResponse getAllEvents(int page, int size); + Page getAllEvents(Pageable pageable); } diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/service/impl/EventServiceImpl.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/service/impl/EventServiceImpl.java index dd4b829..ce8e843 100644 --- a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/service/impl/EventServiceImpl.java +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/service/impl/EventServiceImpl.java @@ -1,35 +1,33 @@ package org.lbcc.bms.bms_monolith.service.impl; import lombok.extern.slf4j.Slf4j; -import org.lbcc.bms.bms_monolith.common.constants.BMSConstants; -import org.lbcc.bms.bms_monolith.common.response.ApiListResponse; import org.lbcc.bms.bms_monolith.entity.Event; import org.lbcc.bms.bms_monolith.exception.EventServiceException; -import org.lbcc.bms.bms_monolith.repository.EventRepository; +import org.lbcc.bms.bms_monolith.repository.IEventRepository; import org.lbcc.bms.bms_monolith.service.IEventService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; @Service @Slf4j public class EventServiceImpl implements IEventService { + private final IEventRepository IEventRepository; + @Autowired - private EventRepository eventRepository; + public EventServiceImpl(IEventRepository IEventRepository) { + this.IEventRepository = IEventRepository; + } @Override - public ApiListResponse getAllEvents(int page, int size) { + public Page getAllEvents(Pageable pageable) { try { - Page eventsPage = eventRepository.findAllWithDetails(PageRequest.of(page, size)); - log.info("Fetched {} events for page {} with size {}", eventsPage.getTotalElements(), page, size); + Page eventsPage = IEventRepository.findAllWithDetails(pageable); + log.info("Fetched {} events with pageable {}", eventsPage.getTotalElements(), pageable); - return ApiListResponse.builder() - .success(true) - .message(BMSConstants.EVENT_SUCCESS_MESSAGE) - .setPage(eventsPage) - .build(); + return eventsPage; } catch (Exception e) { log.error("Error fetching events: {}", e.getMessage()); throw new EventServiceException("Failed to fetch events", e); diff --git a/book-my-show/backend/java/bms-monolith/src/main/resources/application.yaml b/book-my-show/backend/java/bms-monolith/src/main/resources/application.yaml index 40302a5..5ac2e86 100644 --- a/book-my-show/backend/java/bms-monolith/src/main/resources/application.yaml +++ b/book-my-show/backend/java/bms-monolith/src/main/resources/application.yaml @@ -3,8 +3,8 @@ spring: name: BMS Monolith datasource: url: jdbc:mysql://localhost:3306/bms - username: root - password: root + username: ${DB_USERNAME:root} + password: ${DB_PASSWORD:root} driver-class-name: com.mysql.cj.jdbc.Driver jpa: show-sql: true @@ -12,4 +12,8 @@ spring: ddl-auto: update sql: init: - mode: always \ No newline at end of file + mode: always + +server: + servlet: + context-path: /api/v1 \ No newline at end of file diff --git a/book-my-show/backend/java/bms-monolith/src/test/java/org/lbcc/bms/bms_monolith/controller/EventControllerTest.java b/book-my-show/backend/java/bms-monolith/src/test/java/org/lbcc/bms/bms_monolith/controller/EventControllerTest.java index 4ba145c..e528b5e 100644 --- a/book-my-show/backend/java/bms-monolith/src/test/java/org/lbcc/bms/bms_monolith/controller/EventControllerTest.java +++ b/book-my-show/backend/java/bms-monolith/src/test/java/org/lbcc/bms/bms_monolith/controller/EventControllerTest.java @@ -13,7 +13,8 @@ import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.any; +import org.springframework.data.domain.Pageable; import org.springframework.http.ResponseEntity; import org.springframework.http.HttpStatus; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -40,9 +41,14 @@ void testGetAllEventsSuccess() { Event event = new Event(); event.setId(UUID.randomUUID()); event.setTitle("Sample Event"); + Page eventPage = new PageImpl<>(List.of(event), PageRequest.of(0, 10), 1); - ApiListResponse apiResponse = ApiListResponse.builder() + when(eventService.getAllEvents(any(Pageable.class))).thenReturn(eventPage); + + ResponseEntity> response = eventController.getAllEvents(PageRequest.of(0, 10)); + + ApiListResponse expectedResponse = ApiListResponse.builder() .success(true) .message("Events fetched successfully") .data(eventPage.getContent()) @@ -54,38 +60,45 @@ void testGetAllEventsSuccess() { .hasPreviousPage(eventPage.hasPrevious()) .build(); - when(eventService.getAllEvents(anyInt(), anyInt())).thenReturn(apiResponse); - - ResponseEntity> response = eventController.getAllEvents(0, 10); - + // Assertions to verify response assertEquals(HttpStatus.OK, response.getStatusCode()); - assertEquals(apiResponse, response.getBody()); - assertEquals("Events fetched successfully", response.getBody().getMessage()); + assertEquals(expectedResponse.getMessage(), response.getBody().getMessage()); + assertEquals(expectedResponse.isSuccess(), response.getBody().isSuccess()); assertEquals(1, response.getBody().getTotalItems()); } @Test void testGetAllEventsInvalidPageParameters() { - ApiListResponse apiResponse = ApiListResponse.builder() + Page emptyPage = Page.empty(PageRequest.of(0, 10)); + + when(eventService.getAllEvents(PageRequest.of(0, 10))).thenReturn(emptyPage); + + ResponseEntity> response = eventController.getAllEvents(PageRequest.of(0, 10)); + + ApiListResponse expectedResponse = ApiListResponse.builder() .success(false) .message("Invalid page or size parameters") + .data(emptyPage.getContent()) + .totalItems((int) emptyPage.getTotalElements()) + .totalPages(emptyPage.getTotalPages()) + .currentPage(0) + .pageSize(emptyPage.getSize()) + .hasNextPage(emptyPage.hasNext()) + .hasPreviousPage(emptyPage.hasPrevious()) .build(); - when(eventService.getAllEvents(-1, 10)).thenReturn(apiResponse); - ResponseEntity> response = eventController.getAllEvents(-1, 10); - assertEquals(HttpStatus.OK, response.getStatusCode()); - assertEquals("Invalid page or size parameters", response.getBody().getMessage()); - assertEquals(false, response.getBody().isSuccess()); + assertEquals("Events fetched successfully", response.getBody().getMessage()); + assertEquals(true, response.getBody().isSuccess()); } @Test void testGetAllEventsExceptionHandling() { - when(eventService.getAllEvents(anyInt(), anyInt())) + when(eventService.getAllEvents(any(Pageable.class))) .thenThrow(new EventServiceException("Failed to fetch events", new RuntimeException())); EventServiceException exception = assertThrows(EventServiceException.class, () -> { - eventController.getAllEvents(0, 10); + eventController.getAllEvents(PageRequest.of(0, 10)); }); assertEquals("Failed to fetch events", exception.getMessage()); diff --git a/book-my-show/backend/java/bms-monolith/src/test/java/org/lbcc/bms/bms_monolith/service/EventServiceImplTest.java b/book-my-show/backend/java/bms-monolith/src/test/java/org/lbcc/bms/bms_monolith/service/EventServiceImplTest.java index 68cbb4a..606ae21 100644 --- a/book-my-show/backend/java/bms-monolith/src/test/java/org/lbcc/bms/bms_monolith/service/EventServiceImplTest.java +++ b/book-my-show/backend/java/bms-monolith/src/test/java/org/lbcc/bms/bms_monolith/service/EventServiceImplTest.java @@ -2,10 +2,9 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.lbcc.bms.bms_monolith.common.response.ApiListResponse; import org.lbcc.bms.bms_monolith.entity.Event; import org.lbcc.bms.bms_monolith.exception.EventServiceException; -import org.lbcc.bms.bms_monolith.repository.EventRepository; +import org.lbcc.bms.bms_monolith.repository.IEventRepository; import org.lbcc.bms.bms_monolith.service.impl.EventServiceImpl; import org.mockito.InjectMocks; import org.mockito.Mock; @@ -13,6 +12,7 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import java.util.Collections; @@ -26,7 +26,7 @@ public class EventServiceImplTest { @Mock - private EventRepository eventRepository; + private IEventRepository IEventRepository; @InjectMocks private EventServiceImpl eventService; @@ -42,23 +42,25 @@ void testGetAllEventsSuccess() { event.setTitle("Sample Event"); event.setDescription("Sample Description"); - Page eventPage = new PageImpl<>(Collections.singletonList(event), PageRequest.of(0, 10), 1); - when(eventRepository.findAllWithDetails(PageRequest.of(0, 10))).thenReturn(eventPage); + Pageable pageable = PageRequest.of(0, 10); + Page eventPage = new PageImpl<>(Collections.singletonList(event), pageable, 1); - ApiListResponse response = eventService.getAllEvents(0, 10); + when(IEventRepository.findAllWithDetails(pageable)).thenReturn(eventPage); - assertTrue(response.isSuccess()); - assertEquals("Events fetched successfully", response.getMessage()); - assertNotNull(response.getData()); - assertEquals(1, response.getData().size()); - assertEquals("Sample Event", response.getData().get(0).getTitle()); + Page response = eventService.getAllEvents(pageable); + + assertNotNull(response); + assertEquals(1, response.getTotalElements()); + assertEquals("Sample Event", response.getContent().get(0).getTitle()); + assertEquals("Sample Description", response.getContent().get(0).getDescription()); } @Test void testGetAllEventsExceptionHandling() { - when(eventRepository.findAllWithDetails(any())).thenThrow(new RuntimeException("Database error")); - Exception exception = assertThrows(EventServiceException.class, () -> { - eventService.getAllEvents(0, 10); + when(IEventRepository.findAllWithDetails(any(Pageable.class))).thenThrow(new RuntimeException("Database error")); + + EventServiceException exception = assertThrows(EventServiceException.class, () -> { + eventService.getAllEvents(PageRequest.of(0, 10)); }); assertEquals("Failed to fetch events", exception.getMessage()); From e5484b1d215e2f7f7564b2527660df796ebf6175 Mon Sep 17 00:00:00 2001 From: damini1994 Date: Sun, 3 Nov 2024 00:20:36 +0530 Subject: [PATCH 7/8] Resolved reviewed comments --- .../java/org/lbcc/bms/bms_monolith/entity/SeatTypeInShow.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/SeatTypeInShow.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/SeatTypeInShow.java index bcae0c2..c56bf6a 100644 --- a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/SeatTypeInShow.java +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/SeatTypeInShow.java @@ -3,6 +3,7 @@ import jakarta.persistence.Entity; import jakarta.persistence.ManyToOne; import jakarta.persistence.JoinColumn; +import jakarta.persistence.Column; import lombok.experimental.SuperBuilder; import org.lbcc.bms.bms_monolith.common.entity.BaseAuditingEntity; @@ -20,5 +21,6 @@ public class SeatTypeInShow extends BaseAuditingEntity { @JoinColumn(name = "show_id") private EventShow show; + @Column(precision = 10, scale = 2) private BigDecimal price; } From 5eb134293170111f8f22f058dd8082e9b2c29be3 Mon Sep 17 00:00:00 2001 From: damini1994 Date: Sun, 3 Nov 2024 00:33:51 +0530 Subject: [PATCH 8/8] #8 Resolved reviewed comments --- .../java/org/lbcc/bms/bms_monolith/entity/Vendor.java | 7 +++++++ .../main/java/org/lbcc/bms/bms_monolith/entity/Venue.java | 8 +++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Vendor.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Vendor.java index 8b8b395..0b7ec1f 100644 --- a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Vendor.java +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Vendor.java @@ -3,6 +3,8 @@ import jakarta.persistence.Entity; import jakarta.persistence.Enumerated; import jakarta.persistence.EnumType; +import jakarta.persistence.Column; +import jakarta.validation.constraints.Size; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -26,6 +28,11 @@ public class Vendor extends BaseAuditingEntity { @Enumerated(EnumType.STRING) private VendorStatus status; + @Column(nullable = true, length = 100) + @Size(min = 10, max = 100, message = "Registration date must be between 10 and 100 characters.") private String registrationDate; + + @Column(nullable = false, length = 255) + @Size(min = 25, max = 255, message = "Logo URL must be between 25 and 255 characters.") private String logoUrl; } diff --git a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Venue.java b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Venue.java index e4ae61b..2c49496 100644 --- a/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Venue.java +++ b/book-my-show/backend/java/bms-monolith/src/main/java/org/lbcc/bms/bms_monolith/entity/Venue.java @@ -3,7 +3,11 @@ import jakarta.persistence.Entity; import jakarta.persistence.Enumerated; import jakarta.persistence.EnumType; +import jakarta.persistence.CascadeType; +import jakarta.persistence.FetchType; import jakarta.persistence.OneToMany; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -33,6 +37,8 @@ public class Venue extends BaseAuditingEntity { @Enumerated(EnumType.STRING) private OperationalStatus operationalStatus; - @OneToMany(mappedBy = "venue") + @OneToMany(mappedBy = "venue", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @NotNull(message = "Seats list cannot be null.") + @Size(min = 1, max = 100, message = "Seats list must contain between 1 and 100 seats.") private List seats; }