diff --git a/.gitignore b/.gitignore index dc01f204..4d6c7236 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,5 @@ out/ ### VS Code ### .vscode/ + +application.yml diff --git a/build.gradle b/build.gradle index 3d7f7607..836c7ade 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ plugins { id 'java' - id 'org.springframework.boot' version '3.3.1' - id 'io.spring.dependency-management' version '1.1.5' + id 'org.springframework.boot' version '3.4.1' + id 'io.spring.dependency-management' version '1.1.7' } group = 'com.booleanuk' @@ -13,6 +13,12 @@ java { } } +configurations { + compileOnly { + extendsFrom annotationProcessor + } +} + repositories { mavenCentral() } @@ -20,10 +26,14 @@ repositories { dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' + compileOnly 'org.projectlombok:lombok' developmentOnly 'org.springframework.boot:spring-boot-devtools' runtimeOnly 'org.postgresql:postgresql' + annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' + // https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-starter-webmvc-ui + implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.3' } tasks.named('test') { diff --git a/src/main/java/com/booleanuk/api/cinema/Main.java b/src/main/java/com/booleanuk/api/cinema/Main.java new file mode 100644 index 00000000..c4fb60ea --- /dev/null +++ b/src/main/java/com/booleanuk/api/cinema/Main.java @@ -0,0 +1,11 @@ +package com.booleanuk.api.cinema; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Main { + public static void main(String[] args) { + SpringApplication.run(Main.class, args); + } +} diff --git a/src/main/java/com/booleanuk/api/cinema/controller/CustomerController.java b/src/main/java/com/booleanuk/api/cinema/controller/CustomerController.java new file mode 100644 index 00000000..efd6c4b3 --- /dev/null +++ b/src/main/java/com/booleanuk/api/cinema/controller/CustomerController.java @@ -0,0 +1,96 @@ +package com.booleanuk.api.cinema.controller; + +import com.booleanuk.api.cinema.model.Customer; +import com.booleanuk.api.cinema.repository.CustomerRepository; +import com.booleanuk.api.cinema.responses.CustomerListResponse; +import com.booleanuk.api.cinema.responses.CustomerResponse; +import com.booleanuk.api.cinema.responses.ErrorResponse; +import com.booleanuk.api.cinema.responses.Response; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.time.LocalDate; + +@RestController +@RequestMapping("customers") +public class CustomerController { + @Autowired + private CustomerRepository customerRepository; + + + @GetMapping + public ResponseEntity getAllCustomers(){ + CustomerListResponse customerListResponse = new CustomerListResponse(); + customerListResponse.set(this.customerRepository.findAll()); + return ResponseEntity.ok(customerListResponse); + } + + + + @ResponseStatus(HttpStatus.CREATED) + @PostMapping + public ResponseEntity> create(@RequestBody Customer request) { + CustomerResponse customerResponse = new CustomerResponse(); + try{ + customerResponse.set(this.customerRepository.save(request)); + } catch (Exception e) { + ErrorResponse error = new ErrorResponse(); + error.set("bad request"); + return new ResponseEntity<>(error, HttpStatus.BAD_REQUEST); + } + + return new ResponseEntity<>(customerResponse, HttpStatus.CREATED); + } + + + + @PutMapping("{id}") + public ResponseEntity> updateCustomer(@PathVariable int id, @RequestBody Customer customer) { + Customer customerToUpdate = null; + + try { + customerToUpdate = this.customerRepository.findById(id).orElse(null); + if(customerToUpdate == null){ + ErrorResponse error = new ErrorResponse(); + error.set("not found"); + return new ResponseEntity<>(error, HttpStatus.NOT_FOUND); + } + customerToUpdate.setName(customer.getName()); + customerToUpdate.setEmail(customer.getEmail()); + customerToUpdate.setPhone(customer.getPhone()); + customerToUpdate.setUpdatedAt(LocalDate.now()); + customerToUpdate = this.customerRepository.save(customerToUpdate); + + } catch (Exception e) { + ErrorResponse error = new ErrorResponse(); + error.set("bad request"); + return new ResponseEntity<>(error, HttpStatus.BAD_REQUEST); + } + + CustomerResponse customerResponse = new CustomerResponse(); + customerResponse.set(customerToUpdate); + + return new ResponseEntity<>(customerResponse, HttpStatus.CREATED); + } + + + + @DeleteMapping("{id}") + public ResponseEntity> deleteCustomer(@PathVariable int id) { + Customer customerToDelete = this.customerRepository.findById(id).orElse(null); + + if(customerToDelete == null){ + ErrorResponse error = new ErrorResponse(); + error.set("not found"); + return new ResponseEntity<>(error, HttpStatus.NOT_FOUND); + } + + this.customerRepository.delete(customerToDelete); + CustomerResponse customerResponse = new CustomerResponse(); + customerResponse.set(customerToDelete); + + return ResponseEntity.ok(customerResponse); + } +} diff --git a/src/main/java/com/booleanuk/api/cinema/controller/MovieController.java b/src/main/java/com/booleanuk/api/cinema/controller/MovieController.java new file mode 100644 index 00000000..ab83ac0f --- /dev/null +++ b/src/main/java/com/booleanuk/api/cinema/controller/MovieController.java @@ -0,0 +1,107 @@ +package com.booleanuk.api.cinema.controller; + +import com.booleanuk.api.cinema.model.Movie; +import com.booleanuk.api.cinema.model.Screening; +import com.booleanuk.api.cinema.repository.MovieRepository; +import com.booleanuk.api.cinema.repository.ScreeningRepository; +import com.booleanuk.api.cinema.responses.ErrorResponse; +import com.booleanuk.api.cinema.responses.MovieListResponse; +import com.booleanuk.api.cinema.responses.MovieResponse; +import com.booleanuk.api.cinema.responses.Response; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.time.LocalDate; + +@RestController +@RequestMapping("movies") +public class MovieController { + @Autowired + private MovieRepository movieRepository; + + @Autowired + private ScreeningRepository screeningRepository; + + + @GetMapping + public ResponseEntity getAllMovies(){ + MovieListResponse movieListResponse = new MovieListResponse(); + movieListResponse.set(this.movieRepository.findAll()); + return ResponseEntity.ok(movieListResponse); + } + + + + @ResponseStatus(HttpStatus.CREATED) + @PostMapping + public ResponseEntity> create(@RequestBody Movie request) { + MovieResponse movieResponse = new MovieResponse(); + + try{ + movieResponse.set(this.movieRepository.save(request)); + } catch (Exception e) { + ErrorResponse error = new ErrorResponse(); + error.set("bad request"); + return new ResponseEntity<>(error, HttpStatus.BAD_REQUEST); + } + + if(request.getScreenings() != null){ + for(Screening screening : request.getScreenings()){ + Screening newScreening = new Screening(screening.getScreenNumber(), screening.getCapacity(), screening.getStartsAt(), request); + this.screeningRepository.save(newScreening); + } + } + + return new ResponseEntity<>(movieResponse, HttpStatus.CREATED); + } + + + + @PutMapping("{id}") + public ResponseEntity> updateMovie(@PathVariable int id, @RequestBody Movie movie) { + Movie movieToUpdate = null; + + try { + movieToUpdate = this.movieRepository.findById(id).orElse(null); + if(movieToUpdate == null){ + ErrorResponse error = new ErrorResponse(); + error.set("not found"); + return new ResponseEntity<>(error, HttpStatus.NOT_FOUND); + } + movieToUpdate.setTitle(movie.getTitle()); + movieToUpdate.setRating(movie.getRating()); + movieToUpdate.setDescription(movie.getDescription()); + movieToUpdate.setRuntimeMins(movie.getRuntimeMins()); + movieToUpdate.setUpdatedAt(LocalDate.now()); + movieToUpdate = this.movieRepository.save(movieToUpdate); + + } catch (Exception e) { + ErrorResponse error = new ErrorResponse(); + error.set("bad request"); + return new ResponseEntity<>(error, HttpStatus.BAD_REQUEST); + } + MovieResponse movieResponse = new MovieResponse(); + movieResponse.set(movieToUpdate); + + return new ResponseEntity<>(movieResponse, HttpStatus.CREATED); + } + + + @DeleteMapping("{id}") + public ResponseEntity> deleteMovie(@PathVariable int id) { + Movie movieToDelete = this.movieRepository.findById(id).orElse(null); + + if(movieToDelete == null){ + ErrorResponse error = new ErrorResponse(); + error.set("not found"); + return new ResponseEntity<>(error, HttpStatus.NOT_FOUND); + } + this.movieRepository.delete(movieToDelete); + MovieResponse movieResponse = new MovieResponse(); + movieResponse.set(movieToDelete); + + return ResponseEntity.ok(movieResponse); + } +} diff --git a/src/main/java/com/booleanuk/api/cinema/controller/ScreeningController.java b/src/main/java/com/booleanuk/api/cinema/controller/ScreeningController.java new file mode 100644 index 00000000..07339b2b --- /dev/null +++ b/src/main/java/com/booleanuk/api/cinema/controller/ScreeningController.java @@ -0,0 +1,68 @@ +package com.booleanuk.api.cinema.controller; + +import com.booleanuk.api.cinema.model.Movie; +import com.booleanuk.api.cinema.model.Screening; +import com.booleanuk.api.cinema.repository.MovieRepository; +import com.booleanuk.api.cinema.repository.ScreeningRepository; +import com.booleanuk.api.cinema.responses.ErrorResponse; +import com.booleanuk.api.cinema.responses.Response; +import com.booleanuk.api.cinema.responses.ScreeningListResponse; +import com.booleanuk.api.cinema.responses.ScreeningResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + + +@RestController +@RequestMapping("movies/{id}/screenings") +public class ScreeningController { + @Autowired + private ScreeningRepository screeningRepository; + + @Autowired + private MovieRepository movieRepository; + + + @GetMapping + public ResponseEntity getAllScreening(@PathVariable int id){ + Movie movie = this.movieRepository.findById(id).orElse(null); + if(movie == null){ + ErrorResponse error = new ErrorResponse(); + error.set("not found"); + return new ResponseEntity<>(error, HttpStatus.NOT_FOUND); + } + + ScreeningListResponse screeningListResponse = new ScreeningListResponse(); + screeningListResponse.set(this.screeningRepository.getScreeningByMovie(movie)); + + return ResponseEntity.ok(screeningListResponse); + } + + + + @ResponseStatus(HttpStatus.CREATED) + @PostMapping + public ResponseEntity> create(@PathVariable int id, @RequestBody Screening request) { + ScreeningResponse screeningResponse = new ScreeningResponse(); + + try { + Movie movie = this.movieRepository.findById(id).orElse(null); + if(movie == null){ + ErrorResponse error = new ErrorResponse(); + error.set("not found"); + return new ResponseEntity<>(error, HttpStatus.NOT_FOUND); + } + + request.setMovie(movie); + screeningResponse.set(this.screeningRepository.save(request)); + + } catch (Exception e) { + ErrorResponse error = new ErrorResponse(); + error.set("bad request"); + return new ResponseEntity<>(error, HttpStatus.BAD_REQUEST); + } + + return new ResponseEntity<>(screeningResponse, HttpStatus.CREATED); + } +} diff --git a/src/main/java/com/booleanuk/api/cinema/controller/TicketController.java b/src/main/java/com/booleanuk/api/cinema/controller/TicketController.java new file mode 100644 index 00000000..9f412040 --- /dev/null +++ b/src/main/java/com/booleanuk/api/cinema/controller/TicketController.java @@ -0,0 +1,68 @@ +package com.booleanuk.api.cinema.controller; + +import com.booleanuk.api.cinema.model.Customer; +import com.booleanuk.api.cinema.model.Screening; +import com.booleanuk.api.cinema.model.Ticket; +import com.booleanuk.api.cinema.repository.CustomerRepository; +import com.booleanuk.api.cinema.repository.ScreeningRepository; +import com.booleanuk.api.cinema.repository.TicketRepository; +import com.booleanuk.api.cinema.responses.ErrorResponse; +import com.booleanuk.api.cinema.responses.Response; +import com.booleanuk.api.cinema.responses.TicketListResponse; +import com.booleanuk.api.cinema.responses.TicketResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + + +@RestController +@RequestMapping("customers/{cId}/screenings/{sId}") +public class TicketController { + @Autowired + private TicketRepository ticketRepository; + + @Autowired + private CustomerRepository customerRepository; + + @Autowired + private ScreeningRepository screeningRepository; + + + @GetMapping + public ResponseEntity getAllTickets(@PathVariable("cId") int cId, @PathVariable("sId") int sId){ + Customer customer = this.customerRepository.findById(cId).orElse(null); + Screening screening = this.screeningRepository.findById(sId).orElse(null); + + if(customer == null || screening == null){ + ErrorResponse error = new ErrorResponse(); + error.set("not found"); + return new ResponseEntity<>(error, HttpStatus.NOT_FOUND); + } + TicketListResponse ticketListResponse = new TicketListResponse(); + ticketListResponse.set(this.ticketRepository.findAllTicketsByCustomerAndScreening(customer, screening)); + + return ResponseEntity.ok(ticketListResponse); + } + + + @ResponseStatus(HttpStatus.CREATED) + @PostMapping + public ResponseEntity> create(@RequestBody Ticket request, @PathVariable("cId") int cId, @PathVariable("sId") int sId) { + TicketResponse ticketResponse = new TicketResponse(); + + Customer customer = this.customerRepository.findById(cId).orElse(null); + Screening screening = this.screeningRepository.findById(sId).orElse(null); + + if(customer == null || screening == null){ + ErrorResponse error = new ErrorResponse(); + error.set("not found"); + return new ResponseEntity<>(error, HttpStatus.NOT_FOUND); + } + request.setCustomer(customer); + request.setScreening(screening); + + ticketResponse.set(this.ticketRepository.save(request)); + return new ResponseEntity<>(ticketResponse, HttpStatus.CREATED); + } +} diff --git a/src/main/java/com/booleanuk/api/cinema/model/Customer.java b/src/main/java/com/booleanuk/api/cinema/model/Customer.java new file mode 100644 index 00000000..54ccca9b --- /dev/null +++ b/src/main/java/com/booleanuk/api/cinema/model/Customer.java @@ -0,0 +1,54 @@ +package com.booleanuk.api.cinema.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDate; +import java.util.List; + +@Getter +@Setter +@AllArgsConstructor +@Entity +@Table(name = "customers") +@JsonIgnoreProperties({"tickets"}) +public class Customer { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(nullable = false) + private String name; + + @Column(nullable = false) + private String email; + + @Column(nullable = false) + private String phone; + + @Column + private LocalDate createdAt; + + @Column + private LocalDate updatedAt; + + @OneToMany(mappedBy = "customer", cascade = CascadeType.REMOVE, orphanRemoval = true) + private List tickets; + + public Customer(String name, String email, String phone){ + this.name = name; + this.email = email; + this.phone = phone; + this.createdAt = LocalDate.now(); + this.updatedAt = LocalDate.now(); + } + + public Customer(){ + this.createdAt = LocalDate.now(); + this.updatedAt = LocalDate.now(); + } +} diff --git a/src/main/java/com/booleanuk/api/cinema/model/Movie.java b/src/main/java/com/booleanuk/api/cinema/model/Movie.java new file mode 100644 index 00000000..a2df9b11 --- /dev/null +++ b/src/main/java/com/booleanuk/api/cinema/model/Movie.java @@ -0,0 +1,67 @@ +package com.booleanuk.api.cinema.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDate; +import java.util.List; + +@Getter +@Setter +@AllArgsConstructor +@Entity +@Table(name = "movies") +@JsonIgnoreProperties({"screenings"}) +public class Movie { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(nullable = false) + private String title; + + @Column(nullable = false) + private String rating; + + @Column(nullable = false) + private String description; + + @Column(nullable = false) + private Integer runtimeMins; + + @Column + private LocalDate createdAt; + + @Column + private LocalDate updatedAt; + + @OneToMany(mappedBy = "movie", cascade = CascadeType.REMOVE, orphanRemoval = true) + private List screenings; + + public Movie(String title, String rating, String description, Integer runtimeMins){ + this.title = title; + this.rating = rating; + this.description = description; + this.runtimeMins = runtimeMins; + this.createdAt = LocalDate.now(); + this.updatedAt = LocalDate.now(); + } + + public Movie(String title, String rating, String description, Integer runtimeMins, List screenings){ + this.title = title; + this.rating = rating; + this.description = description; + this.runtimeMins = runtimeMins; + this.createdAt = LocalDate.now(); + this.updatedAt = LocalDate.now(); + this.screenings = screenings; + } + + public Movie(){ + this.createdAt = LocalDate.now(); + this.updatedAt = LocalDate.now(); + } +} diff --git a/src/main/java/com/booleanuk/api/cinema/model/Screening.java b/src/main/java/com/booleanuk/api/cinema/model/Screening.java new file mode 100644 index 00000000..ba1addd6 --- /dev/null +++ b/src/main/java/com/booleanuk/api/cinema/model/Screening.java @@ -0,0 +1,67 @@ +package com.booleanuk.api.cinema.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDate; +import java.util.List; + +@Getter +@Setter +@AllArgsConstructor +@Entity +@Table(name = "screenings") +@JsonIgnoreProperties({"movie", "tickets"}) +public class Screening { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(nullable = false) + private Integer screenNumber; + + @Column(nullable = false) + private Integer capacity; + + @Column(nullable = false) + private LocalDate startsAt; + + @Column + private LocalDate createdAt; + + @Column + private LocalDate updatedAt; + + @ManyToOne + @JoinColumn(name = "movie_id", nullable = false) + @JsonIgnoreProperties({"id", "screenings"}) + private Movie movie; + + @OneToMany(mappedBy = "screening", cascade = CascadeType.REMOVE, orphanRemoval = true) + private List tickets; + + public Screening(Integer screenNumber, Integer capacity, LocalDate startsAt){ + this.screenNumber = screenNumber; + this.capacity = capacity; + this.startsAt = startsAt; + this.createdAt = LocalDate.now(); + this.updatedAt = LocalDate.now(); + } + + public Screening(Integer screenNumber, Integer capacity, LocalDate startsAt, Movie movie){ + this.screenNumber = screenNumber; + this.capacity = capacity; + this.startsAt = startsAt; + this.createdAt = LocalDate.now(); + this.updatedAt = LocalDate.now(); + this.movie = movie; + } + + public Screening(){ + this.createdAt = LocalDate.now(); + this.updatedAt = LocalDate.now(); + } +} diff --git a/src/main/java/com/booleanuk/api/cinema/model/Ticket.java b/src/main/java/com/booleanuk/api/cinema/model/Ticket.java new file mode 100644 index 00000000..c1a40ab6 --- /dev/null +++ b/src/main/java/com/booleanuk/api/cinema/model/Ticket.java @@ -0,0 +1,52 @@ +package com.booleanuk.api.cinema.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDate; + +@Getter +@Setter +@AllArgsConstructor +@Entity +@Table(name = "tickets") +@JsonIgnoreProperties({"customer", "screening"}) +public class Ticket { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(nullable = false) + private Integer numSeats; + + @Column + private LocalDate createdAt; + + @Column + private LocalDate updatedAt; + + @ManyToOne + @JoinColumn(name = "customer_id", nullable = false) + @JsonIgnoreProperties({"tickets", "id", "phone"}) + private Customer customer; + + @ManyToOne + @JoinColumn(name = "screening_id", nullable = false) + @JsonIgnoreProperties({"tickets", "id"}) + private Screening screening; + + public Ticket(Integer numSeats, Customer customer, Screening screening){ + this.numSeats = numSeats; + this.customer = customer; + this.screening = screening; + this.createdAt = LocalDate.now(); + this.updatedAt = LocalDate.now(); + } + public Ticket(){ + this.createdAt = LocalDate.now(); + this.updatedAt = LocalDate.now(); + } +} diff --git a/src/main/java/com/booleanuk/api/cinema/repository/CustomerRepository.java b/src/main/java/com/booleanuk/api/cinema/repository/CustomerRepository.java new file mode 100644 index 00000000..5ddf67bc --- /dev/null +++ b/src/main/java/com/booleanuk/api/cinema/repository/CustomerRepository.java @@ -0,0 +1,7 @@ +package com.booleanuk.api.cinema.repository; + +import com.booleanuk.api.cinema.model.Customer; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface CustomerRepository extends JpaRepository { +} diff --git a/src/main/java/com/booleanuk/api/cinema/repository/MovieRepository.java b/src/main/java/com/booleanuk/api/cinema/repository/MovieRepository.java new file mode 100644 index 00000000..c689e162 --- /dev/null +++ b/src/main/java/com/booleanuk/api/cinema/repository/MovieRepository.java @@ -0,0 +1,7 @@ +package com.booleanuk.api.cinema.repository; + +import com.booleanuk.api.cinema.model.Movie; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface MovieRepository extends JpaRepository { +} diff --git a/src/main/java/com/booleanuk/api/cinema/repository/ScreeningRepository.java b/src/main/java/com/booleanuk/api/cinema/repository/ScreeningRepository.java new file mode 100644 index 00000000..9fc74b2a --- /dev/null +++ b/src/main/java/com/booleanuk/api/cinema/repository/ScreeningRepository.java @@ -0,0 +1,11 @@ +package com.booleanuk.api.cinema.repository; + +import com.booleanuk.api.cinema.model.Movie; +import com.booleanuk.api.cinema.model.Screening; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface ScreeningRepository extends JpaRepository { + List getScreeningByMovie(Movie movie); +} diff --git a/src/main/java/com/booleanuk/api/cinema/repository/TicketRepository.java b/src/main/java/com/booleanuk/api/cinema/repository/TicketRepository.java new file mode 100644 index 00000000..48be7587 --- /dev/null +++ b/src/main/java/com/booleanuk/api/cinema/repository/TicketRepository.java @@ -0,0 +1,12 @@ +package com.booleanuk.api.cinema.repository; + +import com.booleanuk.api.cinema.model.Customer; +import com.booleanuk.api.cinema.model.Screening; +import com.booleanuk.api.cinema.model.Ticket; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface TicketRepository extends JpaRepository { + List findAllTicketsByCustomerAndScreening(Customer customer, Screening screening); +} diff --git a/src/main/java/com/booleanuk/api/cinema/responses/CustomerListResponse.java b/src/main/java/com/booleanuk/api/cinema/responses/CustomerListResponse.java new file mode 100644 index 00000000..97cbda2b --- /dev/null +++ b/src/main/java/com/booleanuk/api/cinema/responses/CustomerListResponse.java @@ -0,0 +1,8 @@ +package com.booleanuk.api.cinema.responses; + +import com.booleanuk.api.cinema.model.Customer; + +import java.util.List; + +public class CustomerListResponse extends Response>{ +} diff --git a/src/main/java/com/booleanuk/api/cinema/responses/CustomerResponse.java b/src/main/java/com/booleanuk/api/cinema/responses/CustomerResponse.java new file mode 100644 index 00000000..838c7f21 --- /dev/null +++ b/src/main/java/com/booleanuk/api/cinema/responses/CustomerResponse.java @@ -0,0 +1,7 @@ +package com.booleanuk.api.cinema.responses; + +import com.booleanuk.api.cinema.model.Customer; + +public class CustomerResponse extends Response{ + +} diff --git a/src/main/java/com/booleanuk/api/cinema/responses/ErrorResponse.java b/src/main/java/com/booleanuk/api/cinema/responses/ErrorResponse.java new file mode 100644 index 00000000..892eeebd --- /dev/null +++ b/src/main/java/com/booleanuk/api/cinema/responses/ErrorResponse.java @@ -0,0 +1,19 @@ +package com.booleanuk.api.cinema.responses; + +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.HashMap; +import java.util.Map; + +@Getter +@NoArgsConstructor +public class ErrorResponse extends Response>{ + + public void set(String message){ + this.status = "error"; + Map reply = new HashMap<>(); + reply.put("message", message); + this.data = reply; + } +} diff --git a/src/main/java/com/booleanuk/api/cinema/responses/MovieListResponse.java b/src/main/java/com/booleanuk/api/cinema/responses/MovieListResponse.java new file mode 100644 index 00000000..f478d7f0 --- /dev/null +++ b/src/main/java/com/booleanuk/api/cinema/responses/MovieListResponse.java @@ -0,0 +1,8 @@ +package com.booleanuk.api.cinema.responses; + +import com.booleanuk.api.cinema.model.Movie; + +import java.util.List; + +public class MovieListResponse extends Response>{ +} diff --git a/src/main/java/com/booleanuk/api/cinema/responses/MovieResponse.java b/src/main/java/com/booleanuk/api/cinema/responses/MovieResponse.java new file mode 100644 index 00000000..19e629c6 --- /dev/null +++ b/src/main/java/com/booleanuk/api/cinema/responses/MovieResponse.java @@ -0,0 +1,6 @@ +package com.booleanuk.api.cinema.responses; + +import com.booleanuk.api.cinema.model.Movie; + +public class MovieResponse extends Response{ +} diff --git a/src/main/java/com/booleanuk/api/cinema/responses/Response.java b/src/main/java/com/booleanuk/api/cinema/responses/Response.java new file mode 100644 index 00000000..ceda5335 --- /dev/null +++ b/src/main/java/com/booleanuk/api/cinema/responses/Response.java @@ -0,0 +1,14 @@ +package com.booleanuk.api.cinema.responses; + +import lombok.Getter; + +@Getter +public class Response { + protected String status; + protected T data; + + public void set(T data){ + this.status = "success"; + this.data = data; + } +} diff --git a/src/main/java/com/booleanuk/api/cinema/responses/ScreeningListResponse.java b/src/main/java/com/booleanuk/api/cinema/responses/ScreeningListResponse.java new file mode 100644 index 00000000..e804220a --- /dev/null +++ b/src/main/java/com/booleanuk/api/cinema/responses/ScreeningListResponse.java @@ -0,0 +1,8 @@ +package com.booleanuk.api.cinema.responses; + +import com.booleanuk.api.cinema.model.Screening; + +import java.util.List; + +public class ScreeningListResponse extends Response>{ +} diff --git a/src/main/java/com/booleanuk/api/cinema/responses/ScreeningResponse.java b/src/main/java/com/booleanuk/api/cinema/responses/ScreeningResponse.java new file mode 100644 index 00000000..7a63e1ff --- /dev/null +++ b/src/main/java/com/booleanuk/api/cinema/responses/ScreeningResponse.java @@ -0,0 +1,6 @@ +package com.booleanuk.api.cinema.responses; + +import com.booleanuk.api.cinema.model.Screening; + +public class ScreeningResponse extends Response{ +} diff --git a/src/main/java/com/booleanuk/api/cinema/responses/TicketListResponse.java b/src/main/java/com/booleanuk/api/cinema/responses/TicketListResponse.java new file mode 100644 index 00000000..39216950 --- /dev/null +++ b/src/main/java/com/booleanuk/api/cinema/responses/TicketListResponse.java @@ -0,0 +1,8 @@ +package com.booleanuk.api.cinema.responses; + +import com.booleanuk.api.cinema.model.Ticket; + +import java.util.List; + +public class TicketListResponse extends Response>{ +} diff --git a/src/main/java/com/booleanuk/api/cinema/responses/TicketResponse.java b/src/main/java/com/booleanuk/api/cinema/responses/TicketResponse.java new file mode 100644 index 00000000..a39e9db9 --- /dev/null +++ b/src/main/java/com/booleanuk/api/cinema/responses/TicketResponse.java @@ -0,0 +1,6 @@ +package com.booleanuk.api.cinema.responses; + +import com.booleanuk.api.cinema.model.Ticket; + +public class TicketResponse extends Response{ +}