Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: 내가 개설한 스터디 조회 #558

Open
wants to merge 1 commit into
base: BE/develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -315,4 +316,9 @@ public void exit(Member member, Long studyId) {
Study study = findStudyById(studyId);
study.exit(member);
}

public List<StudyListItemResponse> findAllStudiesCreatedByMember(Member member) {
List<Study> studies = studyRepository.findAllByMasterIdAndProcessingStatus(member.getId(), ProcessingStatus.RECRUITING, Role.MASTER);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이거 개설한 스터디는 모집 중인 것만 보기로 결정된 사안인가요??
사용자가 <개설한 스터디>와 같은 필터링을 선택했을 때, 모집 중인 것만 보여줄 것이라고 예상하기 보다는 개설한 전체 스터디를 보여주길 예상하지 않을까 싶네요.
차라리 전체를 넘겨주되, 정렬하여 모집 중인 것을 상위로 보여주는 게 낫지 않을까요??

UI 측면에서 해결할 수 있다면 OK긴 합니다.

return toRecruitingStudyResponse(new SliceImpl<>(studies));
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

그냥 List를 넘겨주는 거에 비해 이점이 있나요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

사실 슬라이스 내부기능을 전혀 사용하지 않기 때문에 리스트로 해도 상관없긴 합니다

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,26 +15,16 @@ public interface StudyMemberRepository extends Repository<StudyMember, Long> {
@EntityGraph(attributePaths = "member")
List<StudyMember> findAllByStudyIdAndRole(Long studyId, Role role);

@EntityGraph(attributePaths = "member")
List<StudyMember> findAllByStudyId(Long studyId);

@EntityGraph(attributePaths = "study")
List<StudyMember> findAllByMemberId(Long memberId);

@EntityGraph(attributePaths = "member")
List<StudyMember> findAllByStudyIdAndRoleNot(Long studyId, Role role);

@EntityGraph(attributePaths = "member")
List<StudyMember> findAllByStudyIdAndRoleNotAndStudyResult(Long studyId, Role role, StudyResult studyResult);

@EntityGraph(attributePaths = "study")
List<StudyMember> 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);
}
Original file line number Diff line number Diff line change
Expand Up @@ -230,5 +230,11 @@ public ResponseEntity<Void> exitStudy(
studyService.exit(member, studyId);
return ResponseEntity.ok().build();
}

@GetMapping("/created")
public ResponseEntity<List<StudyListItemResponse>> findAllStudiesCreated(@Authorization Member member) {
List<StudyListItemResponse> response = studyService.findAllStudiesCreatedByMember(member);
return ResponseEntity.ok(response);
}
}

Original file line number Diff line number Diff line change
@@ -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> response = given().log().all()
.header("Authorization", token)
.when()
.get("/studies/created")
.then().log().all()
.extract();

sharedContext.setResponse(response);
}
}
40 changes: 40 additions & 0 deletions backend/src/test/resources/features/find-study.feature
Original file line number Diff line number Diff line change
Expand Up @@ -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 개의 스터디를 확인할 수 있다.