inital checking for spring-boot-test example project

This commit is contained in:
Tom Hombergs
2018-05-20 20:38:28 +02:00
parent f854262f80
commit f2b83425ac
12 changed files with 226 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
package io.reflectoring.booking;
import io.reflectoring.booking.business.BookingService;
import org.springframework.context.annotation.Bean;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import io.reflectoring.booking.data.BookingRepository;
import io.reflectoring.customer.CustomerRepository;
import io.reflectoring.flight.FlightRepository;
@EnableJpaRepositories("re")
public class BookingConfiguration {
@Bean
public BookingService bookingService(BookingRepository bookingRepository, CustomerRepository customerRepository, FlightRepository flightRepository) {
return new BookingService(bookingRepository, customerRepository, flightRepository);
}
}

View File

@@ -0,0 +1,52 @@
package io.reflectoring.booking.business;
import java.util.Optional;
import io.reflectoring.booking.data.Booking;
import io.reflectoring.booking.data.BookingRepository;
import io.reflectoring.customer.Customer;
import io.reflectoring.customer.CustomerRepository;
import io.reflectoring.flight.Flight;
import io.reflectoring.flight.FlightRepository;
public class BookingService {
private BookingRepository bookingRepository;
private CustomerRepository customerRepository;
private FlightRepository flightRepository;
public BookingService(
BookingRepository bookingRepository,
CustomerRepository customerRepository,
FlightRepository flightRepository) {
this.bookingRepository = bookingRepository;
this.customerRepository = customerRepository;
this.flightRepository = flightRepository;
}
/**
* Books the given flight for the given customer.
*/
public Booking bookFlight(Long customerId, Long flightId) {
Optional<Customer> customer = customerRepository.findById(customerId);
if (!customer.isPresent()) {
throw new CustomerDoesNotExistException(customerId);
}
Optional<Flight> flight = flightRepository.findById(flightId);
if (!flight.isPresent()) {
throw new FlightDoesNotExistException(flightId);
}
Booking booking = Booking.builder()
.customer(customer.get())
.flight(flight.get())
.build();
return this.bookingRepository.save(booking);
}
}

View File

@@ -0,0 +1,9 @@
package io.reflectoring.booking.business;
class CustomerDoesNotExistException extends RuntimeException {
CustomerDoesNotExistException(Long customerId) {
super(String.format("A customer with ID '%d' doesn't exist!", customerId));
}
}

View File

@@ -0,0 +1,9 @@
package io.reflectoring.booking.business;
class FlightDoesNotExistException extends RuntimeException {
FlightDoesNotExistException(Long flightId) {
super(String.format("A flight with ID '%d' doesn't exist!", flightId));
}
}

View File

@@ -0,0 +1,28 @@
package io.reflectoring.booking.data;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import io.reflectoring.customer.Customer;
import io.reflectoring.flight.Flight;
import lombok.Builder;
import lombok.Data;
@Entity
@Data
@Builder
public class Booking {
@Id
@GeneratedValue
private Long id;
@ManyToOne
private Customer customer;
@ManyToOne
private Flight flight;
}

View File

@@ -0,0 +1,6 @@
package io.reflectoring.booking.data;
import org.springframework.data.repository.CrudRepository;
public interface BookingRepository extends CrudRepository<Booking, Long> {
}

View File

@@ -0,0 +1,37 @@
package io.reflectoring.booking.web;
import io.reflectoring.booking.business.BookingService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import io.reflectoring.booking.data.Booking;
@RestController
public class BookingController {
private BookingService bookingService;
public BookingController(BookingService bookingService) {
this.bookingService = bookingService;
}
@PostMapping("/booking")
public ResponseEntity<BookingResultResource> bookFlight(
@RequestParam("customerId") Long customerId,
@RequestParam("flightId") Long flightId) {
try {
Booking booking = bookingService.bookFlight(customerId, flightId);
BookingResultResource bookingResult = BookingResultResource.builder()
.success(true)
.build();
return ResponseEntity.ok(bookingResult);
} catch (Exception e) {
BookingResultResource bookingResult = BookingResultResource.builder()
.success(false)
.build();
return ResponseEntity.badRequest().body(bookingResult);
}
}
}

View File

@@ -0,0 +1,12 @@
package io.reflectoring.booking.web;
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class BookingResultResource {
private boolean success;
}

View File

@@ -0,0 +1,20 @@
package io.reflectoring.customer;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import lombok.Builder;
import lombok.Data;
@Entity
@Data
@Builder
public class Customer {
@Id
@GeneratedValue
private Long id;
private String name;
}

View File

@@ -0,0 +1,6 @@
package io.reflectoring.customer;
import org.springframework.data.repository.CrudRepository;
public interface CustomerRepository extends CrudRepository<Customer, Long> {
}

View File

@@ -0,0 +1,23 @@
package io.reflectoring.flight;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import lombok.Builder;
import lombok.Data;
@Entity
@Data
@Builder
public class Flight {
@Id
@GeneratedValue
private Long id;
private String flightNumber;
private String airline;
}

View File

@@ -0,0 +1,6 @@
package io.reflectoring.flight;
import org.springframework.data.repository.CrudRepository;
public interface FlightRepository extends CrudRepository<Flight, Long> {
}