
๊ธฐ์ตํด์ผ ํ ์ค๋ฅ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;
}
}
์ฝ๋๊ฐ ๋ฆฌ์คํธ์ ๋ฆฌ์คํธ์..๋ฆฌ์คํธ๋ฅผ ๋ฃ๋ ๊ฑฐ ๊ฐ์๋ฐ.. ๊ณ ์ณ์ผ๊ฒ ๋ค