๐ŸŒฑ<์ธํ”„๋Ÿฐ ์›Œ๋ฐ์—… ์Šคํ„ฐ๋”” ํด๋Ÿฝ 0๊ธฐ> BE - 4์ผ์ฐจ ๊ณผ์ œ

Aishaยท2024๋…„ 2์›” 22์ผ
post-thumbnail

์ œ๊ฐ€ ์ˆ˜๊ฐ•ํ•˜๊ณ  ์žˆ๋Š” ์ตœํƒœํ˜„๋‹˜ ๊ฐ•์˜ ์ถœ์ฒ˜์ž…๋‹ˆ๋‹ค!

https://inf.run/XKQg

๋‚œ ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฅด๋Š” ๊ฐ์ž๋‹ค.
์ง„์งœ๋‹ค. ๊น€์˜ํ•œ์Œค ์ž๋ฐ” ์ž…๋ฌธํŽธ ํ•˜๋‚˜๋“ฃ๊ณ  ์ด ์Šคํ„ฐ๋””๋ฅผ ์‹ ์ฒญํ–ˆ๋‹ค.
๊ทธ๋•Œ์˜ ๋‚˜๋กœ ๋Œ์•„๊ฐ„๋‹ค๋ฉด ๋ฉฑ์‚ด์„ ์žก๊ณ ์‹ถ๋‹ค.
์–ด์˜๋ถ€์˜ ์–ด์งธ์ €์งธ ๊น€์˜ํ•œ์Œค ์ž๋ฐ” ๊ธฐ๋ณธํŽธ์ด๋ž‘ ๋ณ‘ํ–‰ํ•˜๋ฉด์„œ ๊ณผ์ œ๋ฅผ ํ’€๊ณ  ์žˆ๋‹ค.
๊นƒํ—ˆ๋ธŒ๋กœ ์˜ฌ๋ฆฌ๊ณ  ์‹ถ์€๋ฐ ๊นƒํ—ˆ๋ธŒ๋ฅผ ์ž˜ ๋ชป์จ์„œ ๊ทธ๋ƒฅ ๋ธ”๋กœ๊ทธ๋กœ ๊ณ„์† ์˜ฌ๋ฆฌ๊ณ  ์žˆ๋‹ค.
์–‘ํ•ด๋ฅผ ๋ถ€ํƒ๋“œ๋ ค์š”..๐Ÿ˜‚


๋ฌธ์ œ1

๊ณผ์ผ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” api๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.
name,warehousingDate,price๋ฅผ body๋กœ ๋˜์ ธ์ฃผ๋ฉด ์ €์žฅํ•˜๋Š” api์ด๋‹ค.

1๋ฒˆ ๋ฌธ์ œ ํ’€์ด
1) 1๋ฒˆ์—์„œ๋Š” PostMapping์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉ.
2) sql์ด๋ผ๋Š” String ๋ณ€์ˆ˜์— db์— ๋ฐ์ดํ„ฐ๋ฅผ insertํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ๋ฌธ์„ ์ž‘์„ฑ.
3) body๋กœ ์š”์ฒญ๋œ ์ €์žฅํ•ด์•ผ ํ•  ๋ฐ์ดํ„ฐ๋Š” SaveFruitRequest๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ๊ฑฐ์ณ ๊ฐ์ฒด๋กœ ๊ฐ์‹ผ ํ›„, getter๋กœ ์ ‘๊ทผํ•ด values ์˜ ์ธ์ž๋กœ ์ „๋‹ฌ.

๋ฌธ์ œ2

ํŒ”๋ฆฐ ๊ณผ์ผ์˜ ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•˜๋Š” api๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.
ํŒ”๋ฆฐ ๊ณผ์ผ์€ body๋ฅผ ํ†ตํ•ด id๊ฐ’์œผ๋กœ ์š”์ฒญ์„ ์ค€๋‹ค.

2๋ฒˆ ๋ฌธ์ œ ํ’€์ด
1) 2๋ฒˆ์—์„œ๋Š” PutMapping ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉ.
2) fruit db ํ…Œ์ด๋ธ”์—๋Š” ํŠน์ • id์˜ ๊ณผ์ผ์ด ํŒ”๋ ธ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” boolean ํƒ€์ž…์˜ "isSell" ์นผ๋Ÿผ์„ ๋งŒ๋“ฌ.
3) ๋ณธ๊ฒฉ์ ์œผ๋กœ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๊ธฐ์— ์•ž์„œ,์—†๋Š” id๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฒ„๊ทธ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด isFruitNotExist๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด body๋กœ ์ „๋‹ฌ๋œ id์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๊ณ , ์—†๋‹ค๋ฉด ์˜ˆ์™ธ์ฒ˜๋ฆฌํ•จ.
3) sql์ด๋ผ๋Š” String ๋ณ€์ˆ˜์— db์— ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ๋ฌธ์„ ์ž‘์„ฑ.
4) body๋กœ ์š”์ฒญ๋œ id๋Š” SaveFruitRequest๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ๊ฑฐ์ณ ๊ฐ์ฒด๋กœ ๊ฐ์‹ผ ํ›„, getter๋กœ ์ ‘๊ทผํ•ด jdbcTemplate.update()๊ตฌ๋ฌธ์˜ ์„ธ๋ฒˆ์งธ ์ธ์ž๋กœ ์ „๋‹ฌ. (*๋‘๋ฒˆ์งธ ์ธ์ž์—๋Š” true๋ฅผ ๋„ฃ๋Š”๋‹ค.)

๋ฌธ์ œ3

ํŠน์ • ๊ณผ์ผ์„ ๊ธฐ์ค€์œผ๋กœ ํŒ”๋ฆฐ๊ธˆ์•ก, ํŒ”๋ฆฌ์ง€ ์•Š์€ ๊ธˆ์•ก์˜ ์ดํ•ฉ์„ ์กฐํšŒํ•˜๋Š” api๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.

3๋ฒˆ ๋ฌธ์ œ ํ’€์ด
1) 3๋ฒˆ์—์„œ๋Š” GetMapping ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉ.
2) ์•ž์„  2๋ฒˆ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, if๋ฌธ์œผ๋กœ name์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ฒ„๊ทธ๋ฅผ ์ฒ˜๋ฆฌํ•จ.
3) isSellsql์ด๋ผ๋Š” String๋ณ€์ˆ˜์— ์š”์ฒญ๋ฐ›๋Š” name๊ณผ ์ผ์น˜ํ•˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ select ๊ตฌ๋ฌธ์„ ์ž‘์„ฑ.
4) fruitList ๋ณ€์ˆ˜์— price, isSell์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ ๊ฐ์ฒด๋ฅผ ์ €์žฅ.
5) salesTotal,notSalesTotal๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ , ์•ž์„  fruitList๋ฅผ for๋ฌธ์œผ๋กœ ๋Œ๋ฉฐ isSell() getter์˜ ๊ฐ’์ด true์ธ์ง€๋ฅผ ํ™•์ธํ•˜๊ณ , true์ด๋ฉด salesTotal์— false๋ผ๋ฉด notSalesTotal์— price๋ฅผ ๋ˆ„์ ํ•ด ์ €์žฅ.
6) ๋งˆ์ง€๋ง‰์œผ๋กœ ์ดํ•ฉ์ด ๊ณ„์‚ฐ๋œ ๋‘ ๋ณ€์ˆ˜๋ฅผ FruitFinalResponseํด๋ž˜์Šค๋ฅผ ๊ฑฐ์ณ ๊ฐ์ฒด๋กœ ๊ฐ์‹ธ ๋ฆฌํ„ด.

โœ… ์ „์ฒด ์ฝ”๋“œ

FruitController.java

package com.group.libraryapp.controller.fourthAssignment;

import com.group.libraryapp.dto.fourth.request.SaveFruitRequest;
import com.group.libraryapp.dto.fourth.response.FruitFinalResponse;
import com.group.libraryapp.dto.fourth.response.FruitResponse;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
public class FruitController {
    private final JdbcTemplate jdbcTemplate;

    public FruitController(JdbcTemplate jdbcTemplate){
        this.jdbcTemplate = jdbcTemplate;
    }
    /////////////// 1๋ฒˆ
    @PostMapping("/api/v1/fruit")
    public void saveFruitInfo(@RequestBody SaveFruitRequest request) {
        String sql = "INSERT INTO fruit(name,warehousingDate,price) VALUES(?,?,?)";
        jdbcTemplate.update(sql,request.getName(),request.getWarehousingDate(),request.getPrice());


    }
    
    
	/////////////// 2๋ฒˆ
    @PutMapping("/api/v1/fruit")
    public void updateFruit(@RequestBody SaveFruitRequest request){
        String readSql ="SELECT * from fruit WHERE id = ?";
        //query() ํ†ตํ•ด ๋‚˜์˜ค๋Š”๊ฒŒ ๋ฆฌ์ŠคํŠธ์ธ๋ฐ, ๋ญ๋ผ๋„ ์žˆ์œผ๋ฉด 0์„ ๋„ฃ์–ด์ค„๊ฑฐ๊ณ  ์กฐํšŒ๊ฐ€ ์•ˆ๋˜๋ฉด ๋น„์–ด์žˆ์„๊ฑฐ์ž„.
        boolean isFruitNotExist = jdbcTemplate.query(readSql, (rs, rowNum) -> 0,request.getId()).isEmpty();

        if(isFruitNotExist){
            throw new IllegalArgumentException();
        }

        String sql = "UPDATE fruit SET isSell = ? WHERE id = ?";
        jdbcTemplate.update(sql,true,request.getId());

    }
	/////////////// 3๋ฒˆ
    @GetMapping("/api/v1/fruit/stat")
    public FruitFinalResponse getFruits(@RequestParam String name) {
        String sql = "SELECT * FROM fruit WHERE name = ?";

        //๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ ๊ฒฐ๊ณผ rs ๋ฅผ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” userResponseํ˜•ํƒœ๋กœ ๋ฐ”๊ฟ”์คŒ.์ด๊ฑฐ๋Š” ๊ฐ์ฒด ์ฐธ์กฐ๊ฐ’์ธ๋ฐ, ์ „์ฒด์—์„œ ๋ฐ˜ํ™˜ํ•˜๋Š”๊ฑด ๊ฒฐ๊ตญ query๋กœ ๊ฐ์‹ธ์„œ ๋‚˜์˜ค๋ฏ€๋กœ ๋ฆฌ์ŠคํŠธ ํƒ€์ž….
        boolean isFruitNotExist = jdbcTemplate.query(sql, (rs, rowNum) -> 0,name).isEmpty();
        if(isFruitNotExist){
            throw new IllegalArgumentException();
        }else{
        String isSellsql = "SELECT * FROM fruit WHERE name = ?";
                List<FruitResponse> fruitList = jdbcTemplate.query(isSellsql,(rs, rowNum) -> {
                long price = rs.getLong("price");
                boolean isSell = rs.getBoolean("isSell");
                return new FruitResponse(price,isSell);
            },name);
                long salesTotal=0;
                long notSalesTotal=0;
                for(int i=0;i<fruitList.size();i++){
                    if(fruitList.get(i).isSell()==true){
                        salesTotal = salesTotal + fruitList.get(i).getSalesAmount();

                    }else{
                        notSalesTotal = notSalesTotal + fruitList.get(i).getSalesAmount();

                    }
                }

            return new FruitFinalResponse(salesTotal,notSalesTotal);
        }


    }


}

SaveFruitRequest.java

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

import java.time.LocalDate;

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

    private int id;

    public SaveFruitRequest(String name, String warehousingDate, long price,int id) {
        this.name = name;
        this.warehousingDate = LocalDate.parse(warehousingDate);
        this.price = price;
        this.id = id;
    }
    public SaveFruitRequest(){

    }

    public String getName() {
        return name;
    }

    public LocalDate getWarehousingDate() {
        return warehousingDate;
    }

    public long getPrice() {
        return price;
    }

    public long getId() {
        return id;
    }
}

FruitResponse.java

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

public class FruitResponse {
    private long salesAmount;
    private boolean isSell;

    public FruitResponse(long salesAmount,boolean isSell) {
        this.salesAmount = salesAmount;
        this.isSell = isSell;
    }

    public long getSalesAmount() {
        return salesAmount;
    }

    public boolean isSell() {
        return isSell;
    }
}

FruitFinalResponse.java

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

import java.util.List;

public class FruitFinalResponse {
  private long salesAmount;
  private long notSalesAmount;

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

  public long getSalesAmount() {
    return salesAmount;
  }

  public long getNotSalesAmount() {
    return notSalesAmount;
  }
}
profile
์ด๊ฒƒ์ €๊ฒƒ๋งŒ๋“ค์–ด๋ณด๊ณ ์‹ถ์–ด์š”!

0๊ฐœ์˜ ๋Œ“๊ธ€