Develop/곤부📙

스터디 / 0831

밀김 2023. 8. 31. 13:55
728x90

 

 

 

 

 

 

 

 

 

BACK


 

<Controller / 리스트>

    @Autowired
    private RestaurantService1 service;

    //리스트 전체 뽑기
@GetMapping("list")
    public ResponseEntity<List<Restaurant>> list(
        @RequestParam(name="q",required = false)String name,
        @RequestParam(name="c",required = false)Integer categoryId,
        @RequestParam(name="f",required = false)Integer filterId
    ){
        List<Restaurant> list = null;

        if(name != null)
            list = service.getListByName(name);
        else if(categoryId != null)
            list = service.getListByCategoryId(categoryId);
        else if(filterId != null)
            list = service.getListByFilterId(filterId);
        else
            list = service.getList();
        return Exc.handleException(list);
    }

- RequestParam으로 인자를 많이 받는 이유는 사용자의 요청에 따라 다양한 검색 조건으로 레스토랑 리스트를 조회하고 반환하기 위함 (여러가지 조건 검색을 지원하는 이유는 사용자들이 서로 다른 방식으로 원하는 정보를 검색하고 싶을수 있기 때문)

 

 

 

 

<ServiceImp / 리스트>

  @Override
    public List<Restaurant> getListByFilterId(Integer filterId) {
        //레포지토리에서 String 으로 필터를 받고 있으니까 String 필터 초기화
        String filter = "";
        //필터=SQL 쿼리문
        switch(filterId){
            case 1:
            filter = "value desc";
            break;
            case 2:
                filter = "avg_price";
                break;
            case 3:
                filter = "avg_price desc";
                break;
            case 4:
                filter = "like_count desc";
                break;
            case 5:
                filter = "rate_count desc";
                break;
        }
        return repository.findAll(null, null, filter);
    }

 

 

 

 

 

<Mapper / 리스트>

    <!-- 리스트 전체 -->
    <select id="findAll" resultType="Restaurant">
        select * from
        restaurant_study
        <trim prefix="where" prefixOverrides="AND">
            <if test="name != null">
            name like '%${name}%'
            </if>
            <if test="categoryId != null">
            category_id = #{categoryId}
            </if>
        </trim>
            order by id desc
        limit 0,10
    </select>

- prefix : where절을 추가할때 where을 자동으로 추가해줌 이거쓰면 where 안써도됨

- prefixOverrides="AND" : where절 앞에 있는 and를 자동으로 제거해줌 조건문이 한개이상일떄 써주는듯

- trim같은 조건절이 실행되고 그 다음에 order by가 실행

 

 

 

 

<ServiceImp/ 업데이트>


    @Override
    //업데이트는 항상 1아니면 0을 반환
    public Restaurant update(Restaurant restaurant) {
        int result = repository.update(restaurant);
        if(result == 1)
            return repository.getById(restaurant.getId());
        else
            return null;
    }

- 업데이트된 결과를 레포지토리에서 가져와 result에 담고 이걸로 조건문 검사

- 가져와진게 성공이라면 (=1) 어떤게 성공했는지 알아야하니까 Id를 가져와서 반환함

 

 

 

 

 

 

<ServiceImp/ 딜리트 *트렌젝셔널 사용>

  @Override
    @Transactional
    public Restaurant delete(int restaurantId) {
        Restaurant restaurant = repository.getById(restaurantId);

        if(restaurant==null)
            return null;

        repository.delete(restaurantId);
        repository.addDeleteHistory(restaurant);

        Restaurant deletedRestaurant = repository.findByDeletedRestaurantId(restaurantId);

        return deletedRestaurant;
    }

- DB에서 해당 레스토랑을 조회(getById)

- 정보가 있는것만 삭제하고, 그 삭제된걸 또 휴지통에 담음(addDeleteHistory)

 

 

 

 

 

 

FRONT


 

onMounted(()=>{
    fetch('http://localhost:8080/restaurant/list')
    .then(response => response.json())
    .then(list => {
        model.list = list
    })

    fetch('http://localhost:8080/api/category/list')
    .then(response =>{
        if(!response.ok)
            throw new Error("카테고리를 찾을수 업써")
        return response.json()
    })
    .then(categoryList_=>{
        model.categoryList = categoryList_
    })
    .catch(e=>{
        console.log(e)
    })
}) //onMounted 끝

(외워야하는 onMounted 구문)

 

 

 

function categoryClickHandler(cid){
    console.log(cid)
    fetch(`http://localhost:8080/restaurant/list?c=${cid}`)
    .then(response =>{
        if(!response.ok)
            throw new Error("목록을 찾을수 없스요")
        return response.json()
    })
    .then(list=>{
        model.list = list
    })
    .catch(e=>{
        console.log(e)
    })
}

(외워야하는 기본 fetch구문)

 

 

 

 

 

 

728x90