diff --git a/src/main/java/video/application/CustomerService.java b/src/main/java/video/application/CustomerService.java new file mode 100644 index 0000000..452c228 --- /dev/null +++ b/src/main/java/video/application/CustomerService.java @@ -0,0 +1,28 @@ +package video.application; + +import video.domain.Customer; +import video.domain.RentalResult; +import video.infrastructure.datasource.CustomerDataSource; +import video.infrastructure.datasource.RentalDataSource; +import video.infrastructure.transfer.RentalNotificationTransfer; + +public class CustomerService { + RentalDataSource rentalDataSource = new RentalDataSource(); + CustomerDataSource customerDataSource = new CustomerDataSource(); + RentalNotificationTransfer rentalNotificationTransfer = new RentalNotificationTransfer(); + public int rentalMovies(Customer customer) { + + RentalResult result = customer.rentalMovies(); + + // レンタルの記録 + int rentalId = rentalDataSource.registerRental(customer.getName(), customer.getRentals(), result.totalAmount()); + + // レンタルポイントの記録 + customerDataSource.registerRentalPoint(customer.getName(), result.frequentRenterPoints()); + + // レンタルの通知 + rentalNotificationTransfer.notice(customer.getName(), customer.getRentals()); + + return rentalId; + } +} diff --git a/src/main/java/video/domain/Customer.java b/src/main/java/video/domain/Customer.java index eae4912..1c859cd 100644 --- a/src/main/java/video/domain/Customer.java +++ b/src/main/java/video/domain/Customer.java @@ -1,9 +1,5 @@ package video.domain; -import video.infrastructure.datasource.CustomerDataSource; -import video.infrastructure.datasource.RentalDataSource; -import video.infrastructure.transfer.RentalNotificationTransfer; - import java.util.ArrayList; import java.util.List; @@ -11,10 +7,6 @@ public class Customer { private String name; private List rentals = new ArrayList<>(); - RentalDataSource rentalDataSource = new RentalDataSource(); - CustomerDataSource customerDataSource = new CustomerDataSource(); - RentalNotificationTransfer rentalNotificationTransfer = new RentalNotificationTransfer(); - public Customer(String name) { this.name = name; } @@ -27,7 +19,11 @@ public String getName() { return name; } - public int rentalMovies() { + public List getRentals() { + return rentals; + } + + public RentalResult rentalMovies() { int totalAmount = 0; int frequentRenterPoints = 0; for (Rental each : rentals) { @@ -56,15 +52,6 @@ public int rentalMovies() { totalAmount += thisAmount; } - // レンタルの記録 - int rentalId = rentalDataSource.registerRental(name, rentals, totalAmount); - - // レンタルポイントの記録 - customerDataSource.registerRentalPoint(name, frequentRenterPoints); - - // レンタルの通知 - rentalNotificationTransfer.notice(name, rentals); - - return rentalId; + return new RentalResult(totalAmount, frequentRenterPoints); } } \ No newline at end of file diff --git a/src/main/java/video/domain/RentalResult.java b/src/main/java/video/domain/RentalResult.java new file mode 100644 index 0000000..4517786 --- /dev/null +++ b/src/main/java/video/domain/RentalResult.java @@ -0,0 +1,6 @@ +package video.domain; + +public record RentalResult( + int totalAmount, + int frequentRenterPoints +) {} \ No newline at end of file diff --git a/src/test/java/video/domain/CustomerTest.java b/src/test/java/video/domain/CustomerTest.java index b1a3c39..5bad885 100644 --- a/src/test/java/video/domain/CustomerTest.java +++ b/src/test/java/video/domain/CustomerTest.java @@ -1,151 +1,118 @@ package video.domain; import org.junit.jupiter.api.Test; -import video.infrastructure.datasource.CustomerDataSource; -import video.infrastructure.datasource.RentalDataSource; -import video.infrastructure.datasource.data.RentalSummary; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; class CustomerTest { - CustomerDataSource customerDataSource = new CustomerDataSource(); - RentalDataSource rentalDataSource = new RentalDataSource(); - Movie 子供用作品_となりのトトロ = new Movie("となりのトトロ", PriceType.CHILDREN); Movie 旧作_トップガン = new Movie("トップガン", PriceType.REGULAR); Movie 新作_君たちはどう生きるか = new Movie("君たちはどう生きるか", PriceType.NEW_RELEASE); @Test void 新作を4日レンタル() { - Customer customer = new Customer("鈴木一郎"); - - customer.addRental(new Rental(新作_君たちはどう生きるか, 4)); + Customer sut = new Customer("鈴木一郎"); + sut.addRental(new Rental(新作_君たちはどう生きるか, 4)); - int rentalId = customer.rentalMovies(); + RentalResult result = sut.rentalMovies(); - RentalSummary rentalSummary = rentalDataSource.rentalRecordOf(rentalId); assertAll(() -> { - assertEquals(1200, rentalSummary.rentalRecord().totalAmount()); - - assertEquals(2, customerDataSource.pointOf(customer.getName())); + assertEquals(1200, result.totalAmount()); + assertEquals(2, result.frequentRenterPoints()); }); } @Test void 新作を1日レンタル() { - Customer customer = new Customer("佐藤華子"); + Customer sut = new Customer("佐藤華子"); + sut.addRental(new Rental(新作_君たちはどう生きるか, 1)); - customer.addRental(new Rental(新作_君たちはどう生きるか, 1)); + RentalResult result = sut.rentalMovies(); - int rentalId = customer.rentalMovies(); - - RentalSummary rentalSummary = rentalDataSource.rentalRecordOf(rentalId); assertAll(() -> { - assertEquals(300, rentalSummary.rentalRecord().totalAmount()); - - assertEquals(1, customerDataSource.pointOf(customer.getName())); + assertEquals(300, result.totalAmount()); + assertEquals(1, result.frequentRenterPoints()); }); } @Test void 旧作を2日レンタル() { - Customer customer = new Customer("岡山圭太"); + Customer sut = new Customer("岡山圭太"); + sut.addRental(new Rental(旧作_トップガン, 2)); - customer.addRental(new Rental(旧作_トップガン, 2)); + RentalResult result = sut.rentalMovies(); - int rentalId = customer.rentalMovies(); - - RentalSummary rentalSummary = rentalDataSource.rentalRecordOf(rentalId); assertAll(() -> { - assertEquals(200, rentalSummary.rentalRecord().totalAmount()); - - assertEquals(1, customerDataSource.pointOf(customer.getName())); + assertEquals(200, result.totalAmount()); + assertEquals(1, result.frequentRenterPoints()); }); } @Test void 旧作を3日レンタル() { - Customer customer = new Customer("香川真司"); + Customer sut = new Customer("香川真司"); + sut.addRental(new Rental(旧作_トップガン, 3)); - customer.addRental(new Rental(旧作_トップガン, 3)); + RentalResult result = sut.rentalMovies(); - int rentalId = customer.rentalMovies(); - - RentalSummary rentalSummary = rentalDataSource.rentalRecordOf(rentalId); assertAll(() -> { - assertEquals(350, rentalSummary.rentalRecord().totalAmount()); - - assertEquals(1, customerDataSource.pointOf(customer.getName())); + assertEquals(350, result.totalAmount()); + assertEquals(1, result.frequentRenterPoints()); }); } @Test void 子供用作品を4日レンタル() { - Customer customer = new Customer("鈴木二郎"); + Customer sut = new Customer("鈴木二郎"); + sut.addRental(new Rental(子供用作品_となりのトトロ, 4)); - customer.addRental(new Rental(子供用作品_となりのトトロ, 4)); + RentalResult result = sut.rentalMovies(); - int rentalId = customer.rentalMovies(); - - RentalSummary rentalSummary = rentalDataSource.rentalRecordOf(rentalId); assertAll(() -> { - assertEquals(300, rentalSummary.rentalRecord().totalAmount()); - - assertEquals(1, customerDataSource.pointOf(customer.getName())); + assertEquals(300, result.totalAmount()); + assertEquals(1, result.frequentRenterPoints()); }); } @Test void 子供用作品を3日レンタル() { - Customer customer = new Customer("広川京子"); - - customer.addRental(new Rental(子供用作品_となりのトトロ, 3)); + Customer sut = new Customer("広川京子"); + sut.addRental(new Rental(子供用作品_となりのトトロ, 3)); - int rentalId = customer.rentalMovies(); + RentalResult result = sut.rentalMovies(); - RentalSummary rentalSummary = rentalDataSource.rentalRecordOf(rentalId); assertAll(() -> { - assertEquals(150, rentalSummary.rentalRecord().totalAmount()); - - assertEquals(1, customerDataSource.pointOf(customer.getName())); + assertEquals(150, result.totalAmount()); + assertEquals(1, result.frequentRenterPoints()); }); } @Test void 新作と旧作ビデオのレンタル() { - Customer customer = new Customer("John Doe"); - - customer.addRental(new Rental(旧作_トップガン, 7)); - customer.addRental(new Rental(新作_君たちはどう生きるか, 7)); + Customer sut = new Customer("John Doe"); + sut.addRental(new Rental(旧作_トップガン, 7)); + sut.addRental(new Rental(新作_君たちはどう生きるか, 7)); - int rentalId = customer.rentalMovies(); + RentalResult result = sut.rentalMovies(); - RentalSummary rentalSummary = rentalDataSource.rentalRecordOf(rentalId); assertAll(() -> { - assertEquals(3050, rentalSummary.rentalRecord().totalAmount()); - assertEquals(2, rentalSummary.rentalItems().size()); - - assertEquals(3, customerDataSource.pointOf(customer.getName())); + assertEquals(3050, result.totalAmount()); + assertEquals(3, result.frequentRenterPoints()); }); } @Test void 旧作と子供用作品のレンタル() { - Customer customer = new Customer("Jane Doe"); - - customer.addRental(new Rental(旧作_トップガン, 7)); - customer.addRental(new Rental(子供用作品_となりのトトロ, 7)); + Customer sut = new Customer("Jane Doe"); + sut.addRental(new Rental(旧作_トップガン, 7)); + sut.addRental(new Rental(子供用作品_となりのトトロ, 7)); - int rentalId = customer.rentalMovies(); + RentalResult result = sut.rentalMovies(); - RentalSummary rentalSummary = rentalDataSource.rentalRecordOf(rentalId); assertAll(() -> { - assertEquals(1700, rentalSummary.rentalRecord().totalAmount()); - assertEquals(2, rentalSummary.rentalItems().size()); - - assertEquals(2, customerDataSource.pointOf(customer.getName())); + assertEquals(1700, result.totalAmount()); + assertEquals(2, result.frequentRenterPoints()); }); } - } \ No newline at end of file