인프런 지식공유자 최태현 님의 자바 스프링부트 서버개발 올인원 강의 커리큘럼에 포함된 과제입니다.
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인
최태현 | Java와 Spring Boot, JPA, MySQL, AWS를 이용해 서버를 개발하고 배포합니다. 웹 애플리케이션을 개발하며 서버 개발에 필요한 배경지식과 이론, 다양한 기술들을 모두 학습할 뿐 아니라, 다양한
www.inflearn.com

문제 1
DB
create table fruit(
id bigint auto_increment,
name varchar(20),
warehousingDate date,
price bigint,
is_sold boolean default false,
primary key (id)
);
Controller
@RestController
@RequestMapping("/api/v1/fruit")
public class FruitController {
private final JdbcTemplate jdbcTemplate;
public FruitController(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@PostMapping("")
public void saveFruit(@RequestBody FruitCreateRequest request) {
String sql = "insert into fruit(name, warehousingDate,price)values(?,?,?)";
jdbcTemplate.update(sql,request.getName(),request.getWarehousingDate(),request.getPrice());
}
}
DTO
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;
}
}


문제 2
@PutMapping("")
public void updateFruit(@RequestBody FruitUpdateRequest request){
String sql = "SELECT * FROM fruit WHERE id = ?";
boolean isFruitNotExist
= jdbcTemplate.query(sql, (rs, rowNum) -> 0, request.getId()).isEmpty();
if(isFruitNotExist){
throw new IllegalArgumentException();
}
String updateSql = "UPDATE fruit SET is_sold = ? WHERE id = ?";
jdbcTemplate.update(updateSql, true, request.getId());
}
package com.group.libraryapp.dto.fruit.request;
public class FruitUpdateRequest {
long id;
public long getId() {
return id;
}
}



문제 3
Controller
@GetMapping("/stat")
public FruitPriceResponse getFruitSellPrice(@RequestParam String name) {
String sql = "SELECT "
+ "SUM(CASE WHEN is_sold = true THEN price ELSE 0 END) AS salesAmount, \n"
+ "SUM(CASE WHEN is_sold = false THEN price ELSE 0 END) AS notSalesAmount \n"
+ "FROM fruit \n"
+ "WHERE name = ?";
return jdbcTemplate.queryForObject(sql, (rs, rowNum) -> {
long salesAmount = rs.getLong("salesAmount");
long notSalesAmount = rs.getLong("notSalesAmount");
return new FruitPriceResponse(salesAmount, notSalesAmount);
}, name);
}
DTO
public class FruitPriceResponse {
private final long salesAmount;
private final long notSalesAmount;
public FruitPriceResponse(long salesAmount, long notSalesAmount) {
this.salesAmount = salesAmount;
this.notSalesAmount = notSalesAmount;
}
public long getSalesAmount() {
return salesAmount;
}
public long getNotSalesAmount() {
return notSalesAmount;
}
}

'인프런 워밍업 클럽 1기 - 백엔드' 카테고리의 다른 글
| 6일차 과제 - Controller - Service - Repository 계층 분리 (0) | 2024.05.13 |
|---|---|
| 5일차 과제 - 클린코드 (0) | 2024.05.09 |
| 3일차 과제 - 람다식에 대해 (0) | 2024.05.03 |
| 2일차 과제 - api 만들기 (0) | 2024.05.01 |
| 1일차 과제 - 어노테이션(서버 개발을 위한 환경설정 및 네트워크 기초) (0) | 2024.04.29 |