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

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

๋ฌธ์ œ1,2,3

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

https://inf.run/XKQg

๊ธฐ์–ตํ•ด์•ผ ํ•  ์˜ค๋ฅ˜1)
์ž๋ฐ”์˜ ์นด๋ฉœ ํ‘œ๊ธฐ๋ฒ•์ด DB์—์„œ๋Š” (์–ธ๋”๋ฐ”)๋กœ ๋ณ€ํ™˜๋œ๋‹ค๋Š”๊ฑธ ๋ชฐ๋ผ์„œ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜์˜€๋‹ค.
warehousingDate์ด๋ผ๋Š” ๋ณ€์ˆ˜๋ช…์„ ํ•„๋“œ๋ช…์œผ๋กœ ์ง€์ •ํ–ˆ์—ˆ๋Š”๋ฐ, ํ•œ์ฐธ ์˜ค๋ฅ˜๊ฐ€ ๋– ์„œ ๊ตฌ๊ธ€๋งํ•˜๋‹ค๊ฐ€ ์›์ธ์„ ๋ฐœ๊ฒฌํ•ด์„œ mysql ์นผ๋Ÿผ๋ช…์„ warehousing_Date์œผ๋กœ ๋ฐ”๊พธ์–ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๊ธฐ์–ตํ•ด์•ผ ํ•  ์˜ค๋ฅ˜2) query did not return a unique result: 2
์ด ์˜ค๋ฅ˜๋Š” findByName์„ ํ•  ๋•Œ ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐ ๋ฐ ๋ฐ›์•„์˜ค๋Š” ๋ฆฌํ„ด ํƒ€์ž…์ด ๋ฌธ์ œ์—ฌ์„œ ๋ฐœ์ƒํ–ˆ๋‹ค. ์›๋ž˜๋Š” List์œผ๋กœ ๋ฐ›์•˜๋Š”๋ฐ Collection์œผ๋กœ ๊ณ ์ณ์„œ ํ•ด๊ฒฐ๋๋‹ค. ๊ทผ๋ฐ ๋‚˜๋Š” List๋ž‘ Collection์ฐจ์ด๋ฅผ ๋ชจ๋ฅด๋‹ˆ๊นŒ ๊ณต๋ถ€ํ•ด์•ผ๊ฒ ๋‹ค...

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.FruitListFinalResponse;
import com.group.libraryapp.dto.fourth.response.fruitNumResponse;
import com.group.libraryapp.service.fruit.FruitServiceV2;
import org.springframework.web.bind.annotation.*;

@RestController
public class FruitController {

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

    //์ถ”๊ฐ€
    public FruitController(FruitServiceV2 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);

    }

    @GetMapping("/api/v1/fruit/count")
    public fruitNumResponse getFruitNum(@RequestParam String name) {
        return fruitService.getFruitNum(name);

    }

    @GetMapping("/api/v1/fruit/list")
    public FruitListFinalResponse getFruitList(@RequestParam String option, Long price) {
        return fruitService.getFruitList(option,price);

    }




}

FruitServiceV2.java

package com.group.libraryapp.service.fruit;

import com.group.libraryapp.domain.fruit.FruitJpaRepository;
import com.group.libraryapp.dto.fourth.request.SaveFruitRequest;
import com.group.libraryapp.dto.fourth.response.*;
import com.group.libraryapp.repository.fruit.Fruit;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;

@Service
public class FruitServiceV2 {

    private final FruitJpaRepository fruitRepository;

    public FruitServiceV2(FruitJpaRepository fruitRepository) {
        this.fruitRepository = fruitRepository;

    }

    public void saveFruitInfo(SaveFruitRequest request) {


        Fruit fruit = fruitRepository.save(new Fruit(request.getName(), request.getWarehousingDate(), request.getPrice(), request.getId(), request.isSell()));

    }

    public void updateFruit(SaveFruitRequest request) {

        Fruit fruit = fruitRepository.findById(request.getId())
                .orElseThrow(IllegalArgumentException::new);

        //์—…๋ฐ์ดํŠธ sql์ด ๋”ฐ๋กœ์žˆ์ง„ ์•Š์€๊ฐ€..?
        //ํŠน์ • id์— ํ•ด๋‹นํ•˜๋Š” ์œ ์ €์˜ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์™€์„œ ์—…๋ฐ์ดํŠธ ํ•˜๋ฉด๋จ.


        //์ง์ ‘ ๋„ฃ์–ด๋„ ๋˜๋ ค๋‚˜..?
        fruit.updateFruitSellStatus(true);
        //์ž๋™์œผ๋กœ ์œ ์ €์˜ ์ด๋ฆ„์ด ๋ฐ”๋€๊ฑธ ํ™•์ธํ•˜๊ณ  ์œ ์ €์˜ ์ด๋ฆ„์ด ๋ฐ”๋€Œ์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์—,๋ฐ”๋€๊ฑธ ๊ธฐ์ค€์œผ๋กœ ์—…๋ฐ์ดํŠธ์ฟผ๋ฆฌ๊ฐ€ ๋‚ ๋ผ๊ฐ.
        fruitRepository.save(fruit);


    }

    public FruitFinalResponse getFruit(String name) {

        Collection<Fruit> fruit = fruitRepository.findByName(name);
        if (fruit == null) {
            throw new IllegalArgumentException();
        } else {
            Collection<Fruit> fruits = fruitRepository.findByName(name);

            List<FruitResponse> fruitList = fruits.stream().
                    map(fruit1 -> new FruitResponse(fruit1.getPrice(), fruit1.isSell()))
                    .collect(Collectors.toList());
            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);

        }


    }

    public fruitNumResponse getFruitNum(String name){
        return new fruitNumResponse(fruitRepository.countByName(name));
    }

    public FruitListFinalResponse getFruitList(String option,Long price){
        Collection<Fruit> fruits;
        if(option.equals("GTE")){
            fruits = fruitRepository.findByPriceGreaterThanEqual(price);

        }else{
            fruits = fruitRepository.findByPriceLessThanEqual(price);
        }

        List<FruitListResponse> fruitList = fruits.stream().
                map(fruit1 -> new FruitListResponse(fruit1.getName(), fruit1.getPrice(),fruit1.getWarehousingDate(),fruit1.isSell()))
                .collect(Collectors.toList());

        List<FruitListResponse> notSellFruits = new ArrayList<>();

        for (FruitListResponse fruitListResponse : fruitList) {
           if(fruitListResponse.isSell()==false) {
               notSellFruits.add(fruitListResponse);

           }

        }
        return new FruitListFinalResponse(notSellFruits);


    }


}

Fruit.java

package com.group.libraryapp.repository.fruit;

import javax.persistence.*;
import java.time.LocalDate;

@Entity
public class Fruit {

    @Column(length = 20,name ="name")
    String name;
    LocalDate warehousingDate;
    long price;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    long id;

    @Column(nullable = false,name = "isSell")
    boolean isSell=false;

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

    //jpa ์‚ฌ์šฉ ์œ„ํ•œ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ์ถ”๊ฐ€
    public  Fruit(){

    }

    public String getName() {
        return name;
    }

    public LocalDate getWarehousingDate() {
        return warehousingDate;
    }

    public long getPrice() {
        return price;
    }

    public long getId() {
        return id;
    }

    public boolean isSell() {
        return isSell;
    }

  public void updateFruitSellStatus(boolean isSell){
        this.isSell = isSell;

  }


}

FruitNumResponse.java

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

public class fruitNumResponse {
    long count;

    public fruitNumResponse(long count) {
        this.count = count;
    }

    public long getCount() {
        return count;
    }
}

FruitJpaRepository.java

package com.group.libraryapp.domain.fruit;


import com.group.libraryapp.repository.fruit.Fruit;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.Collection;

@Repository
public interface FruitJpaRepository extends JpaRepository<Fruit,Long> {


   Collection<Fruit> findByName(String fruitName);

    Collection<Fruit> findByPriceGreaterThanEqual(Long price);
    Collection<Fruit> findByPriceLessThanEqual(Long price);


    Long countByName(String fruitName);


}

FruitListResponse.java

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

import java.time.LocalDate;

public class FruitListResponse {
  String name;
  Long price;
  LocalDate warehousingDate;
  boolean isSell;

  public FruitListResponse(String name, Long price, LocalDate warehousingDate,boolean isSell) {
      this.name = name;
      this.price = price;
      this.warehousingDate = warehousingDate;
      this.isSell = isSell;
  }

  public String getName() {
      return name;
  }

  public Long getPrice() {
      return price;
  }

  public LocalDate getWarehousingDate() {
      return warehousingDate;
  }

  public boolean isSell() {
      return isSell;
  }
}

FruitListFinalResponse.java

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

import java.util.List;

public class FruitListFinalResponse {
  List<FruitListResponse> fruitListResponses;

  public FruitListFinalResponse(List<FruitListResponse> fruitListResponses) {
      this.fruitListResponses = fruitListResponses;
  }

  public List<FruitListResponse> getFruitListResponses() {
      return fruitListResponses;
  }
}
profile
์ด๊ฒƒ์ €๊ฒƒ๋งŒ๋“ค์–ด๋ณด๊ณ ์‹ถ์–ด์š”!

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

comment-user-thumbnail
2024๋…„ 2์›” 27์ผ

์ฝ”๋“œ๊ฐ€ ๋ฆฌ์ŠคํŠธ์— ๋ฆฌ์ŠคํŠธ์—..๋ฆฌ์ŠคํŠธ๋ฅผ ๋„ฃ๋Š” ๊ฑฐ ๊ฐ™์€๋ฐ.. ๊ณ ์ณ์•ผ๊ฒ ๋‹ค

1๊ฐœ์˜ ๋‹ต๊ธ€