Search

4일차) 추가적인 API 개발

주제

GET API와 POST API를 만드는 방법을 배웠다! 추가적인 API 들을 만들어 보며 API 개발에 익숙해져 보자.

 주요 내용

키워드

GET API
POST API
함수형 프로그래밍

과일 가게에 입고된 과일 정보 저장 API

요구조건

DB
create table fruit ( id bigint auto_increment, name varchar(20), warehousingDate date, price int, status ENUM('SOLD' , 'NOT_SOLD') DEFAULT 'NOT_SOLD', primary key (id) );
SQL
복사
DTO
@Data public class FruitRequest { private long id; private String name; private LocalDate warehousingDate; private long price; }
Java
복사
Controller
@RequiredArgsConstructor @RestController public class FruitController { private final JdbcTemplate jdbcTemplate; @PostMapping("/api/v1/fruit") public void saveFruit(@RequestBody FruitRequest request) { String sql = "INSERT INTO fruit (name, warehousingDate, price) VALUES (?, ?, ?)"; jdbcTemplate.update(sql, request.getName(), request.getWarehousingDate(), request.getPrice()); } }
Java
복사
아이고 예시 그대로 넣었더니 2월1로 들어감 ㅎ

판매된 과일 정보 기록 API

요구조건

@PutMapping("/api/v1/fruit") public void updateFruit(@RequestBody FruitRequest request) { //먼저 과일이 있는지 체크 String readSql = "SELECT * FROM fruit WHERE id = ?"; boolean isFruitNotExit = jdbcTemplate.query(readSql, (rs, rowNum) -> 0, request.getId()).isEmpty(); //존재 하지않는다면 예외처리 if (isFruitNotExit) { throw new IllegalStateException(); } //있으면 업데이트 String sql = "UPDATE fruit SET status = 'SOLD' WHERE id = ?"; jdbcTemplate.update(sql, request.getId()); }
Java
복사
없는 id 찾을때
java.lang.IllegalStateException: null
Java
복사
오류 잘 떨궈주고 있다
이제 있는 과일로 진행해보면

특정 과일 기준으로 팔린 금액, 팔리지 않은 금액 조회

요구조건

FruitResponse
@Getter @AllArgsConstructor public class FruitResponse { private long salesAmount; // 판매된 과일의 총 가격 private long notSalesAmount; // 판매되지 않은 과일의 총 가격 }
Java
복사
@GetMapping("/api/v1/fruit/status") public FruitResponse getFruitStatus(@RequestParam String name) { // 과일 이름을 기준으로 데이터베이스에서 과일 정보를 조회 String readFruitInfo = "SELECT * FROM fruit WHERE name = ?"; // 해당 과일이 존재하지 않는 경우 예외 처리 boolean isFruitNotExist = jdbcTemplate.query(readFruitInfo, (rs, rowNum) -> 0, name).isEmpty(); if (isFruitNotExist) { throw new IllegalStateException(); } // 과일이 판매된 총액을 조회 String soldSql = "SELECT COALESCE(SUM(price), 0) FROM fruit WHERE name = ? AND status = 'SOLD'"; // 과일이 판매되지 않은 총액을 조회 String notSoldSql = "SELECT COALESCE(SUM(price), 0) FROM fruit WHERE name = ? AND status = 'NOT_SOLD'"; // 조회 결과를 각 변수에 저장 long salesAmount = jdbcTemplate.queryForObject(soldSql, Long.class, name); long notSalesAmount = jdbcTemplate.queryForObject(notSoldSql, Long.class, name); // 조회된 금액 정보를 반환 return new FruitResponse(salesAmount, notSalesAmount); }
Java
복사
안팔린 사과 6000원 데이터를 넣고

참고

챗GPT