[인프런 워밍업 클럽_0기] BE 네 번째 과제 (진도표 4일차)

2024. 2. 22. 01:34·공부/인프런 워밍업 클럽_BE
반응형

배너를 클릭하면 해당 사이트로 이동

 

강의 출처

 

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인

Java와 Spring Boot, JPA, MySQL, AWS를 이용해 서버를 개발하고 배포합니다. 웹 애플리케이션을 개발하며 서버 개발에 필요한 배경지식과 이론, 다양한 기술들을 모두 학습할 뿐 아니라, 다양한 옵션들

www.inflearn.com

 

 

진도표 4일차와 연결됩니다
우리는 GET API와 POST API를 만드는 방법을 배웠습니다. 👍 추가적인 API 들을 만들어 보며 API 개발에 익숙해져 봅시다!

4일차 문제 1, 문제 2, 문제 3은 이어지는 문제입니다!

 

문제 풀기 전 테이블 생성

컬럼 정하기

문제1에서 필요한 컬럼 → NAME(String), WAREHOUSINGDATE(LocalDate), PRICE(long)

문제2에서 필요한 컬럼 → SALES_STATUS(int default 0, 판매 시 1로 변경)

문제3에서 필요한 컬럼 → X

 

테이블 생성하기

create table fruit (
    id bigint auto_increment,
    name varchar(25),
    warehousingDate date,
    price long,
    salesYN int default 0,
    primary key (id)
);

 

 

문제 1

 

  • dto - FruitSaveRequest
package com.group.libraryapp.homework.dto.request;

import java.time.LocalDate;

public class FruitSaveRequest {
    private String name;
    private LocalDate warehousingDate;
    private long price;

    public FruitSaveRequest(String name, LocalDate warehousingDate, long price) {
        this.name = name;
        this.warehousingDate = warehousingDate;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public LocalDate getWarehousingDate() {
        return warehousingDate;
    }

    public long getPrice() {
        return price;
    }
}

 

  • dto - FruitController
@RequestMapping("/api/v1")
@RestController
public class FruitController {

    private JdbcTemplate jdbcTemplate;

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

    @PostMapping("/fruit")
    public void save(@RequestBody FruitSaveRequest request) {
        String sql = "insert into fruit (name, warehousingDate, price) values (?, ?, ?)";
        jdbcTemplate.update(sql, request.getName(), request.getWarehousingDate(), request.getPrice());
    }
}

 

반응형

 

  • 포스트맨 테스트

 

  • DB 확인

 

 

문제 2

 

  • dto - FruitUpdateRequest
public class FruitUpdateRequest {

    private long id;

    public FruitUpdateRequest() {
    }

    public FruitUpdateRequest(long id) {
        this.id = id;
    }

    public long getId() {
        return id;
    }
}

 

  • FruitController
@PutMapping("/fruit")
public void update(@RequestBody FruitUpdateRequest request) {
    String sql =  "update fruit set salesYN = 1 where id = ?";
    jdbcTemplate.update(sql, request.getId());
}

 

  • 포스트맨

 

  • DB 확인

 

반응형

 

문제 3

 

DB 데이터 수정 및 추가

update fruit set price = 3000 where id = 1; // 첫 번째 데이터 가격 수정
insert into fruit (name, warehousingDate, price) values ('사과', '2024-02-22', 4000);
insert into fruit (name, warehousingDate, price, salesYN) values ('사과', '2024-02-21', 3000, 1);

 

  • dto - FruitStatResponse
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;
    }
}

 

  • domain - Fruit
public class Fruit {

    private long id;
    private String name;
    private long price;
    private int salesYN;

    public Fruit(long id, String name, long price, int salesYN) {
        this.id = id;
        this.name = name;
        this.price = price;
        this.salesYN = salesYN;
    }

    public long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public long getPrice() {
        return price;
    }

    public int getSalesYN() {
        return salesYN;
    }
}

 

반응형

 

  • FruitController
@GetMapping("/fruit/stat")
public FruitStatResponse fruitStat (@RequestParam String name) {
    String salesSql = "select * from fruit where salesYN = 1 and name = ?";
    String notSalesSql = "select * from fruit where salesYN = 0 and name = ?";

	List<Fruit> salesList = getList(salesSql, name);
    List<Fruit> notSalesList = getList(notSalesSql, name);

    long salesAmount = 0;
    long notSalesAmount = 0;

    for (Fruit fruit : salesList) {
        salesAmount += fruit.getPrice();
    }

    for (Fruit fruit : notSalesList) {
        notSalesAmount += fruit.getPrice();
    }

    return new FruitStatResponse(salesAmount, notSalesAmount);
}

private List<Fruit>  getList(String sql, String fruitNm) {
    return jdbcTemplate.query(sql, (rs, rowNum) -> {
        long id = rs.getLong("id");
        String name = rs.getString("name");
        long price = rs.getLong("price");
        int salesYN = rs.getInt("salesYN");
        return new Fruit(id, name, price, salesYN);
    }, fruitNm);
}

 

  • 포스트맨 테스트

 

한 걸음 더!

데이터 추가

insert into fruit (name, warehousingDate, price) value ('바나나', '2023-02-12', 30000);

 

반응형

 

  • FruitController 수정
@GetMapping("/fruit/stat")
public FruitStatResponse fruitStat (@RequestParam String name) {

    String salesSql = "select sum(price) as sum from fruit where salesYN = 1 group by name having name = ?";
    String notSalesSql = "select sum(price) as sum from fruit where salesYN = 0 group by name having name = ?";

    long salesAmount = getSum(salesSql, name);
    long notSalesAmount = getSum(notSalesSql, name);

    return new FruitStatResponse(salesAmount, notSalesAmount);
}


private long getSum(String sql, String fruitNm) {
    return jdbcTemplate.queryForObject(sql, Long.class, fruitNm);
}

 

반응형
저작자표시 비영리 변경금지 (새창열림)
'공부/인프런 워밍업 클럽_BE' 카테고리의 다른 글
  • [인프런 워밍업 클럽_0기] BE 여섯 번째 과제 (진도표 6일차)
  • [인프런 워밍업 클럽_0기] BE 다섯 번째 과제 (진도표 5일차)
  • [인프런 워밍업 클럽_0기] BE 세 번째 과제 (진도표 3일차)
  • [인프런 워밍업 클럽_0기] BE 두 번째 과제 (진도표 2일차)
데부한
데부한
어차피 할 거면 긍정적으로 하고 싶은 개발자
    반응형
  • 데부한
    동동이개발바닥
    데부한
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • 방통대 컴퓨터과학과 (27)
        • 잡담 (9)
        • 3학년1학기 (17)
      • 프로젝트 및 컨퍼런스 회고 (1)
        • 프로젝트 (4)
        • 한이음 프로젝트 (0)
        • 회고 (3)
      • 공부 (165)
        • Spring (37)
        • JPA (71)
        • 인프런 워밍업 클럽_BE (10)
        • Java (6)
        • React.js (27)
        • 넥사크로 (11)
        • 기타 (3)
      • 알고리즘 (85)
        • 알고리즘 유형 (10)
        • 알고리즘 풀이 (57)
        • SQL 풀이 (18)
      • 에러 해결 (13)
      • 잡담 (7)
        • 국비교육 (2)
        • 구매후기 (5)
        • 진짜 잡담 (0)
  • 블로그 메뉴

    • Github
    • Linkedin
    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    넥사크로
    알고리즘
    인프런
    IT
    QueryDSL
    기출문제
    코딩테스트
    oracle
    react
    토비의스프링부트
    개발자
    프론트엔드
    에러해결
    Java
    Spring
    방통대
    운영체제
    백준
    토이프로젝트
    egov
    springboot
    JPA
    SpringBoot를 이용한 RESTful Web Service 개발
    RESTful
    MSA
    SQL
    자바스크립트
    스프링부트
    프로그래머스
    전자정부프레임워크
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
데부한
[인프런 워밍업 클럽_0기] BE 네 번째 과제 (진도표 4일차)
상단으로

티스토리툴바