[인프런 워밍업 클럽 - 스터디 0기 BE] 과제 #4

seolbin park·2024년 2월 22일
0

문제 1

컨트롤러

@RestController
public class FruitController {

    private final JdbcTemplate jdbcTemplate;

    public FruitController(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

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

요청 dto

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

import java.time.LocalDate;

public class FruitCreateRequest {

    private String name;
    private LocalDate warehousingDate;
    private Long price;


    public String getName() {
        return name;
    }

    public LocalDate getWarehousingDate() {
        return warehousingDate;
    }

    public Long getPrice() {
        return price;
    }
}

포스트맨 결과

200 OK가 나온 것을 확인 가능하다.



문제 2

컨트롤러

@PutMapping("/api/v1/fruit")
    public void updateFruit(@RequestBody FruitUpdateRequest request) {
        
        //예외처리
        String readSql = "SELECT * FROM fruit WHERE id = ?";
        boolean isUserNotExist = jdbcTemplate.query(readSql, (rs, rowNum) -> 0, request.getId()).isEmpty();
        if (isUserNotExist) {
            throw new IllegalArgumentException();
        }

        String sql = "UPDATE fruit SET is_sold = 1 WHERE id = ?";
        jdbcTemplate.update(sql, request.getId());
    }

요청 dto

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

public class FruitUpdateRequest {

    private long id;

    public long getId() {
        return id;
    }
}

포스트맨 결과

200 OK가 나온 것을 확인 가능하다.



문제 3

컨트롤러

@GetMapping("/api/v1/fruit/stat")
    public FruitStatResponse fruitSoldStatus (@RequestParam String name) {
        String readSql = "SELECT * FROM fruit WHERE name = ?";
        boolean isUserNotExist = jdbcTemplate.query(readSql, (rs, rowNum) -> 0, name).isEmpty();
        if (isUserNotExist) {
            throw new IllegalArgumentException("");
        }

        String salesSql = "SELECT sum(price) FROM fruit WHERE is_sold = 1";
        String notSalesSql = "SELECT sum(price) FROM fruit WHERE is_sold = 0";

        Long salesAmount = jdbcTemplate.queryForObject(salesSql, Long.class);
        Long notSalesAmount = jdbcTemplate.queryForObject(notSalesSql, Long.class);

        return new FruitStatResponse(salesAmount, notSalesAmount);
    }

queryForObject 메소드에 대한 건 처음 알았다...
단건의 조회할 때 쓴다고 한다!!

queryForObject에서 두번째 매개변수는 결과 값을 어떤 클래스 형식으로 가져올지를 나타낸다.
따라서 Long.class를 사용하는 것은 queryForObject 메소드가 결과를 long 객체로 변환하여 반환할 것을 나타낸다!

응답 dto

package com.group.libraryapp.dto.fruit.response;

public class FruitStatResponse {

    private long salesAmount;
    private long notSalesAmount;

    public FruitStatResponse(long salesAmount, long notSalesAmount) {
        this.salesAmount = salesAmount;
        this.notSalesAmount = notSalesAmount;
    }

    public long getSalesAmount() {
        return salesAmount;
    }

    public long getNotSalesAmount() {
        return notSalesAmount;
    }
}

포스트맨 결과



참고

https://inf.run/XKQg
https://ngp9440.tistory.com/54

0개의 댓글