inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[인프런워밍업클럽][BE] 과제4 | 과일가게 API 만들기

holiholy88
0

문제 1.

1.1 DB 테이블 생성

image

1.2 StoreController

package com.group.libraryapp.controller.store;

import com.group.libraryapp.dto.store.request.FruitInsertRequest;
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;

@RestController
public class StoreController {

    //0. JdbcTemplate 사용하도록 연결
    private final JdbcTemplate jdbcTemplate;
    public StoreController(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    //1. 과일 정보 저장
    @PostMapping("/api/v1/fruit")
    public void insertFruit(@RequestBody FruitInsertRequest request){
        String sql = "INSERT INTO fruit(name, warehousingDate, price) values(?,?,?)";
        jdbcTemplate.update(sql, request.getName(), request.getWarehousingDate(), request.getPrice());
    }
    
}

 

1.3 FruitInsertRequest

package com.group.libraryapp.dto.store.request;

import java.util.Date;

public class FruitInsertRequest {

    public String name;
    public Date warehousingDate;
    public Long price;

    public String getName() {
        return name;
    }

    public Date getWarehousingDate() {
        return warehousingDate;
    }

    public Long getPrice() {
        return price;
    }
}

 

1.4 시연 결과

image

image

하지만 다음 문제를 풀어야 해서 테이블을 다시 drop & create 후 데이터를 다시 넣어주었다.

image

 

위 API에서 가격에 대하여 int가 아니라 long을 사용한 이유는?

int에 비해 long이 표현할 수 있는 숫자의 양이 더 크다고 알고 있다. 그 외에 더 있을지도 모르지만..시간 상 생략..


 

문제 2.

2.1 fruit 테이블에 컬럼 추가

alter table `fruit` add column `soldout` tinyint(1) default 0;

image

image

2.2 StoreController : sellFruit()

    //2. 팔린 과일 정보 저장
    @PutMapping("/api/v1/fruit")
    public void sellFruit(@RequestParam long id){
        // 해당 id의 상품 존재 여부 파악
        String selectSql = "SELECT * FROM fruit WHERE id = ?";
        boolean fruitNotExist = jdbcTemplate.query(selectSql, (rs, rowNum) -> 0, id).isEmpty();
        if(fruitNotExist){throw new IllegalArgumentException();}

        // 판매여부 데이터 업데이트
        String updateSql = "UPDATE fruit SET soldout = 1 WHERE id = ?";
        jdbcTemplate.update(updateSql, id);
    }

 

2.3 결과

image

image

image

 


문제 3

3.1 price 수정

update fruit set price = 3000 where id = 1;
update fruit set price = 4000 where id = 2;
update fruit set price = 3000 where id = 3;

3.2 StoreController

//3. 판매/미판매 금액 조회
    @GetMapping("/api/v1/fruit/stat")
    public List<FruitStatsResponse> descStoreInfo(){
        String sql = "SELECT f.soldout, sum(f.price) as amt FROM fruit f GROUP BY f.soldout";

        return jdbcTemplate.query(sql, (rs,rowNum) -> {
            int soldout = rs.getInt("soldout");
            long amount = rs.getLong("amt");

            if(soldout==1){}

            return new FruitStatsResponse(soldout,amount);
        });

    }

 

3.3 FruitStatsResponse

public class FruitStatsResponse {

    private int soldout;
    private long amount;

    public FruitStatsResponse(int soldout, long amount) {
        this.soldout = soldout;
        this.amount = amount;
    }

    public int getSoldout() {
        return soldout;
    }

    public long getAmount() {
        return amount;
    }
}

 

3.4 현재 결과

ㅠㅠㅠㅠ 고쳐야 함..

image

 

백엔드 인프런워밍업클럽 인프런워밍업클럽BE 과제4

답변 0