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

seolbin park·2024년 2월 26일
0

문제 1

컨트롤러

@RestController
public class FruitController {

    private final FruitService fruitService;

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

    @PostMapping("/api/v1/fruit")
    public void saveFruit(@RequestBody FruitCreateRequest request) {
        fruitService.saveFruit(request);
    }

    @PutMapping("/api/v1/fruit")
    public void updateFruit(@RequestBody FruitUpdateRequest request) {
        fruitService.updateFruit(request.getId());
    }

    @GetMapping("/api/v1/fruit/stat")
    public FruitStatResponse fruitSoldStatus (@RequestParam String name) {
        return fruitService.getFruitStat(name);
    }
}

서비스

public class FruitService {

    private final FruitRepository fruitRepository;

    public FruitService(JdbcTemplate jdbcTemplate) {
        this.fruitRepository = new FruitRepository(jdbcTemplate);
    }

    public void saveFruit(FruitCreateRequest request) {
        fruitRepository.saveFruit(request.getName(), request.getPrice(), request.getWarehousingDate());
    }

    public void updateFruit(long id) {
        if (fruitRepository.isFruitNotExist(id)) {
            throw new IllegalArgumentException();
        }

        fruitRepository.updateFruit(id);
    }

    public FruitStatResponse getFruitStat (String name) {
        if (fruitRepository.isFruitNameNotExist(name)) {
            throw new IllegalArgumentException();
        }

        return fruitRepository.getFruitStat(name);
    }
}

리포지토리

public class FruitRepository {

    private final JdbcTemplate jdbcTemplate;

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

    public boolean isFruitNotExist(long id) {
        String readSql = "SELECT * FROM fruit WHERE id = ?";
        return jdbcTemplate.query(readSql, (rs, rowNum) -> 0, id).isEmpty();
    }

    public boolean isFruitNameNotExist(String name) {
        String readSql = "SELECT * FROM fruit WHERE name = ?";
        return jdbcTemplate.query(readSql, (rs, rowNum) -> 0, name).isEmpty();
    }

    public void saveFruit(String name, long price, LocalDate stocked_date) {
        String sql = "INSERT INTO fruit (name, price, stocked_date) VALUES (?, ?, ?)";
        jdbcTemplate.update(sql, name, price, stocked_date);
    }

    public void updateFruit(long id) {
        String sql = "UPDATE fruit SET is_sold = 1 WHERE id = ?";
        jdbcTemplate.update(sql, id);
    }

    public FruitStatResponse getFruitStat(String name) {

        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);
    }

}

문제 2

인터페이스

public interface FruitRepository {
    boolean isFruitNotExist(long id);
    boolean isFruitNameNotExist(String name);
    void saveFruit(String name, long price, LocalDate stocked_date);
    void updateFruit(long id);
    FruitStatResponse getFruitStat(String name);
}

리포지토리

@Repository
@Primary
public class FruitMySqlRepository implements FruitRepository {
    private final JdbcTemplate jdbcTemplate;

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

    @Override
    public boolean isFruitNotExist(long id) {
        String readSql = "SELECT * FROM fruit WHERE id = ?";
        return jdbcTemplate.query(readSql, (rs, rowNum) -> 0, id).isEmpty();
    }

    @Override
    public boolean isFruitNameNotExist(String name) {
        String readSql = "SELECT * FROM fruit WHERE name = ?";
        return jdbcTemplate.query(readSql, (rs, rowNum) -> 0, name).isEmpty();
    }

    @Override
    public void saveFruit(String name, long price, LocalDate stocked_date) {
        String sql = "INSERT INTO fruit (name, price, stocked_date) VALUES (?, ?, ?)";
        jdbcTemplate.update(sql, name, price, stocked_date);
    }

    @Override
    public void updateFruit(long id) {
        String sql = "UPDATE fruit SET is_sold = 1 WHERE id = ?";
        jdbcTemplate.update(sql, id);
    }

    @Override
    public FruitStatResponse getFruitStat(String name) {
        String salesSql = "SELECT sum(price) FROM fruit WHERE is_sold = 1 AND name = ?";
        String notSalesSql = "SELECT sum(price) FROM fruit WHERE is_sold = 0 AND name = ?";

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

        return new FruitStatResponse(salesAmount, notSalesAmount);
    }
}


참고

https://inf.run/XKQg

0개의 댓글