문제
Controller
@RestController
public class FruitController {
private final FruitService fruitService;
public FruitController(FruitService fruitService) {
this.fruitService = fruitService;
}
@PostMapping("/api/v1/fruit")
public void saveFruit(@RequestBody FruitRequest request) {
fruitService.saveFruit(request);
}
@PutMapping("/api/v1/fruit")
public void saleFruit(@RequestBody SoldOutFruitRequest request) {
fruitService.saleFruit(request);
}
@GetMapping("/api/v1/fruit/stat")
public TotalPriceResponse salesData(@RequestParam String name) {
return fruitService.salesData(name);
}
}
Service
@Service
public class FruitService {
private final FruitRepository fruitRepository;
public FruitService(FruitRepository fruitRepository) {
this.fruitRepository = fruitRepository;
}
public void saveFruit(FruitRequest request) {
fruitRepository.saveFruit(request);
}
public void saleFruit(SoldOutFruitRequest request) {
boolean isEmpty = fruitRepository.checkSoldOut(request);
if (isEmpty) {
throw new IllegalArgumentException();
}
fruitRepository.saleFruit(request);
}
public TotalPriceResponse salesData(String name) {
return new TotalPriceResponse(fruitRepository.salesRead(name), fruitRepository.notSalesRead(name));
}
}
Repository
public interface FruitRepository {
void saveFruit(FruitRequest request);
void saleFruit(SoldOutFruitRequest request);
boolean checkSoldOut(SoldOutFruitRequest request);
long salesRead(String name);
long notSalesRead(String name);
}
@Primary
@Repository
public class FruitMemoryRepository implements FruitRepository {
private final List<Fruit> fruits = new ArrayList<>();
@Override
public void saveFruit(FruitRequest request) {
fruits.add(new Fruit(request.getName(), request.getWarehousingDate(), request.getPrice()));
}
@Override
public void saleFruit(SoldOutFruitRequest request) {
Fruit fruit = fruits.get((int) request.getId());
fruit.setSold(true);
}
@Override
public boolean checkSoldOut(SoldOutFruitRequest request) {
Fruit fruit = fruits.get((int) request.getId());
if (fruit.isSold()) {
return true;
}
return false;
}
@Override
public long salesRead(String name) {
long price = 0;
for (int i = 0; i < fruits.size(); i++) {
Fruit fruit = fruits.get(i);
if (fruit.getName().equals(name) && fruit.isSold()) {
price += fruit.getPrice();
}
}
return price;
}
@Override
public long notSalesRead(String name) {
long price = 0;
for (int i = 0; i < fruits.size(); i++) {
Fruit fruit = fruits.get(i);
if (fruit.getName().equals(name) && !fruit.isSold()) {
price += fruit.getPrice();
}
}
return price;
}
}
'인프런 워밍업 스터디 > 과제' 카테고리의 다른 글
[인프런 워밍업 스터디 클럽 0기 - BE] #7 과제 (0) | 2024.02.27 |
---|---|
[인프런 워밍업 스터디 클럽 0기 - BE] #5 과제 (0) | 2024.02.23 |
[인프런 워밍업 스터디 클럽 0기 - BE] #4 과제 (0) | 2024.02.22 |
[인프런 워밍업 스터디 클럽 0기 - BE] #3 과제 (0) | 2024.02.21 |
[인프런 워밍업 스터디 클럽 0기 - BE] #2 과제 (0) | 2024.02.20 |