[인프런 워밍업 클럽 BE 0기] 4일차 과제

[인프런 워밍업 클럽 BE 0기] 4일차 과제

문제1

우리는 작은 과일 과게를 운영하고 있습니다. 과일 가게에 입고된 "과일 정보"를 저장하는 API를 만드는 스펙은 다음과 같습니다.

  • HTTP method: POST

  • HTTP path: /api/v1/fruit

  • HTTP 요청 Body

{
 "name": String,
 "warehousingDate": LocalDate,
 "price": long
}
  • HTTP요청 Body 예시

{
 "name": "사과",
 "warehousingDate": "2024-02-01",
 "price": 5000
}

풀이

Controller 생성

@PostMapping("/api/v1/fruit")
    public void fruitStore(@RequestBody fruitStoreRequest requset) {
        String sql = "INSERT INTO fruit(name, warehousingDate, price) VALUES(?,?,?)";
            jdbcTemplate.update(sql, requset.getName(), requset.getWarehousingDate(), requset.getPrice());
        }

DB 테이블 만들기

create table fruit (
id bigint auto_increment,
name varchar(25),
price int,
sales long, //문제 3에서 사용
warehousingDate date,
primary key(id)
);

DTO 작성

public class fruitStoreRequest {
    private String name;
    private LocalDate warehousingDate;
    private long price;

    public String getName() {
        return name;
    }
    public LocalDate getWarehousingDate() {
        return warehousingDate;
    }
    public long getPrice() {
        return price;
    }
}

image

image


문제2

과일이 팔리게 되면, 우리 시스템에 팔린 과일 정보를 기록해야 합니다. 스펙은 다음과 같습니다.

  • HTTP method: PUT

  • HTTP path: /api/v1/fruit

  • HTTP 요청 Body

{
 "id": long
}
  • HTTP 요청 Body 예시

{
 "id": 3
}

 풀이

 Controller 생성

@PutMapping("/api/v1/fruit")
    public void updatefruitStore(@RequestBody fruitUpdateReqest request) {
        String readSql = "SELECT * FROM fruit WHERE id = ?";

            boolean isFruitNotExist = jdbcTemplate.query(readSql, (rs, rowNum) ->0, request.getId()).isEmpty();
            if(isFruitNotExist) {
                throw new IllegalArgumentException();
            }
            String sql = "UPDATE fruit SET name = ? WHERE id = ?";
            jdbcTemplate.update(sql, request.getId(), request.getName());
        }

 DTO 작성

public class fruitUpdateReqest {     
    private long id;                 
    private String name;             
                                     
    public String getName() {        
        return name;                 
    }                                                                    
    public long getId() {            
        return id;                   
    }                                
}                                    

 image

id에 3넣었을 때 -> id:3이 없어서 에러 뜸

image 


문제3

우리는 특정 과일을 기준으로 팔린 금액, 팔리지 않은 금액을 조회하고 싶습니다.

예를 들어

  1. (1, 사과, 3000원, 판매 O)

  2. (2, 사과, 4000원, 판매 X)

  3. (3, 사과, 3000원, 판매 O)

와 같은 세 데이터가 있다면 우리의 API는 판매된 금액: 6000원, 판매되지 않은 금액 : 4000원 이라고 응답해야 합니다.

  • HTTP method: GET

  • HTTP path:

    /api/v1/fruit/stat

  • HTTP query

    • name: 과일 이름

  • 예시 GET /api/v1/fruit/stat?name=사과

  • HTTP 응답 Body

{
 "salesAmount": long,
 "notSalesAmount": long
}
  • HTTP 응답 Body 예시

{
 "salesAmount": 6000,
 "notSalesAmount": 4000
}

풀이

 Controller 생성

@GetMapping("/api/v1/fruit/stat")
    public sellFruitStore sellFruit(@RequestParam String name) {
            String sales = "select price from fruit where name = ? and sales = 1";
            List<Long> price1 = jdbcTemplate.query(sales, (rs, rowNum) -> rs.getLong("price"), name);

            String notSales = "select price from fruit where name = ? and sales = 0";
            List<Long> price2 = jdbcTemplate.query(notSales, (rs, rowNum) -> rs.getLong("price"), name);

            return new sellFruitStore(price1.stream().mapToLong(i -> i).sum(),
                    price2.stream().mapToLong(i -> i).sum());
        }

 DTO 작성

public class sellFruitStore {
    private long salesAmount;
    private long notSalesAmount;

    public sellFruitStore(long salesAmount, long notSalesAmount) {
        this.salesAmount = salesAmount;
        this.notSalesAmount = notSalesAmount;
    }
    public long getSalesAmount() {
        return salesAmount;
    }
    public long getNotSalesAmount() {
        return notSalesAmount;
    }
}

 imageimage

댓글을 작성해보세요.

채널톡 아이콘