From d473b640abfcc2f5c574cf1adfac5214e07d5965 Mon Sep 17 00:00:00 2001 From: LimDae94 Date: Thu, 22 Feb 2024 13:10:35 +0900 Subject: [PATCH 1/3] =?UTF-8?q?#31=20-=20=EC=A7=80=EB=82=9C=20=EA=B3=BC?= =?UTF-8?q?=EC=A0=9C=20=EC=9E=84=ED=8F=AC=ED=8A=B8=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 지난 과제 임포트 단순 변경 --- .../controller/{task => task02}/Ex01Controller.java | 6 +++--- .../controller/{task => task02}/Ex02Controller.java | 6 +++--- .../controller/{task => task02}/Ex03Controller.java | 6 +++--- .../dto/{task => task02}/request/Ex01Request.java | 2 +- .../dto/{task => task02}/request/Ex02Request.java | 2 +- .../dto/{task => task02}/request/Ex03Request.java | 2 +- .../dto/{task => task02}/response/Ex01Response.java | 4 ++-- .../dto/{task => task02}/response/Ex02Response.java | 4 ++-- .../dto/{task => task02}/response/Ex03Response.java | 2 +- 9 files changed, 17 insertions(+), 17 deletions(-) rename library-app/src/main/java/com/group/libarayapp/controller/{task => task02}/Ex01Controller.java (64%) rename library-app/src/main/java/com/group/libarayapp/controller/{task => task02}/Ex02Controller.java (65%) rename library-app/src/main/java/com/group/libarayapp/controller/{task => task02}/Ex03Controller.java (72%) rename library-app/src/main/java/com/group/libarayapp/dto/{task => task02}/request/Ex01Request.java (85%) rename library-app/src/main/java/com/group/libarayapp/dto/{task => task02}/request/Ex02Request.java (82%) rename library-app/src/main/java/com/group/libarayapp/dto/{task => task02}/request/Ex03Request.java (81%) rename library-app/src/main/java/com/group/libarayapp/dto/{task => task02}/response/Ex01Response.java (83%) rename library-app/src/main/java/com/group/libarayapp/dto/{task => task02}/response/Ex02Response.java (77%) rename library-app/src/main/java/com/group/libarayapp/dto/{task => task02}/response/Ex03Response.java (83%) diff --git a/library-app/src/main/java/com/group/libarayapp/controller/task/Ex01Controller.java b/library-app/src/main/java/com/group/libarayapp/controller/task02/Ex01Controller.java similarity index 64% rename from library-app/src/main/java/com/group/libarayapp/controller/task/Ex01Controller.java rename to library-app/src/main/java/com/group/libarayapp/controller/task02/Ex01Controller.java index c850af4..c45466f 100644 --- a/library-app/src/main/java/com/group/libarayapp/controller/task/Ex01Controller.java +++ b/library-app/src/main/java/com/group/libarayapp/controller/task02/Ex01Controller.java @@ -1,7 +1,7 @@ -package com.group.libarayapp.controller.task; +package com.group.libarayapp.controller.task02; -import com.group.libarayapp.dto.task.request.Ex01Request; -import com.group.libarayapp.dto.task.response.Ex01Response; +import com.group.libarayapp.dto.task02.request.Ex01Request; +import com.group.libarayapp.dto.task02.response.Ex01Response; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/library-app/src/main/java/com/group/libarayapp/controller/task/Ex02Controller.java b/library-app/src/main/java/com/group/libarayapp/controller/task02/Ex02Controller.java similarity index 65% rename from library-app/src/main/java/com/group/libarayapp/controller/task/Ex02Controller.java rename to library-app/src/main/java/com/group/libarayapp/controller/task02/Ex02Controller.java index a6a1b24..453b6d0 100644 --- a/library-app/src/main/java/com/group/libarayapp/controller/task/Ex02Controller.java +++ b/library-app/src/main/java/com/group/libarayapp/controller/task02/Ex02Controller.java @@ -1,7 +1,7 @@ -package com.group.libarayapp.controller.task; +package com.group.libarayapp.controller.task02; -import com.group.libarayapp.dto.task.request.Ex02Request; -import com.group.libarayapp.dto.task.response.Ex02Response; +import com.group.libarayapp.dto.task02.request.Ex02Request; +import com.group.libarayapp.dto.task02.response.Ex02Response; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/library-app/src/main/java/com/group/libarayapp/controller/task/Ex03Controller.java b/library-app/src/main/java/com/group/libarayapp/controller/task02/Ex03Controller.java similarity index 72% rename from library-app/src/main/java/com/group/libarayapp/controller/task/Ex03Controller.java rename to library-app/src/main/java/com/group/libarayapp/controller/task02/Ex03Controller.java index 0559e66..0bc7b46 100644 --- a/library-app/src/main/java/com/group/libarayapp/controller/task/Ex03Controller.java +++ b/library-app/src/main/java/com/group/libarayapp/controller/task02/Ex03Controller.java @@ -1,8 +1,8 @@ -package com.group.libarayapp.controller.task; +package com.group.libarayapp.controller.task02; -import com.group.libarayapp.dto.task.request.Ex03Request; -import com.group.libarayapp.dto.task.response.Ex03Response; +import com.group.libarayapp.dto.task02.request.Ex03Request; +import com.group.libarayapp.dto.task02.response.Ex03Response; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; diff --git a/library-app/src/main/java/com/group/libarayapp/dto/task/request/Ex01Request.java b/library-app/src/main/java/com/group/libarayapp/dto/task02/request/Ex01Request.java similarity index 85% rename from library-app/src/main/java/com/group/libarayapp/dto/task/request/Ex01Request.java rename to library-app/src/main/java/com/group/libarayapp/dto/task02/request/Ex01Request.java index 01c21bb..4e1d2a7 100644 --- a/library-app/src/main/java/com/group/libarayapp/dto/task/request/Ex01Request.java +++ b/library-app/src/main/java/com/group/libarayapp/dto/task02/request/Ex01Request.java @@ -1,4 +1,4 @@ -package com.group.libarayapp.dto.task.request; +package com.group.libarayapp.dto.task02.request; public class Ex01Request { private final int num1; diff --git a/library-app/src/main/java/com/group/libarayapp/dto/task/request/Ex02Request.java b/library-app/src/main/java/com/group/libarayapp/dto/task02/request/Ex02Request.java similarity index 82% rename from library-app/src/main/java/com/group/libarayapp/dto/task/request/Ex02Request.java rename to library-app/src/main/java/com/group/libarayapp/dto/task02/request/Ex02Request.java index a701ae1..cc89baf 100644 --- a/library-app/src/main/java/com/group/libarayapp/dto/task/request/Ex02Request.java +++ b/library-app/src/main/java/com/group/libarayapp/dto/task02/request/Ex02Request.java @@ -1,4 +1,4 @@ -package com.group.libarayapp.dto.task.request; +package com.group.libarayapp.dto.task02.request; import java.time.LocalDate; diff --git a/library-app/src/main/java/com/group/libarayapp/dto/task/request/Ex03Request.java b/library-app/src/main/java/com/group/libarayapp/dto/task02/request/Ex03Request.java similarity index 81% rename from library-app/src/main/java/com/group/libarayapp/dto/task/request/Ex03Request.java rename to library-app/src/main/java/com/group/libarayapp/dto/task02/request/Ex03Request.java index d1fa15a..5f4b6b1 100644 --- a/library-app/src/main/java/com/group/libarayapp/dto/task/request/Ex03Request.java +++ b/library-app/src/main/java/com/group/libarayapp/dto/task02/request/Ex03Request.java @@ -1,4 +1,4 @@ -package com.group.libarayapp.dto.task.request; +package com.group.libarayapp.dto.task02.request; import java.util.ArrayList; import java.util.List; diff --git a/library-app/src/main/java/com/group/libarayapp/dto/task/response/Ex01Response.java b/library-app/src/main/java/com/group/libarayapp/dto/task02/response/Ex01Response.java similarity index 83% rename from library-app/src/main/java/com/group/libarayapp/dto/task/response/Ex01Response.java rename to library-app/src/main/java/com/group/libarayapp/dto/task02/response/Ex01Response.java index 2acd31e..b3518c4 100644 --- a/library-app/src/main/java/com/group/libarayapp/dto/task/response/Ex01Response.java +++ b/library-app/src/main/java/com/group/libarayapp/dto/task02/response/Ex01Response.java @@ -1,6 +1,6 @@ -package com.group.libarayapp.dto.task.response; +package com.group.libarayapp.dto.task02.response; -import com.group.libarayapp.dto.task.request.Ex01Request; +import com.group.libarayapp.dto.task02.request.Ex01Request; public class Ex01Response { diff --git a/library-app/src/main/java/com/group/libarayapp/dto/task/response/Ex02Response.java b/library-app/src/main/java/com/group/libarayapp/dto/task02/response/Ex02Response.java similarity index 77% rename from library-app/src/main/java/com/group/libarayapp/dto/task/response/Ex02Response.java rename to library-app/src/main/java/com/group/libarayapp/dto/task02/response/Ex02Response.java index c97f8c9..bb585b3 100644 --- a/library-app/src/main/java/com/group/libarayapp/dto/task/response/Ex02Response.java +++ b/library-app/src/main/java/com/group/libarayapp/dto/task02/response/Ex02Response.java @@ -1,6 +1,6 @@ -package com.group.libarayapp.dto.task.response; +package com.group.libarayapp.dto.task02.response; -import com.group.libarayapp.dto.task.request.Ex02Request; +import com.group.libarayapp.dto.task02.request.Ex02Request; import java.time.format.TextStyle; import java.util.Locale; diff --git a/library-app/src/main/java/com/group/libarayapp/dto/task/response/Ex03Response.java b/library-app/src/main/java/com/group/libarayapp/dto/task02/response/Ex03Response.java similarity index 83% rename from library-app/src/main/java/com/group/libarayapp/dto/task/response/Ex03Response.java rename to library-app/src/main/java/com/group/libarayapp/dto/task02/response/Ex03Response.java index a928914..ad3ca95 100644 --- a/library-app/src/main/java/com/group/libarayapp/dto/task/response/Ex03Response.java +++ b/library-app/src/main/java/com/group/libarayapp/dto/task02/response/Ex03Response.java @@ -1,4 +1,4 @@ -package com.group.libarayapp.dto.task.response; +package com.group.libarayapp.dto.task02.response; import java.util.List; From 49fbc2cb14fc2e1be5f3bc0cbd608688327169e8 Mon Sep 17 00:00:00 2001 From: LimDae94 Date: Thu, 22 Feb 2024 13:28:34 +0900 Subject: [PATCH 2/3] =?UTF-8?q?#31=20-=20=EB=AA=A8=EB=93=A0=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=20=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `JdbcTemplate` 으로 데이터베이스와 매핑하여 문제들을 해결했다. ### 문제1 POST 방식으로 JSON 데이터인 `이름, 날짜, 가격` 을 MySQL에 저장하기 위해 `update` 쿼리문을 생성한다. 1. 포스트맨으로부터 보낸 JSON 데이터는 `@RequestBody` 에 의해 `이름, 날짜, 가격` 을 가져오고 `Task04ExRequest` dto 에 매핑한다. 2. `jdbcTemplate.update()` 메서드의 매개변수는 `update` 쿼리문 그리고 인 파라미터를 넣어준다. 인 파라미터는 매핑된 dto 클래스로부터 `이름, 날짜, 가격`을 getter 메서드로 불러오면 된다. ### 문제 2 과일이 판매되면 `salesQuantity`속성의 값이 1씩 증가하도록 변경했다. (판매된 갯수만큼 증가시키면 좋겠지만 판매 여부가 관건인 문제이다.) 판매되면 1, 판매가 안된 상황이면 0이다. 따라서`salesQuantity` 속성의 변경은 PUT 방식으로 작성하고 JSON 형식으로 `id` 를 요청하고 JSON 형식으로 `id` 를 응답 받는다 . ### 문제 3 - sum(), group by() 미적용 상태 데이터베이스에 저장된 모든 데이터를 리스트에 저장하고, 쿼리 파라미터와 동일한 과일의 판매 여부를 비교하여 판매된 과일 금액, 팔리지 않은 금액을 JSON 형식으로 응답한다. --- .../controller/task04/Task04ExController.java | 75 +++++++++++++++++++ .../task04/request/Task04CreateRequest.java | 40 ++++++++++ .../dto/task04/request/Task04ExRequest.java | 39 ++++++++++ .../dto/task04/response/Task04ExResponse.java | 19 +++++ 4 files changed, 173 insertions(+) create mode 100644 library-app/src/main/java/com/group/libarayapp/controller/task04/Task04ExController.java create mode 100644 library-app/src/main/java/com/group/libarayapp/dto/task04/request/Task04CreateRequest.java create mode 100644 library-app/src/main/java/com/group/libarayapp/dto/task04/request/Task04ExRequest.java create mode 100644 library-app/src/main/java/com/group/libarayapp/dto/task04/response/Task04ExResponse.java diff --git a/library-app/src/main/java/com/group/libarayapp/controller/task04/Task04ExController.java b/library-app/src/main/java/com/group/libarayapp/controller/task04/Task04ExController.java new file mode 100644 index 0000000..101737c --- /dev/null +++ b/library-app/src/main/java/com/group/libarayapp/controller/task04/Task04ExController.java @@ -0,0 +1,75 @@ +package com.group.libarayapp.controller.task04; + +import com.group.libarayapp.dto.task04.request.Task04CreateRequest; +import com.group.libarayapp.dto.task04.request.Task04ExRequest; +import com.group.libarayapp.dto.task04.response.Task04ExResponse; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; + +@RestController +public class Task04ExController { + + private final JdbcTemplate jdbcTemplate; + + public Task04ExController(JdbcTemplate jdbcTemplate) { + this.jdbcTemplate = jdbcTemplate; + } + + // 문제 1 + @PostMapping("/api/v1/fruit") + public void saveFruit(@RequestBody Task04ExRequest request) { + String sql = "insert into fruit(name, warehousing, price) values(?, ?, ?)"; + jdbcTemplate.update(sql, request.getName(), request.getWarehousingDate(), request.getPrice()); + } + + + // 문제 2 + @PutMapping("/api/v1/fruit") + public void salesQuantityFruit(@RequestBody Task04ExRequest request) { + String readSql = "select * from fruit where id=?"; + boolean isSalesFruit = jdbcTemplate.query(readSql, (rs, rowNum) -> 0, request.getId()).isEmpty(); + if (isSalesFruit) { + throw new IllegalArgumentException(); + } + String sql = "update fruit set salesQuantity=? where id=?"; + jdbcTemplate.update(sql, request.getSalesQuantity() + 1, request.getId()); + } + + private final List Task04CreateRequestList = new ArrayList<>(); + long salesSum = 0; + long notSalesSum = 0; + + // 문제 3 - sum, group by 미적용 + @GetMapping("/api/v1/fruit/stat") + public Task04ExResponse SalesAmountFruit(@RequestParam String name) { + + // 모든 값을 List 에 저장 + String readSql = "select * from fruit"; + jdbcTemplate.query(readSql, (rs, rowNum) -> { + Task04CreateRequest createRequest = new Task04CreateRequest( + rs.getLong("id"), + rs.getString("name"), + rs.getDate("warehousing").toLocalDate(), + rs.getLong("price"), + rs.getInt("salesQuantity")); + Task04CreateRequestList.add(createRequest); + + return createRequest; + }); + + // 판매된 상품과 판매되지 않은 상품의 가격을 반환 + for (Task04CreateRequest task04CreateRequest : Task04CreateRequestList) { + if (task04CreateRequest.getName().equals(name)) { + if (task04CreateRequest.getSalesQuantity() > 0) { + salesSum += task04CreateRequest.getSalesQuantity() * task04CreateRequest.getPrice(); + } else { + notSalesSum += task04CreateRequest.getPrice(); + } + } + } + return new Task04ExResponse(salesSum, notSalesSum); + } +} \ No newline at end of file diff --git a/library-app/src/main/java/com/group/libarayapp/dto/task04/request/Task04CreateRequest.java b/library-app/src/main/java/com/group/libarayapp/dto/task04/request/Task04CreateRequest.java new file mode 100644 index 0000000..218e1b1 --- /dev/null +++ b/library-app/src/main/java/com/group/libarayapp/dto/task04/request/Task04CreateRequest.java @@ -0,0 +1,40 @@ +package com.group.libarayapp.dto.task04.request; + +import java.time.LocalDate; + +public class Task04CreateRequest { + + Long id; + String name; + LocalDate warehousing; + Long price; + int salesQuantity; + + public Task04CreateRequest(Long id, String name, LocalDate warehousing, Long price, int salesQuantity) { + this.id = id; + this.name = name; + this.warehousing = warehousing; + this.price = price; + this.salesQuantity = salesQuantity; + } + + public String getName() { + return name; + } + + public Long getId() { + return id; + } + + public LocalDate getWarehousing() { + return warehousing; + } + + public Long getPrice() { + return price; + } + + public int getSalesQuantity() { + return salesQuantity; + } +} diff --git a/library-app/src/main/java/com/group/libarayapp/dto/task04/request/Task04ExRequest.java b/library-app/src/main/java/com/group/libarayapp/dto/task04/request/Task04ExRequest.java new file mode 100644 index 0000000..d825968 --- /dev/null +++ b/library-app/src/main/java/com/group/libarayapp/dto/task04/request/Task04ExRequest.java @@ -0,0 +1,39 @@ +package com.group.libarayapp.dto.task04.request; + +import java.time.LocalDate; + +public class Task04ExRequest { + + private Long id; + private String name; + private LocalDate warehousingDate; + + private int salesQuantity; + private Long price; + + public Task04ExRequest(String name, LocalDate warehousingDate, Long price) { + this.name = name; + this.warehousingDate = warehousingDate; + this.price = price; + } + + public String getName() { + return name; + } + + public LocalDate getWarehousingDate() { + return warehousingDate; + } + + public Long getPrice() { + return price; + } + + public Long getId() { + return id; + } + + public int getSalesQuantity() { + return salesQuantity; + } +} diff --git a/library-app/src/main/java/com/group/libarayapp/dto/task04/response/Task04ExResponse.java b/library-app/src/main/java/com/group/libarayapp/dto/task04/response/Task04ExResponse.java new file mode 100644 index 0000000..b620942 --- /dev/null +++ b/library-app/src/main/java/com/group/libarayapp/dto/task04/response/Task04ExResponse.java @@ -0,0 +1,19 @@ +package com.group.libarayapp.dto.task04.response; + +public class Task04ExResponse { + private long salesAmount; + private long notSalesAmount; + + public Task04ExResponse(long salesAmount, long notSalesAmount) { + this.salesAmount = salesAmount; + this.notSalesAmount = notSalesAmount; + } + + public long getSalesAmount() { + return salesAmount; + } + + public long getNotSalesAmount() { + return notSalesAmount; + } +} From 1ecb8575b2e7b0960ff3f9615b7c22710f682b9b Mon Sep 17 00:00:00 2001 From: LimDae94 Date: Thu, 22 Feb 2024 13:45:42 +0900 Subject: [PATCH 3/3] =?UTF-8?q?#31=20-=20=EB=AC=B8=EC=A0=9C=203=20sum(),?= =?UTF-8?q?=20group=20by()=20=EB=A1=9C=20=EB=B3=80=EA=B2=BD=ED=95=98?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 주어진 문제 구하는 방식을 쿼리를 중심으로 구하도록 변경했다. `sum(), group by()` 쿼리문을 사용하여 요구사항 이외의 다른 문법을 배제하고 코드가 더욱 간결하고 적절하게 쿼리가 수행됐다. --- .../controller/task04/Task04ExController.java | 49 +++++++------------ .../dto/task04/response/Task04ExResponse.java | 12 +++-- 2 files changed, 25 insertions(+), 36 deletions(-) diff --git a/library-app/src/main/java/com/group/libarayapp/controller/task04/Task04ExController.java b/library-app/src/main/java/com/group/libarayapp/controller/task04/Task04ExController.java index 101737c..73ee84f 100644 --- a/library-app/src/main/java/com/group/libarayapp/controller/task04/Task04ExController.java +++ b/library-app/src/main/java/com/group/libarayapp/controller/task04/Task04ExController.java @@ -38,38 +38,25 @@ public void salesQuantityFruit(@RequestBody Task04ExRequest request) { jdbcTemplate.update(sql, request.getSalesQuantity() + 1, request.getId()); } - private final List Task04CreateRequestList = new ArrayList<>(); - long salesSum = 0; - long notSalesSum = 0; - // 문제 3 - sum, group by 미적용 @GetMapping("/api/v1/fruit/stat") public Task04ExResponse SalesAmountFruit(@RequestParam String name) { - - // 모든 값을 List 에 저장 - String readSql = "select * from fruit"; - jdbcTemplate.query(readSql, (rs, rowNum) -> { - Task04CreateRequest createRequest = new Task04CreateRequest( - rs.getLong("id"), - rs.getString("name"), - rs.getDate("warehousing").toLocalDate(), - rs.getLong("price"), - rs.getInt("salesQuantity")); - Task04CreateRequestList.add(createRequest); - - return createRequest; - }); - - // 판매된 상품과 판매되지 않은 상품의 가격을 반환 - for (Task04CreateRequest task04CreateRequest : Task04CreateRequestList) { - if (task04CreateRequest.getName().equals(name)) { - if (task04CreateRequest.getSalesQuantity() > 0) { - salesSum += task04CreateRequest.getSalesQuantity() * task04CreateRequest.getPrice(); - } else { - notSalesSum += task04CreateRequest.getPrice(); - } - } - } - return new Task04ExResponse(salesSum, notSalesSum); + String readNotSalesSql = """ + select sum(price) as notSalesAmount + from fruit + where name=? and salesQuantity = 0 + group by salesQuantity; + """; + List readNotSalesList = jdbcTemplate.query(readNotSalesSql, (rs, rowNum) -> rs.getInt("notSalesAmount"), name); + + String readSalesSql = """ + select sum(price) as salesAmount + from fruit + where name=? and salesQuantity = 1 + group by salesQuantity; + """; + List readSalesList = jdbcTemplate.query(readSalesSql, (rs, rowNum) -> rs.getInt("salesAmount"), name); + + return new Task04ExResponse(readSalesList, readNotSalesList); } -} \ No newline at end of file +} diff --git a/library-app/src/main/java/com/group/libarayapp/dto/task04/response/Task04ExResponse.java b/library-app/src/main/java/com/group/libarayapp/dto/task04/response/Task04ExResponse.java index b620942..a25cbf7 100644 --- a/library-app/src/main/java/com/group/libarayapp/dto/task04/response/Task04ExResponse.java +++ b/library-app/src/main/java/com/group/libarayapp/dto/task04/response/Task04ExResponse.java @@ -1,12 +1,14 @@ package com.group.libarayapp.dto.task04.response; +import java.util.List; + public class Task04ExResponse { - private long salesAmount; - private long notSalesAmount; + private final long salesAmount; + private final long notSalesAmount; - public Task04ExResponse(long salesAmount, long notSalesAmount) { - this.salesAmount = salesAmount; - this.notSalesAmount = notSalesAmount; + public Task04ExResponse(List readSalesList, List readNotSalesList) { + this.salesAmount = readSalesList.get(0); + this.notSalesAmount = readNotSalesList.get(0); } public long getSalesAmount() {