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

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

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

https://inf.run/XKQg

์˜ค๋Š˜ ๊ณผ์ œ ์†Œ๊ฐ

์ด๊ฒŒ ์™œ ๋Œ์•„๊ฐ€..? ๋ฅผ ์ ˆ์‹คํžˆ ๊ฒฝํ—˜์ค‘์ธ ์˜ค๋Š˜์ด๋‹ค. ์†”์งํžˆ ๊ทธ๋ƒฅ ๋ญ๊ฐ€ ๋ญ”์ง€ ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฅด๊ณ  ์žˆ์–ด์„œ.. ๊ทธ๋ƒฅ ํ•œ๋ฒˆ ํ•ด๋ณด์ž๋Š” ๋งˆ์Œ์œผ๋กœ ๊ฐ•์˜๊ฐ€ ๋šซ๋ฆด๋“ฏ์ด ๋‹ค์‹œ๋ณด๊ณ  ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฅด์ง€๋งŒ ๋น„์Šทํ•˜๊ฒŒ ๋”ฐ๋ผํ•ด๋ดค๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋Š”๊ฒŒ ๋งž๋Š”๊ฑด์ง€.. ์ฒ˜์Œ์— ์‹œ๋„ํ–ˆ์„๋• ์ œ๋Œ€๋กœ ์ „ํ™˜์ด ์•ˆ๋ผ์„œ ๊ทธ๋ƒฅ ํฌ๊ธฐํ–ˆ์—ˆ๋Š”๋ฐ, ๊ณผ์ œ๋งˆ๊ฐ ํ•œ ์‹œ๊ฐ„ ์ „์— ์กฐ๊ธˆ๋งŒ ๋” ํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋Š” ์ƒ๊ฐ์ด ์ƒ๊ฒผ๋‹ค.
์•Œ๊ณ ๋ณด๋‹ˆ ์‹คํ–‰์ด ์•ˆ๋˜์—ˆ๋˜๊ฒŒ, FruitMemoryRepository๋ž‘ FruitMysqlRepository์— "implements FruitRepository" ์ด๊ฑธ ๋นผ๋จน์–ด์„œ ๊ทธ๋žฌ๋”๋ผ.. ๋” ์‹œ๋„ํ•ด๋ณด๊ธธ ์ž˜ํ•œ๊ฑฐ ๊ฐ™๋‹คใ…œใ…œใ…œใ…œใ…œ
-> ๋‚ด๊ฐ€ ๋ชจ๋ฅด๋Š”๊ฑฐ ์ธํ„ฐํŽ˜์ด์Šค,์˜ค๋ฒ„๋ผ์ด๋“œ,์˜์กด์„ฑ..

๋ฌธ์ œ1

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.service.fruit.FruitService;
import org.springframework.web.bind.annotation.*;

@RestController
public class FruitController {

    //์ถ”๊ฐ€
    private final FruitService fruitService ;

    //์ถ”๊ฐ€
    public FruitController(FruitService fruitService){


        this.fruitService = fruitService;
    }




    @PostMapping("/api/v1/fruit")
    public void saveFruitInfo(@RequestBody SaveFruitRequest request) {
       fruitService.saveFruitInfo(request);


    }

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

    @GetMapping("/api/v1/fruit/stat")
    public FruitFinalResponse getFruits(@RequestParam String name) {
        return fruitService.getFruit(name);

    }


}

FruitService.java

package com.group.libraryapp.service.fruit;

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 com.group.libraryapp.repository.fruit.FruitMysqlRepository;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class FruitService {

    private final FruitMysqlRepository fruitRepository;

    public FruitService(FruitMysqlRepository fruitRepository){
        this.fruitRepository = fruitRepository;

    }

    public void saveFruitInfo( SaveFruitRequest request){
        fruitRepository.saveFruit(request.getName(),request.getWarehousingDate(),request.getPrice());

    }

    public void updateFruit(SaveFruitRequest request){


        //query() ํ†ตํ•ด ๋‚˜์˜ค๋Š”๊ฒŒ ๋ฆฌ์ŠคํŠธ์ธ๋ฐ, ๋ญ๋ผ๋„ ์žˆ์œผ๋ฉด 0์„ ๋„ฃ์–ด์ค„๊ฑฐ๊ณ  ์กฐํšŒ๊ฐ€ ์•ˆ๋˜๋ฉด ๋น„์–ด์žˆ์„๊ฑฐ์ž„.
        boolean isFruitIdNotExist = fruitRepository.isFruitIdNotExist(request.getId());

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

        fruitRepository.updateFruitSellStatus(request.getId());



    }

    public FruitFinalResponse getFruit(String name){

        //๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ ๊ฒฐ๊ณผ rs ๋ฅผ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” userResponseํ˜•ํƒœ๋กœ ๋ฐ”๊ฟ”์คŒ.์ด๊ฑฐ๋Š” ๊ฐ์ฒด ์ฐธ์กฐ๊ฐ’์ธ๋ฐ, ์ „์ฒด์—์„œ ๋ฐ˜ํ™˜ํ•˜๋Š”๊ฑด ๊ฒฐ๊ตญ query๋กœ ๊ฐ์‹ธ์„œ ๋‚˜์˜ค๋ฏ€๋กœ ๋ฆฌ์ŠคํŠธ ํƒ€์ž….
        boolean isFruitNameNotExist = fruitRepository.isFruitNameNotExist(name);

        if(isFruitNameNotExist){
            throw new IllegalArgumentException();
        }else{

            List<FruitResponse> fruitList = fruitRepository.getFruit(name);
            long salesTotal=0;
            long notSalesTotal=0;
            for(int i=0;i<fruitList.size();i++){
                if(fruitList.get(i).isSell()){
                    salesTotal = salesTotal + fruitList.get(i).getSalesAmount();

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

                }
            }

            return new FruitFinalResponse(salesTotal,notSalesTotal);
        }

    }
}

FruitMysqlRepository.java

package com.group.libraryapp.repository.fruit;

import com.group.libraryapp.dto.fourth.response.FruitResponse;
import com.group.libraryapp.service.fruit.FruitService;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import java.time.LocalDate;
import java.util.List;

@Repository
public class FruitMysqlRepository{

    private final JdbcTemplate jdbcTemplate;
    public FruitMysqlRepository(JdbcTemplate jdbcTemplate){

        this.jdbcTemplate = jdbcTemplate;
    }

    public void saveFruit( String fruitName, LocalDate warehousingDate, long price){

        String sql = "INSERT INTO fruit(name,warehousingDate,price) VALUES(?,?,?)";
        jdbcTemplate.update(sql,fruitName,warehousingDate,price);
    }

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

    public void updateFruitSellStatus(long id){

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


    }

    public boolean isFruitNameNotExist(String name){
        String sql = "SELECT * FROM fruit WHERE name = ?";

        return jdbcTemplate.query(sql, (rs, rowNum) -> 0,name).isEmpty();

    }

    public List<FruitResponse> getFruit(String name){
        String isSellsql = "SELECT * FROM fruit WHERE name = ?";
        return jdbcTemplate.query(isSellsql,(rs, rowNum) -> {
            long price = rs.getLong("price");
            boolean isSell = rs.getBoolean("isSell");
            return new FruitResponse(price,isSell);
        },name);
    }
}

๋ฌธ์ œ2

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.service.fruit.FruitService;
import org.springframework.web.bind.annotation.*;

@RestController
public class FruitController {

    //์ถ”๊ฐ€
    private final FruitService fruitService ;

    //์ถ”๊ฐ€
    public FruitController(FruitService fruitService){


        this.fruitService = fruitService;
    }




    @PostMapping("/api/v1/fruit")
    public void saveFruitInfo(@RequestBody SaveFruitRequest request) {
       fruitService.saveFruitInfo(request);


    }

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

    @GetMapping("/api/v1/fruit/stat")
    public FruitFinalResponse getFruits(@RequestParam String name) {
        return fruitService.getFruit(name);

    }


}

FruitService.java

package com.group.libraryapp.service.fruit;

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 com.group.libraryapp.repository.fruit.FruitRepository;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class FruitService {

    private final FruitRepository fruitRepository;

    public FruitService(FruitRepository fruitRepository){
        this.fruitRepository = fruitRepository;

    }

    public void saveFruitInfo( SaveFruitRequest request){
        fruitRepository.saveFruit(request.getName(),request.getWarehousingDate(),request.getPrice());

    }

    public void updateFruit(SaveFruitRequest request){


        //query() ํ†ตํ•ด ๋‚˜์˜ค๋Š”๊ฒŒ ๋ฆฌ์ŠคํŠธ์ธ๋ฐ, ๋ญ๋ผ๋„ ์žˆ์œผ๋ฉด 0์„ ๋„ฃ์–ด์ค„๊ฑฐ๊ณ  ์กฐํšŒ๊ฐ€ ์•ˆ๋˜๋ฉด ๋น„์–ด์žˆ์„๊ฑฐ์ž„.
        boolean isFruitIdNotExist = fruitRepository.isFruitIdNotExist(request.getId());

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

        fruitRepository.updateFruitSellStatus(request.getId());



    }

    public FruitFinalResponse getFruit(String name){

        //๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ ๊ฒฐ๊ณผ rs ๋ฅผ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” userResponseํ˜•ํƒœ๋กœ ๋ฐ”๊ฟ”์คŒ.์ด๊ฑฐ๋Š” ๊ฐ์ฒด ์ฐธ์กฐ๊ฐ’์ธ๋ฐ, ์ „์ฒด์—์„œ ๋ฐ˜ํ™˜ํ•˜๋Š”๊ฑด ๊ฒฐ๊ตญ query๋กœ ๊ฐ์‹ธ์„œ ๋‚˜์˜ค๋ฏ€๋กœ ๋ฆฌ์ŠคํŠธ ํƒ€์ž….
        boolean isFruitNameNotExist = fruitRepository.isFruitNameNotExist(name);

        if(isFruitNameNotExist){
            throw new IllegalArgumentException();
        }else{

            List<FruitResponse> fruitList = fruitRepository.getFruit(name);
            long salesTotal=0;
            long notSalesTotal=0;
            for(int i=0;i<fruitList.size();i++){
                if(fruitList.get(i).isSell()){
                    salesTotal = salesTotal + fruitList.get(i).getSalesAmount();

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

                }
            }

            return new FruitFinalResponse(salesTotal,notSalesTotal);
        }

    }
}

FruitRepository.java

package com.group.libraryapp.repository.fruit;

import com.group.libraryapp.dto.fourth.response.FruitResponse;

import java.time.LocalDate;
import java.util.List;

public interface FruitRepository
{

    void saveFruit(String fruitName, LocalDate warehousingDate, long price);
    boolean isFruitIdNotExist(long id);
    void updateFruitSellStatus(long id);
    boolean isFruitNameNotExist(String name);
    List<FruitResponse> getFruit(String name);

}

FruitMemoryRepository.java

package com.group.libraryapp.repository.fruit;

import com.group.libraryapp.dto.fourth.response.FruitResponse;
import org.springframework.stereotype.Repository;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

@Repository
public class FruitMemoryRepository implements FruitRepository {

    List<Fruit> fruits  = new ArrayList<>();
   long id = 0;

    public void saveFruit(String fruitName, LocalDate warehousingDate, long price){
        id++;
        Fruit fruit = new Fruit(fruitName,warehousingDate,price,id,false);
        fruits.add(fruit);

    }

    public boolean isFruitIdNotExist(long id){
        boolean result = false;
        for (Fruit fruit : fruits) {
            if(fruit.getId()==id){
                result = false;
            }else{
                result= true;
            }



        }


        return result;
    }

    public void updateFruitSellStatus(long id){


        for (Fruit fruit : fruits) {
            if(fruit.getId()==id){
                fruit.isSell = true;

            }

        }
    }

    public boolean isFruitNameNotExist(String name){
        boolean result = false;
        for (Fruit fruit : fruits) {
            if(fruit.getFruitName().equals(name)){
                result = false;
            }else{
                result= true;
            }



        }


        return result;


    }

    public List<FruitResponse> getFruit(String name){
        List<FruitResponse> test = new ArrayList<>();
        for (Fruit fruit : fruits) {
           if(fruit.getFruitName().equals(name)) {
               FruitResponse fruitResponse = new FruitResponse(fruit.getPrice(),fruit.isSell());
               test.add(fruitResponse);
           }
        }
        return test;
    }
}

FruitMysqlRepository.java

package com.group.libraryapp.repository.fruit;

import com.group.libraryapp.dto.fourth.response.FruitResponse;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import java.time.LocalDate;
import java.util.List;

@Repository
@Primary
public class FruitMysqlRepository implements FruitRepository{

    private final JdbcTemplate jdbcTemplate;
    public FruitMysqlRepository(JdbcTemplate jdbcTemplate){

        this.jdbcTemplate = jdbcTemplate;
    }

    public void saveFruit( String fruitName, LocalDate warehousingDate, long price){

        String sql = "INSERT INTO fruit(name,warehousingDate,price) VALUES(?,?,?)";
        jdbcTemplate.update(sql,fruitName,warehousingDate,price);
    }

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

    public void updateFruitSellStatus(long id){

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


    }

    public boolean isFruitNameNotExist(String name){
        String sql = "SELECT * FROM fruit WHERE name = ?";

        return jdbcTemplate.query(sql, (rs, rowNum) -> 0,name).isEmpty();

    }

    public List<FruitResponse> getFruit(String name){
        String isSellsql = "SELECT * FROM fruit WHERE name = ?";
        return jdbcTemplate.query(isSellsql,(rs, rowNum) -> {
            long price = rs.getLong("price");
            boolean isSell = rs.getBoolean("isSell");
            return new FruitResponse(price,isSell);
        },name);
    }
}

Fruit.java

package com.group.libraryapp.repository.fruit;

import java.time.LocalDate;

public class Fruit {
    String fruitName;
    LocalDate warehousingDate;
    long price;
    long id;
    boolean isSell;

    public Fruit(String fruitName, LocalDate warehousingDate, long price,long id,boolean isSell) {
        this.fruitName = fruitName;
        this.warehousingDate = warehousingDate;
        this.price = price;
        this.id = id;
        this.isSell = isSell;
    }

    public String getFruitName() {
        return fruitName;
    }

    public LocalDate getWarehousingDate() {
        return warehousingDate;
    }

    public long getPrice() {
        return price;
    }

    public long getId() {
        return id;
    }

    public boolean isSell() {
        return isSell;
    }


}

์‹คํ–‰ ๊ฒฐ๊ณผ

1) @primary ์–ด๋…ธํ…Œ์ด์…˜์„ FruitMemoryRepository์— ๋ถ™์˜€์„ ๋•Œ.

-> ๋‘๋ฆฌ์•ˆ, 2023-01-01 , 10000 ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด๋ณด๊ฒ ๋‹ค.

-> 200, ok ๊ฐ€ ๋–ด๋‹ค.

-> ๋‘๋ฆฌ์•ˆ์ด ์ œ๋Œ€๋กœ ๋“ค์–ด๊ฐ”๋Š”์ง€, ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๋ฒˆ ๊ฐ€์ ธ์™€๋ณด๊ฒ ๋‹ค.

-> ๋ฐฉ๊ธˆ ์ž…๋ ฅํ•œ ๋‘๋ฆฌ์•ˆ ๋ฐ์ดํ„ฐ๊ฐ€ ArrayList์— ์ž˜ ๋“ค์–ด๊ฐ”๋‹ค.

-> ์ฐธ๊ณ ๋กœ, mysql db์—๋Š” ๋‘๋ฆฌ์•ˆ์€ ์—†๋‹ค. ๊ณ ๋กœ,, ๋‚œ ์„ฑ๊ณตํ•œ ๊ฒƒ์ด๋‹ค..!

์ด๋ฒˆ์—๋Š” ํŒ”๋ฆฐ ๊ณผ์ผ์„ ํ‘œ์‹œํ•ด๋ณด์ž. ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ArrayList์— ํŒŒํŒŒ์•ผ,1500์›์„ ๋„ฃ์–ด๋ณด๊ฒ ๋‹ค. ์•ž์— ๋‘๊ฐœ์˜ ๊ณผ์ผ์„ ๋„ฃ์–ด๋ดค์ง€๋งŒ, ๋‚˜๋Š” ๊ณผ์ผ ์ข…๋ฅ˜๋ณ„๋กœ arraylist๋ฅผ ๋งŒ๋“ค๊ฒŒ ํ•ด๋†”์„œ id =1์ด๋‹ค.

ํŒŒํŒŒ์•ผ 15000์›์ด salesAmount์— ์ง‘๊ณ„๋๋‹ค.

20000์›์งœ๋ฆฌ ํŒŒํŒŒ์•ผ๋ฅผ ๋” ๋„ฃ์–ด๋ดค๋‹ค. ๋ฌผ๋ก  ์ˆ˜์ •์„ ์•ˆํ–ˆ์œผ๋‹ˆ, ์ด 20000์›์€ notSales์— ์ง‘๊ณ„๋˜์•ผ ํ•œ๋‹ค.

๋‚ด ์˜ˆ์ƒ๋Œ€๋กœ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™”๋‹ค.

2) @primary ์–ด๋…ธํ…Œ์ด์…˜์„ FruitMysqlRepository์— ๋ถ™์˜€์„ ๋•Œ.

-> ์ด๋ฒˆ์—๋Š” Mysql์— ์ƒค์ธ๋จธ์Šค์ผ“, 2023-01-21 , 20000 ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด๋ณด๊ฒ ๋‹ค. 200 ok๊ฐ€ ๋–ด์œผ๋‹ˆ, mysql ์„ ํ™•์ธํ•ด๋ณด์ž

-> ์ด๋ฒˆ์—” mysql์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋๋‹ค..

-> ์ƒค์ธ๋จธ์Šค์ผ“์ด ํŒ”๋ ธ๋‹ค๊ณ  ๋ฐ”๊ฟ”๋ณด์ž. id=8์ด๋‹ค.

-> ์•„๊นŒ๋ž‘ ๋‹ค๋ฅด๊ฒŒ isSell ์ด true, ์ฆ‰ 1๋กœ ๋ณ€๊ฒฝ๋๋‹ค(์”จ-์ต)

profile
์ด๊ฒƒ์ €๊ฒƒ๋งŒ๋“ค์–ด๋ณด๊ณ ์‹ถ์–ด์š”!

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