From c239c97c741d16ee3db5a10376cd23dd1896c668 Mon Sep 17 00:00:00 2001 From: stgctkm Date: Mon, 21 Aug 2023 17:26:04 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=E3=83=97=E3=83=AD=E3=82=BB=E3=82=B9?= =?UTF-8?q?=E5=A4=96=E4=BE=9D=E5=AD=98=E3=82=92=E3=83=89=E3=83=A1=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E3=81=8B=E3=82=89=E9=99=A4=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../video/application/CustomerService.java | 28 +++++ src/main/java/video/domain/Customer.java | 27 ++-- src/main/java/video/domain/RentalResult.java | 6 + src/test/java/video/domain/CustomerTest.java | 117 +++++++----------- 4 files changed, 83 insertions(+), 95 deletions(-) create mode 100644 src/main/java/video/application/CustomerService.java create mode 100644 src/main/java/video/domain/RentalResult.java 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 c9ea46c..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,11 +19,15 @@ 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) { - double thisAmount = 0; + int thisAmount = 0; // 一行ごとに金額を計算 switch (each.getMovie().getPriceType()) { case REGULAR: @@ -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..cd02b5b 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(12, 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(3, 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(2, 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(3.5, 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(3, 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(1.5, 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(30.5, 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(17.0, result.totalAmount()); + assertEquals(2, result.frequentRenterPoints()); }); } - } \ No newline at end of file From a3b9e4511e4403916668cd53702660ae37ca2ce2 Mon Sep 17 00:00:00 2001 From: stgctkm Date: Mon, 21 Aug 2023 17:43:49 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/video/domain/CustomerTest.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/test/java/video/domain/CustomerTest.java b/src/test/java/video/domain/CustomerTest.java index cd02b5b..5bad885 100644 --- a/src/test/java/video/domain/CustomerTest.java +++ b/src/test/java/video/domain/CustomerTest.java @@ -18,7 +18,7 @@ class CustomerTest { RentalResult result = sut.rentalMovies(); assertAll(() -> { - assertEquals(12, result.totalAmount()); + assertEquals(1200, result.totalAmount()); assertEquals(2, result.frequentRenterPoints()); }); } @@ -31,7 +31,7 @@ class CustomerTest { RentalResult result = sut.rentalMovies(); assertAll(() -> { - assertEquals(3, result.totalAmount()); + assertEquals(300, result.totalAmount()); assertEquals(1, result.frequentRenterPoints()); }); } @@ -44,7 +44,7 @@ class CustomerTest { RentalResult result = sut.rentalMovies(); assertAll(() -> { - assertEquals(2, result.totalAmount()); + assertEquals(200, result.totalAmount()); assertEquals(1, result.frequentRenterPoints()); }); } @@ -57,7 +57,7 @@ class CustomerTest { RentalResult result = sut.rentalMovies(); assertAll(() -> { - assertEquals(3.5, result.totalAmount()); + assertEquals(350, result.totalAmount()); assertEquals(1, result.frequentRenterPoints()); }); } @@ -70,7 +70,7 @@ class CustomerTest { RentalResult result = sut.rentalMovies(); assertAll(() -> { - assertEquals(3, result.totalAmount()); + assertEquals(300, result.totalAmount()); assertEquals(1, result.frequentRenterPoints()); }); } @@ -83,7 +83,7 @@ class CustomerTest { RentalResult result = sut.rentalMovies(); assertAll(() -> { - assertEquals(1.5, result.totalAmount()); + assertEquals(150, result.totalAmount()); assertEquals(1, result.frequentRenterPoints()); }); } @@ -97,7 +97,7 @@ class CustomerTest { RentalResult result = sut.rentalMovies(); assertAll(() -> { - assertEquals(30.5, result.totalAmount()); + assertEquals(3050, result.totalAmount()); assertEquals(3, result.frequentRenterPoints()); }); } @@ -111,7 +111,7 @@ class CustomerTest { RentalResult result = sut.rentalMovies(); assertAll(() -> { - assertEquals(17.0, result.totalAmount()); + assertEquals(1700, result.totalAmount()); assertEquals(2, result.frequentRenterPoints()); }); }