![[인프런 워밍업 클럽 0기] BE 7일차 과제](https://cdn.inflearn.com/public/files/blogs/c8856da8-e225-4bc6-abb0-022b4b16b84e/comm-warm-up-page-main.png)
[인프런 워밍업 클럽 0기] BE 7일차 과제
2024.02.27
controller
@RequestMapping("/api/v1")
@RestController
public class FruitController {
private final FruitService fruitService;
public FruitController(FruitService fruitService) {
this.fruitService = fruitService;
}
@PostMapping("/fruit")
public void saveFruit(@RequestBody FruitDTO request) {
fruitService.save(request);
}
@PutMapping("/fruit")
public void sellFruit(@RequestBody FruitDTO request) {
fruitService.sell(request);
}
@GetMapping("/fruit/stat")
public FruitResponse getStat(@RequestParam String name) {
return fruitService.getStat(name);
}
@GetMapping("/fruit/count")
public FruitCountResponse count(@RequestParam String name) {
return fruitService.count(name);
}
@GetMapping("/fruit/list")
public FruitListResponse getList(FruitListRequest fruitListRequest) {
return fruitService.getList(fruitListRequest);
}
}
service
@Service
public class FruitService {
private final FruitRepository fruitRepository;
public FruitService(FruitRepository fruitRepository) {
this.fruitRepository = fruitRepository;
}
public void save(FruitDTO request) {
fruitRepository.save(new Fruit(request.getName(),
request.getWarehousingDate(),
request.getPrice()));
}
public void sell(FruitDTO request) {
Fruit fruit = fruitRepository.findById(request.getId()).orElseThrow(IllegalArgumentException::new);
fruit.changeIs_sold();
fruitRepository.save(fruit);
}
public FruitResponse getStat(String name) {
List<Fruit> salesList = fruitRepository.findByNameAndIsSoldIsFalse(name);
List<Fruit> notSalesList = fruitRepository.findByNameAndIsSoldIsTrue(name);
long salesAmount = salesList.stream().mapToLong(Fruit::getPrice).sum();
long notSalesAmount = notSalesList.stream().mapToLong(Fruit::getPrice).sum();
return new FruitResponse(salesAmount, notSalesAmount);
}
public FruitCountResponse count(String name) {
return new FruitCountResponse(fruitRepository.countByNameAndIsSoldIsTrue(name));
}
public FruitListResponse getList(FruitListRequest fruitListRequest) {
if ("GTE".equals(fruitListRequest.getOption())) {
return new FruitListResponse(fruitRepository.findAllByPriceGreaterThanEqualAndIsSoldIsFalse(fruitListRequest.getPrice()));
}
if ("LTE".equals(fruitListRequest.getOption())) {
return new FruitListResponse(fruitRepository.findAllByPriceLessThanEqualAndIsSoldIsFalse(fruitListRequest.getPrice()));
}
throw new IllegalArgumentException("과일 리스트를 불러올 수 없습니다.");
}
}
repository
@Repository
public interface FruitRepository extends JpaRepository<Fruit, Long> {
List<Fruit> findByNameAndIsSoldIsFalse(String name);
List<Fruit> findByNameAndIsSoldIsTrue(String name);
long countByNameAndIsSoldIsTrue(String name);
List<Fruit> findAllByPriceGreaterThanEqualAndIsSoldIsFalse(Long price);
List<Fruit> findAllByPriceLessThanEqualAndIsSoldIsFalse(Long price);
}
domain
@Entity
@Getter
public class Fruit {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private LocalDate warehousingDate;
@Column(nullable = false)
private long price;
@Column(nullable = false, columnDefinition = "boolean default false")
private boolean isSold;
public Fruit(String name, LocalDate warehousingDate, long price) {
this.name = name;
this.warehousingDate = warehousingDate;
this.price = price;
}
public Fruit() {
}
public void changeIs_sold() {
this.isSold = true;
}
}
dto
@Data
@AllArgsConstructor
@RequiredArgsConstructor
public class FruitDTO {
private Long id;
private String name;
private LocalDate warehousingDate;
private long price;
private boolean is_sold;
@Data
@AllArgsConstructor
@RequiredArgsConstructor
public static class FruitResponse {
private long salesAmount;
private long notSalesAmount;
}
@Data
@AllArgsConstructor
@RequiredArgsConstructor
public static class FruitCountResponse {
private long count;
}
@Data
@AllArgsConstructor
@RequiredArgsConstructor
public static class FruitListRequest {
private String option;
private long price;
}
@Data
@AllArgsConstructor
@RequiredArgsConstructor
public static class FruitListResponse {
private List<Fruit> list;
}
}
댓글을 작성해보세요.