Skip to content

Commit

Permalink
feat: 지역으로 북토크 리스트 조회 (#35)
Browse files Browse the repository at this point in the history
* modify: 지역으로 공간 조회 RequestBody CityRequestDto로 통일

* feat: 지역으로 북토크 리스트 조회

* fix: @transitional 추가

* fix: url과 Valid 설정
  • Loading branch information
onpyeong committed Jul 11, 2023
1 parent 714d320 commit 2f6777e
Show file tree
Hide file tree
Showing 8 changed files with 139 additions and 8 deletions.
27 changes: 27 additions & 0 deletions src/main/java/org/sophy/sophy/controller/BooktalkController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package org.sophy.sophy.controller;

import lombok.RequiredArgsConstructor;
import org.sophy.sophy.common.dto.ApiResponseDto;
import org.sophy.sophy.controller.dto.request.CityRequestDto;
import org.sophy.sophy.controller.dto.response.BooktalkResponseDto;
import org.sophy.sophy.exception.SuccessStatus;
import org.sophy.sophy.service.BooktalkService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;
import java.util.List;

@RestController
@RequiredArgsConstructor
@RequestMapping("booktalk")
public class BooktalkController {
private final BooktalkService booktalkService;

@GetMapping("/search")
public ApiResponseDto<List<BooktalkResponseDto>> getPlacesByCity(@Valid @RequestBody CityRequestDto cityRequestDto) {
return ApiResponseDto.success(SuccessStatus.GET_BOOKTALKS_BY_CITY_SUCCESS, booktalkService.getBooktalksByCity(cityRequestDto));
}
}
9 changes: 5 additions & 4 deletions src/main/java/org/sophy/sophy/controller/PlaceController.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import lombok.RequiredArgsConstructor;
import org.sophy.sophy.common.dto.ApiResponseDto;
import org.sophy.sophy.controller.dto.request.PlaceRequestDto;
import org.sophy.sophy.controller.dto.request.CityRequestDto;
import org.sophy.sophy.controller.dto.response.PlaceResponseDto;
import org.sophy.sophy.exception.SuccessStatus;
import org.sophy.sophy.service.PlaceService;
Expand All @@ -11,6 +11,7 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;
import java.util.List;

@RestController
Expand All @@ -19,8 +20,8 @@
public class PlaceController {
private final PlaceService placeService;

@GetMapping
public ApiResponseDto<List<PlaceResponseDto>> getPlacesByCity(@RequestBody PlaceRequestDto placeRequestDto) {
return ApiResponseDto.success(SuccessStatus.GET_PLACES_BY_CITY_SUCCESS, placeService.getPlacesByCity(placeRequestDto));
@GetMapping("/search")
public ApiResponseDto<List<PlaceResponseDto>> getPlacesByCity(@Valid @RequestBody CityRequestDto cityRequestDto) {
return ApiResponseDto.success(SuccessStatus.GET_PLACES_BY_CITY_SUCCESS, placeService.getPlacesByCity(cityRequestDto));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
import lombok.Getter;
import org.sophy.sophy.domain.City;

import javax.validation.constraints.NotNull;

@Getter
public class PlaceRequestDto {
public class CityRequestDto {
@NotNull
private City city;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package org.sophy.sophy.controller.dto.response;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.sophy.sophy.domain.Booktalk;
import org.sophy.sophy.domain.PreliminaryInfo;

import java.time.LocalDateTime;
import java.util.ArrayList;

@Getter
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class BooktalkResponseDto {
private Long booktalkId;
private Integer preliminaryInfo;
private String title;
private String author;
private LocalDateTime startDate;
private LocalDateTime endDate;
private String place;
private Integer participant;
private Integer maximum;

public static BooktalkResponseDto of(Booktalk booktalk) {
return new BooktalkResponseDto(
booktalk.getId(),
booktalk.getPreliminaryInfo().ordinal(),
booktalk.getTitle(),
booktalk.getMember().getName(),
booktalk.getStartDate(),
booktalk.getEndDate(),
booktalk.getPlace().getName(),
booktalk.getParticipantList().size(),
booktalk.getMaximum());
}
}
1 change: 1 addition & 0 deletions src/main/java/org/sophy/sophy/exception/SuccessStatus.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ public enum SuccessStatus {
PATCH_MYINFO_SUCCESS(HttpStatus.OK, "내 정보를 성공적으로 수정했습니다."),
POST_ADDITIONALINFO_SUCCESS(HttpStatus.OK, "내 정보를 성공적으로 추가했습니다."),
GET_PLACES_BY_CITY_SUCCESS(HttpStatus.OK, "지역으로 공간 리스트를 성공적으로 불러왔습니다"),
GET_BOOKTALKS_BY_CITY_SUCCESS(HttpStatus.OK, "지역으로 북토크 리스트를 성공적으로 불러왔습니다"),
TEST_SUCCESS(HttpStatus.OK, "Test :: OK"),
/*
* 201 created
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package org.sophy.sophy.infrastructure;

import org.sophy.sophy.domain.Booktalk;
import org.sophy.sophy.domain.City;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface BooktalkRepository extends JpaRepository<Booktalk, Long> {

}
49 changes: 49 additions & 0 deletions src/main/java/org/sophy/sophy/service/BooktalkService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package org.sophy.sophy.service;

import lombok.RequiredArgsConstructor;
import org.sophy.sophy.controller.dto.request.CityRequestDto;
import org.sophy.sophy.controller.dto.response.BooktalkResponseDto;
import org.sophy.sophy.domain.BooktalkStatus;
import org.sophy.sophy.domain.City;
import org.sophy.sophy.domain.Place;
import org.sophy.sophy.infrastructure.PlaceRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

@Service
@RequiredArgsConstructor
public class BooktalkService {
private final PlaceRepository placeRepository;

@Transactional
public List<BooktalkResponseDto> getBooktalksByCity(CityRequestDto cityRequestDto) {
City city = cityRequestDto.getCity();
List<Place> placeList;

if (city.equals(City.UIJEONGBU_SI)) {
placeList = placeRepository.findAll();
} else {
placeList = placeRepository.findAllByCity(city);
}

List<BooktalkResponseDto> booktalkList = new ArrayList<>();
placeList.forEach(place -> {
place.getBooktalkList().forEach(booktalk -> {
// 모집중인 북토크만 추가
if (booktalk.getBooktalkStatus() == BooktalkStatus.RECRUITING) {
booktalkList.add(BooktalkResponseDto.of(booktalk));
}
}
);
});

// 마감 임박순으로 정렬
booktalkList.sort(Comparator.comparing(BooktalkResponseDto::getEndDate));

return booktalkList;
}
}
6 changes: 3 additions & 3 deletions src/main/java/org/sophy/sophy/service/PlaceService.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package org.sophy.sophy.service;

import lombok.RequiredArgsConstructor;
import org.sophy.sophy.controller.dto.request.PlaceRequestDto;
import org.sophy.sophy.controller.dto.request.CityRequestDto;
import org.sophy.sophy.controller.dto.response.PlaceResponseDto;
import org.sophy.sophy.domain.City;
import org.sophy.sophy.infrastructure.PlaceRepository;
Expand All @@ -15,8 +15,8 @@
public class PlaceService {
private final PlaceRepository placeRepository;

public List<PlaceResponseDto> getPlacesByCity(PlaceRequestDto placeRequestDto) {
City city = placeRequestDto.getCity();
public List<PlaceResponseDto> getPlacesByCity(CityRequestDto cityRequestDto) {
City city = cityRequestDto.getCity();
//의정부 시이면 전체 조회
if (city == City.UIJEONGBU_SI) {
return placeRepository.findAll().stream()
Expand Down

0 comments on commit 2f6777e

Please sign in to comment.