Controller
package com.group.libraryapp.ex.day7.controller;
import com.group.libraryapp.ex.day7.service.FruitService2;
import com.group.libraryapp.ex.fruitstore.dto.request.FruitRequest;
import com.group.libraryapp.ex.fruitstore.dto.request.SellInfoRequest;
import com.group.libraryapp.ex.fruitstore.dto.response.CountResponse;
import com.group.libraryapp.ex.fruitstore.dto.response.ShowFruitResponse;
import org.springframework.web.bind.annotation.*;
@RestController
public class FruitController2 {
private final FruitService2 fruitService2;
public FruitController2(FruitService2 fruitService2) {
this.fruitService2 = fruitService2;
}
@PostMapping("/api/v3/fruit")
public void saveFruitInfo(@RequestBody FruitRequest request) {
fruitService2.saveFruitInfo(request);
}
@PutMapping("/api/v3/fruit")
public void sellFruit(@RequestBody SellInfoRequest request) {
fruitService2.sellFruit(request);
}
@GetMapping("/api/v3/fruit/stat")
public ShowFruitResponse showFruitInfo(@RequestParam String name) {
ShowFruitResponse response = fruitService2.showFruitInfo(name);
return response;
}
}
Service
package com.group.libraryapp.ex.day7.service;
import com.group.libraryapp.ex.day7.domain.Fruit2;
import com.group.libraryapp.ex.day7.domain.FruitRepository2;
import com.group.libraryapp.ex.fruitstore.dto.request.FruitRequest;
import com.group.libraryapp.ex.fruitstore.dto.request.SellInfoRequest;
import com.group.libraryapp.ex.fruitstore.dto.response.CountResponse;
import com.group.libraryapp.ex.fruitstore.dto.response.ShowFruitResponse;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class FruitService2 {
private final FruitRepository2 fruitRepository2;
public FruitService2(FruitRepository2 fruitRepository2) {
this.fruitRepository2 = fruitRepository2;
}
@Transactional
public void saveFruitInfo(FruitRequest request) {
fruitRepository2.save(new Fruit2(request));
}
@Transactional
public void sellFruit(SellInfoRequest request) {
Fruit2 fruit2 = fruitRepository2.findById(request.getId())
.orElseThrow(IllegalAccessError::new);
fruit2.updateStatus(fruit2.getId());
}
@Transactional
public ShowFruitResponse showFruitInfo(String name) {
long salesAmount = fruitRepository2.findTotalPriceOfActiveFruits();
long notSalesAmount = fruitRepository2.findTotalPriceOfInactiveFruits();
ShowFruitResponse response = new ShowFruitResponse(salesAmount, notSalesAmount);
return response;
}
}
Repository
package com.group.libraryapp.ex.day7.domain;
import com.group.libraryapp.ex.fruitstore.dto.response.CountResponse;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
public interface FruitRepository2 extends JpaRepository<Fruit2, Long> {
@Query("SELECT SUM(f.price) FROM Fruit2 f WHERE f.status = TRUE")
public long findTotalPriceOfActiveFruits();
@Query("SELECT SUM(f.price) FROM Fruit2 f WHERE f.status = FALSE")
public long findTotalPriceOfInactiveFruits();
}
Controller
@GetMapping("/api/v1/fruit/count")
public CountResponse CountFruit(@RequestParam String name) {
long count = fruitService2.countFruit(name);
CountResponse response = new CountResponse(count);
return response;
}
Service
@Transactional
public long countFruit(String name) {
return fruitRepository2.countByName(name);
}
Repository
@Query("SELECT COUNT(f) FROM Fruit2 f WHERE f.name = :name")
long countByName(String name);
ResponseDTO
package com.group.libraryapp.ex.fruitstore.dto.response;
public class CountResponse {
private long count;
public CountResponse(long count) {
this.count = count;
}
public void setCount(long count) {
this.count = count;
}
}
Response
Not Acceptable이 나오는데 왜 그런지 모르겠다..
문제 3은 건드리지도 못하겠다..
나중에 시간을 좀 더 가지고 풀어봐야겠다
출처
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인
최태현 | Java와 Spring Boot, JPA, MySQL, AWS를 이용해 서버를 개발하고 배포합니다. 웹 애플리케이션을 개발하며 서버 개발에 필요한 배경지식과 이론, 다양한 기술들을 모두 학습할 뿐 아니라, 다양한
www.inflearn.com