diff --git a/backend/src/main/java/com/yigongil/backend/application/StudyService.java b/backend/src/main/java/com/yigongil/backend/application/StudyService.java index 94186030..204306de 100644 --- a/backend/src/main/java/com/yigongil/backend/application/StudyService.java +++ b/backend/src/main/java/com/yigongil/backend/application/StudyService.java @@ -35,6 +35,7 @@ import java.util.List; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; +import org.springframework.data.domain.SliceImpl; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -315,4 +316,9 @@ public void exit(Member member, Long studyId) { Study study = findStudyById(studyId); study.exit(member); } + + public List findAllStudiesCreatedByMember(Member member) { + List studies = studyRepository.findAllByMasterIdAndProcessingStatus(member.getId(), ProcessingStatus.RECRUITING, Role.MASTER); + return toRecruitingStudyResponse(new SliceImpl<>(studies)); + } } diff --git a/backend/src/main/java/com/yigongil/backend/domain/studymember/StudyMemberRepository.java b/backend/src/main/java/com/yigongil/backend/domain/studymember/StudyMemberRepository.java index 89a6bc83..bfe5aa4b 100644 --- a/backend/src/main/java/com/yigongil/backend/domain/studymember/StudyMemberRepository.java +++ b/backend/src/main/java/com/yigongil/backend/domain/studymember/StudyMemberRepository.java @@ -15,26 +15,16 @@ public interface StudyMemberRepository extends Repository { @EntityGraph(attributePaths = "member") List findAllByStudyIdAndRole(Long studyId, Role role); - @EntityGraph(attributePaths = "member") - List findAllByStudyId(Long studyId); - @EntityGraph(attributePaths = "study") List findAllByMemberId(Long memberId); - @EntityGraph(attributePaths = "member") - List findAllByStudyIdAndRoleNot(Long studyId, Role role); - @EntityGraph(attributePaths = "member") List findAllByStudyIdAndRoleNotAndStudyResult(Long studyId, Role role, StudyResult studyResult); @EntityGraph(attributePaths = "study") List findAllByMemberIdAndRoleNotAndStudyResult(Long memberId, Role role, StudyResult studyResult); - boolean existsByStudyIdAndMemberId(Long studyId, Long memberId); - void delete(StudyMember studyMember); Long countByMemberIdAndStudyResult(Long memberId, StudyResult studyResult); - - void deleteAllByStudyIdAndRole(Long studyId, Role role); } diff --git a/backend/src/main/java/com/yigongil/backend/ui/StudyController.java b/backend/src/main/java/com/yigongil/backend/ui/StudyController.java index 6d8eec19..2b2e85fb 100644 --- a/backend/src/main/java/com/yigongil/backend/ui/StudyController.java +++ b/backend/src/main/java/com/yigongil/backend/ui/StudyController.java @@ -230,5 +230,11 @@ public ResponseEntity exitStudy( studyService.exit(member, studyId); return ResponseEntity.ok().build(); } + + @GetMapping("/created") + public ResponseEntity> findAllStudiesCreated(@Authorization Member member) { + List response = studyService.findAllStudiesCreatedByMember(member); + return ResponseEntity.ok(response); + } } diff --git a/backend/src/test/java/com/yigongil/backend/acceptance/steps/StudyFindSteps.java b/backend/src/test/java/com/yigongil/backend/acceptance/steps/StudyFindSteps.java new file mode 100644 index 00000000..43c7f31c --- /dev/null +++ b/backend/src/test/java/com/yigongil/backend/acceptance/steps/StudyFindSteps.java @@ -0,0 +1,30 @@ +package com.yigongil.backend.acceptance.steps; + +import static io.restassured.RestAssured.given; + +import io.cucumber.java.en.When; +import io.restassured.response.ExtractableResponse; +import io.restassured.response.Response; + +public class StudyFindSteps { + + private final SharedContext sharedContext; + + public StudyFindSteps(SharedContext sharedContext) { + this.sharedContext = sharedContext; + } + + @When("{string}가 개설한 스터디를 조회한다.") + public void 개설한_스터디를_조회한다(String githubId) { + String token = sharedContext.getToken(githubId); + + ExtractableResponse response = given().log().all() + .header("Authorization", token) + .when() + .get("/studies/created") + .then().log().all() + .extract(); + + sharedContext.setResponse(response); + } +} diff --git a/backend/src/test/resources/features/find-study.feature b/backend/src/test/resources/features/find-study.feature index 15d32383..1c79111a 100644 --- a/backend/src/test/resources/features/find-study.feature +++ b/backend/src/test/resources/features/find-study.feature @@ -48,3 +48,43 @@ Feature: 스터디 목록 조회 기능 When "noiman"이 수락된 대기중 스터디 목록을 조회한다. Then 1 개의 스터디를 확인할 수 있다. + + Scenario: 내가 개설한 모집중인 스터디를 조회한다. + Given "jinwoo"의 깃허브 아이디로 회원가입을 한다. + Given "jinwoo"가 제목-"자바1", 정원-"6"명, 최소 주차-"7"주, 주당 진행 횟수-"3"회, 소개-"스터디소개1"로 스터디를 개설한다. + + Given "jinwoo"가 제목-"자바2", 정원-"6"명, 최소 주차-"7"주, 주당 진행 횟수-"3"회, 소개-"스터디소개1"로 스터디를 개설한다. + + When "jinwoo"가 개설한 스터디를 조회한다. + + Then 2 개의 스터디를 확인할 수 있다. + + Scenario: 내가 개설한 모집중인 스터디만 나오는지 검증한다. + + Given "jinwoo"의 깃허브 아이디로 회원가입을 한다. + Given "jinwoo"가 제목-"자바1", 정원-"6"명, 최소 주차-"7"주, 주당 진행 횟수-"3"회, 소개-"스터디소개1"로 스터디를 개설한다. + Given "noiman"의 깃허브 아이디로 회원가입을 한다. + Given 깃허브 아이디가 "noiman"인 멤버가 이름이 "자바1"스터디에 신청한다. + Given "jinwoo"가 "noiman"의 "자바1" 스터디 신청을 수락한다. + Given "jinwoo"가 이름이 "자바1"인 스터디를 "MONDAY"에 진행되도록 하여 시작한다. + + Given "jinwoo"가 제목-"자바2", 정원-"6"명, 최소 주차-"7"주, 주당 진행 횟수-"3"회, 소개-"스터디소개1"로 스터디를 개설한다. + + When "jinwoo"가 개설한 스터디를 조회한다. + + Then 1 개의 스터디를 확인할 수 있다. + + Scenario: 다른 사람이 개설한 스터디가 나오지 않는지 검증한다. + + Given "jinwoo"의 깃허브 아이디로 회원가입을 한다. + Given "jinwoo"가 제목-"자바1", 정원-"6"명, 최소 주차-"7"주, 주당 진행 횟수-"3"회, 소개-"스터디소개1"로 스터디를 개설한다. + Given "noiman"의 깃허브 아이디로 회원가입을 한다. + Given 깃허브 아이디가 "noiman"인 멤버가 이름이 "자바1"스터디에 신청한다. + Given "jinwoo"가 "noiman"의 "자바1" 스터디 신청을 수락한다. + Given "jinwoo"가 이름이 "자바1"인 스터디를 "MONDAY"에 진행되도록 하여 시작한다. + + Given "jinwoo"가 제목-"자바2", 정원-"6"명, 최소 주차-"7"주, 주당 진행 횟수-"3"회, 소개-"스터디소개1"로 스터디를 개설한다. + + When "noiman"가 개설한 스터디를 조회한다. + + Then 0 개의 스터디를 확인할 수 있다.