[WarmingUp 04] API 연습

밍디·2024년 5월 7일

WarmingUp

목록 보기
4/7
post-thumbnail

table

create table fruit
(
    id                      bigint auto_increment,
    name                    varchar(20),
    warehousingDate         date,
    price                   long,
    soleOutYN 				char(1) DEFAULT 'N',
    primary key (id)
);

문제 1

과일 정보를 저장하는 api

controller

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

dto

    private String name;
    private LocalDate warehousingDate;
    private long price;

+) int와 long의 차이

1. 크기
int: 32비트. -2,147,483,648 ~ 2,147,483,647까지
long: 64비트. -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807까지

long은 int보다 더 넓은 범위의 정수 값을 저장할 수 있어서 큰 값이나 더 큰 정밀도가 필요한 경우 long을 사용한다. 예로 시간 또는 날짜를 표현하는 데 int는 충분하지 않을 수 있다.

2. 표현법
int number = 10;
long bigNumber = 10000000000L;
long은 숫자 뒤에 'L' 또는 'l'을 붙인다.

문제 2

팔린 과일 기록

controller

    @PutMapping("/api/v1/fruit")
    public void updateFruit(@RequestBody FruitUpdateRequestDTO 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 soleOutYN = 'Y' WHERE id = ?";
        jdbcTemplate.update(sql, request.getId());
    }

dto

    private long id;

parameter

	"id" : "1"


사과 팔렸어요~


5번 과일은 없어요~

문제 3

팔린 금액, 팔리지 않은 금액

controller

    @GetMapping("/api/v1/fruit/stat")
    public FruitStatResponseDTO salesStat(@RequestParam String name){
        String readSql = "SELECT * FROM fruit WHERE name = ?";
        boolean isFruitNotExist  = jdbcTemplate.query(readSql, (rs, rowNum) -> 0, name).isEmpty();

        if(isFruitNotExist) {
            throw new IllegalArgumentException();
        }

        String salesAmountSql = "SELECT SUM(price) FROM fruit WHERE name = ? AND soleOutYN = 'Y'";
        String notSalesAmountSql = "SELECT SUM(price) FROM fruit WHERE name = ? AND soleOutYN = 'N'";
        long salesAmount = jdbcTemplate.queryForObject(salesAmountSql, long.class, name);
        long notSalesAmount = jdbcTemplate.queryForObject(notSalesAmountSql, long.class, name);

        return new FruitStatResponseDTO(salesAmount, notSalesAmount);
    }

dto

request
    private String name;

response
    private long salesAmount;
    private long notSalesAmount;

과일 목록

결과

0개의 댓글