인프런 워밍업 클럽 스터디 0기
BE 7일차
Fruit 기능들을 JPA를 이용하도록 변경
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.time.LocalDate;
@Getter
@Entity(name="fruit")
@NoArgsConstructor
public class Fruit {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private LocalDate warehousingDate;
private long price;
private boolean isSold;
public Fruit(String name, LocalDate warehousingDate, long price) {
this.name = name;
this.warehousingDate = warehousingDate;
this.price = price;
}
public void updateIsSold(){
this.isSold = true;
}
}
import com.group.libraryapp.domain.Fruit;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface FruitRepository extends JpaRepository<Fruit,Long> {
List<Fruit> findByNameAndIsSold(String name,boolean isSold);
}
saveFruit
//FruitService 클래스
public void saveFruit(Fruit fruit){
fruitRepository.save(fruit);
}
sellFruit : 과일 판매 시 판매 여부 true로 변경
//fruitService 클래스
public void sellFruit(long id){
String sql = "UPDATE fruit SET isSold=1 WHERE id=?";
Fruit fruit = fruitRepository.findById(id)
.orElseThrow();
fruit.updateIsSold();
fruitRepository.save(fruit);
}
//fruit 클래스
public void updateIsSold(){
this.isSold = true;
}
calcPrice : 특정 과일의 팔린 금액, 팔리지 않은 금액 조회
public FruitResponse calcPrice(String name){
long salesAmount = fruitRepository.findByNameAndIsSold(name,true)
.stream().mapToLong(fruit->fruit.getPrice()).sum();
long notSalesAmount = fruitRepository.findByNameAndIsSold(name,false)
.stream().mapToLong(fruit->fruit.getPrice()).sum();
return new FruitResponse(salesAmount,notSalesAmount);
}
fruit 정보 저장
팔린 과일 표시
사과 팔린 금액과 팔리지 않은 금액 조회
특정 과일 기준 가게를 거쳐갔던 과일의 개수 세는 기능 개발
@GetMapping("/api/v1/fruit/count")
public FruitCountResponse countFruit(@RequestParam String name){
return fruitService.countFruit(name);
}
import lombok.Getter;
@Getter
public class FruitCountResponse {
private long count;
public FruitCountResponse(long count) {
this.count = count;
}
}
public FruitCountResponse countFruit(String name){
long count = fruitRepository.findAllByName(name).stream().count();
return new FruitCountResponse(count);
}
List<Fruit> findAllByName(String name);
판매되지 않은 특정 금액 이상 혹은 특정 금액 이하의 과일 목록 조회 기능 개발
@GetMapping("/api/v1/fruit/list")
public List<FruitListResponse> returnFruitList(@RequestParam String option, long price){
return fruitService.returnFruitList(option,price);
}
import lombok.Getter;
import java.time.LocalDate;
@Getter
public class FruitListResponse {
private String name;
private long price;
private LocalDate warehousingDate;
public FruitListResponse(String name, long price, LocalDate warehousingDate) {
this.name = name;
this.price = price;
this.warehousingDate = warehousingDate;
}
}
public List<FruitListResponse> returnFruitList(String option, long price){
if(option.equals("GTE")){
return fruitRepository.findAllByPriceGreaterThanEqualAndIsSold(price,false)
.stream().map(fruit-> new FruitListResponse(fruit.getName(),fruit.getPrice(),fruit.getWarehousingDate()))
.collect(Collectors.toList());
}else{
return fruitRepository.findAllByPriceLessThanEqualAndIsSold(price,false)
.stream().map(fruit-> new FruitListResponse(fruit.getName(),fruit.getPrice(),fruit.getWarehousingDate()))
.collect(Collectors.toList());
}
}
List<Fruit> findAllByPriceGreaterThanEqualAndIsSold(long price,boolean isSold);
List<Fruit> findAllByPriceLessThanEqualAndIsSold(long price,boolean isSold);