과제4일차
HTTP는 클라이언트와 서버가 인터넷 환경에서 통신하기 위한 규칙을 정의한것.
거기서 양측에서 데이터를 전송 및 조회하기 위해 약속을 정한 것을 API라고 한다.
- 과일 정보를 저장한다.
요청, 스타드 라인 METHOD, PATH , VERSION , QUERY
PATH /api/v1/fruit
요청에서 데이터를 서버에 전달하는 방법은 쿼리랑 바디
{
"name":String,
"warehousingDate": LocalDate,
"price": long
}
예시 요청 바디
{
"name": "사과",
"warehousingDate": "2024-02-01",
"price": 5000
}
Code
package study_db2.week_1.itemservice_db.web;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDate;
@RestController
@RequiredArgsConstructor
public class FruitController {
private final JdbcTemplate jdbcTemplate;
@PostMapping("/api/v1/fruit")
public ResponseEntity<Object> saveFruit(@RequestBody CreateFruitRequest request) {
String sql = "INSERT INTO fruit (name,warehousing_date,price) VALUES (?,?,?)";
jdbcTemplate.update(sql, request.getName(), request.getWarehousingDate(), request.getPrice());
return ResponseEntity.ok().build();
}
public static class CreateFruitRequest {
private String name;
private LocalDate warehousingDate;
private long price;
public CreateFruitRequest() {
}
public String getName() {
return name;
}
public LocalDate getWarehousingDate() {
return warehousingDate;
}
public long getPrice() {
return price;
}
}
}
추가 질문
위 API에서 int 대신에 long을 사용한 이유
- int는 21억까지 표현할 수 있는 반면에 long은 그 이상의 금액을 표현할 수 있습니다.
- 과일이라고 해도 21억까지 표현할 수 있는 것보다 그 이상의 금액을 표현할 수 있는 long을 사용한거라 생각이 됩니다.
문제 2번
@PutMapping("/api/v1/fruit")
public FruitSellResponse sellFruit(@RequestBody SellFruitRequest request) {
String sql = "UPDATE fruit SET sell_status = 'SELLING' WHERE id = ?";
jdbcTemplate.update(sql, request.getId());
return new FruitSellResponse(request.getId());
}
public static class FruitSellResponse {
private long id;
public FruitSellResponse(final long id) {
this.id = id;
}
public long getId() {
return id;
}
}
public static class SellFruitRequest {
private long id;
public long getId() {
return id;
}
}
문제 3
@GetMapping("/api/v1/fruit/stat")
public FruitSalesResponse getSalesInfo(@RequestParam("name") String fruitName) {
String sql = "SELECT * FROM fruit WHERE name = ?";
List<Fruit> result = jdbcTemplate.query(sql, new Object[]{fruitName}, (RowMapper<Fruit>) (rs, rowNum) -> {
return new Fruit(rs.getString("name"), rs.getLong("price"), rs.getString("sell_status"));
});
long sellingPrice = 0L;
long havingPrice = 0L;
for (final Fruit fruit : result) {
if (fruit.getStatus().equals("HAVING")) {
havingPrice+= fruit.getPrice();
} else if (fruit.getStatus().equals("SELLING")) {
sellingPrice+= fruit.getPrice();
}
}
return new FruitSalesResponse(sellingPrice, havingPrice);
}
public static class Fruit {
private String name;
private long price;
private String status;
public Fruit(final String name, final long price, final String status) {
this.name = name;
this.price = price;
this.status = status;
}
public String getName() {
return name;
}
public long getPrice() {
return price;
}
public String getStatus() {
return status;
}
}
public static class FruitSalesResponse {
private long salesAmount;
private long notSalesAmount;
public FruitSalesResponse(final long salesAmount, final long notSalesAmount) {
this.salesAmount = salesAmount;
this.notSalesAmount = notSalesAmount;
}
public long getSalesAmount() {
return salesAmount;
}
public long getNotSalesAmount() {
return notSalesAmount;
}
}
추가 질문
@GetMapping("/api/v1/fruit/stat2")
public FruitSalesResponse getSalesInfo2(@RequestParam("name") String fruitName) {
String sql = "SELECT\n" +
" SUM( IF(sell_status = 'SELLING',price,0)) AS salesAmount,\n" +
" SUM( IF(sell_status = 'HAVING',price,0)) AS notSalesAmount\n" +
"FROM fruit\n" +
"WHERE name = ?\n" +
"GROUP BY name;";
List<FruitSalesResponse> result = jdbcTemplate.query(sql, new Object[]{fruitName}, (RowMapper<FruitSalesResponse>) (rs, rowNum) -> {
return new FruitSalesResponse(rs.getLong("salesAmount"), rs.getLong("notSalesAmount"));
});
return result.get(0);
}
'스터디공부 > 인프런 워밍업' 카테고리의 다른 글
인프런 워밍업 0기 여섯 번째 과제! (진도표 6일차) (0) | 2024.02.26 |
---|---|
인프런 워밍업 5일차 과제 (0) | 2024.02.23 |
인프런 워밍업 3일차 과제 (0) | 2024.02.21 |
인프렁 워밍업 2일차 (0) | 2024.02.20 |
1일차 과제 (0) | 2024.02.19 |