Skip to content

Commit

Permalink
Merge branch 'develop' into feature/1388-essay-answer-list
Browse files Browse the repository at this point in the history
  • Loading branch information
WaiNaat authored Nov 17, 2023
2 parents ca72aff + 9a44012 commit d07b943
Show file tree
Hide file tree
Showing 56 changed files with 777 additions and 541 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,37 +2,39 @@

import io.cucumber.java.en.Given;
import wooteco.prolog.AcceptanceSteps;
import wooteco.prolog.member.domain.GroupMember;
import wooteco.prolog.member.domain.Member;
import wooteco.prolog.member.domain.MemberGroup;
import wooteco.prolog.member.domain.repository.GroupMemberRepository;
import wooteco.prolog.member.domain.repository.MemberGroupRepository;
import wooteco.prolog.member.domain.*;
import wooteco.prolog.member.domain.repository.DepartmentMemberRepository;
import wooteco.prolog.member.domain.repository.DepartmentRepository;
import wooteco.prolog.member.domain.repository.MemberRepository;

import static wooteco.prolog.member.domain.Part.*;
import static wooteco.prolog.member.domain.Term.*;

public class GroupMemberStepDefinitions extends AcceptanceSteps {

private final MemberRepository memberRepository;
private final MemberGroupRepository memberGroupRepository;
private final GroupMemberRepository groupMemberRepository;
private final DepartmentRepository departmentRepository;
private final DepartmentMemberRepository departmentMemberRepository;

public GroupMemberStepDefinitions(MemberRepository memberRepository,
MemberGroupRepository memberGroupRepository,
GroupMemberRepository groupMemberRepository) {
DepartmentRepository departmentRepository,
DepartmentMemberRepository departmentMemberRepository) {
this.memberRepository = memberRepository;
this.memberGroupRepository = memberGroupRepository;
this.groupMemberRepository = groupMemberRepository;
this.departmentRepository = departmentRepository;
this.departmentMemberRepository = departmentMemberRepository;
}

@Given("{string}을 멤버그룹과 그룹멤버에 등록하고")
public void 그룹멤버를_생성하고(String title) {
Member member = memberRepository.findById(1L).get();
MemberGroup 프론트엔드 = memberGroupRepository.save(
new MemberGroup(null, "4기 프론트엔드", "4기 프론트엔드 설명"));
MemberGroup 백엔드 = memberGroupRepository.save(new MemberGroup(null, "4기 백엔드", "4기 백엔드 설명"));
MemberGroup 안드로이드 = memberGroupRepository.save(
new MemberGroup(null, "4기 안드로이드", "4기 안드로이드 설명"));
groupMemberRepository.save(new GroupMember(null, member, 백엔드));
groupMemberRepository.save(new GroupMember(null, member, 프론트엔드));
groupMemberRepository.save(new GroupMember(null, member, 안드로이드));
Department 프론트엔드 = departmentRepository.save(
new Department(null, FRONTEND, FOURTH));
Department 백엔드 = departmentRepository.save(new Department(null, BACKEND, FOURTH));
Department 안드로이드 = departmentRepository.save(
new Department(null, ANDROID, FOURTH));
departmentMemberRepository.save(new DepartmentMember(null, member, 백엔드));
departmentMemberRepository.save(new DepartmentMember(null, member, 프론트엔드));
departmentMemberRepository.save(new DepartmentMember(null, member, 안드로이드));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ Feature: 아티클 관련 기능
# When 아티클을 전체 조회 하면
# Then 아티클이 전체 조회 된다


Scenario: 아티클을 수정하기
Given 아티클을 여러개 작성하고
When 1번 아티클을 수정하면
Expand Down
14 changes: 12 additions & 2 deletions backend/src/documentation/adoc/quiz.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,21 @@ include::{snippets}/quiz/detail/http-response.adoc[]

==== Request

include::{snippets}/quiz/list/http-request.adoc[]
include::{snippets}/quiz/list-keyword/http-request.adoc[]

==== Response

include::{snippets}/quiz/list/http-response.adoc[]
include::{snippets}/quiz/list-keyword/http-response.adoc[]

=== 커리큘럼별 퀴즈 목록 조회

==== Request

include::{snippets}/quiz/list-curriculum/http-request.adoc[]

==== Response

include::{snippets}/quiz/list-curriculum/http-response.adoc[]

=== 퀴즈 삭제

Expand Down
11 changes: 11 additions & 0 deletions backend/src/documentation/java/wooteco/prolog/Documentation.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@

import io.restassured.RestAssured;
import io.restassured.builder.RequestSpecBuilder;
import io.restassured.http.ContentType;
import io.restassured.specification.RequestSpecification;
import java.util.HashMap;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
Expand Down Expand Up @@ -45,6 +47,15 @@ public void setUp(RestDocumentationContextProvider restDocumentation) {
.then().log().all()
.extract().body().as(TokenResponse.class);

HashMap<String, Object> data = new HashMap<>();
data.put("role", "CREW");

final RequestSpecification requestSpecification = RestAssured
.given().log().all()
.body(data).contentType(ContentType.JSON)
.auth().oauth2(로그인_사용자.getAccessToken());
requestSpecification.patch("/members/" + 1 + "/role");

this.spec = new RequestSpecBuilder()
.addFilter(documentationConfiguration(restDocumentation))
.build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,24 @@


import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;

import java.util.Arrays;
import java.util.List;
import org.junit.jupiter.api.Test;
import org.mockito.BDDMockito;
import org.mockito.Mockito;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.HttpStatus;
import wooteco.prolog.NewDocumentation;
import wooteco.prolog.roadmap.application.QuizService;
import wooteco.prolog.roadmap.application.dto.CurriculumQuizResponse;
import wooteco.prolog.roadmap.application.dto.QuizRequest;
import wooteco.prolog.roadmap.application.dto.QuizResponse;
import wooteco.prolog.roadmap.application.dto.QuizzesResponse;
Expand Down Expand Up @@ -61,10 +68,47 @@ public class QuizDocumentation extends NewDocumentation {

given
.when().get("/sessions/{sessionId}/keywords/{keywordId}/quizs", 1L, 1L)
.then().log().all().apply(document("quiz/list"))
.then().log().all().apply(document("quiz/list-keyword"))
.statusCode(HttpStatus.OK.value());
}

@Test
void Curriculum별_Quiz_조회() {
given(quizService.findQuizzesByCurriculumId(anyLong()))
.willReturn(makeMockResponse());

given
.when().get("/curriculums/{curriculumId}/quizzes", 1L)
.then().log().all().apply(document("quiz/list-curriculum"))
.statusCode(HttpStatus.OK.value());
}

private List<CurriculumQuizResponse> makeMockResponse() {
CurriculumQuizResponse response1 = new CurriculumQuizResponse() {
@Override
public Long getId() {
return 1L;
}

@Override
public String getQuestion() {
return "question1";
}
};
CurriculumQuizResponse response2 = new CurriculumQuizResponse() {
@Override
public Long getId() {
return 2L;
}

@Override
public String getQuestion() {
return "question2";
}
};
return Arrays.asList(response1, response2);
}

@Test
void 퀴즈_수정() {
doNothing().when(quizService).updateQuiz(any(), any());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package wooteco.prolog.docu;

import static org.assertj.core.api.Assertions.assertThat;
import static wooteco.prolog.member.domain.Part.*;
import static wooteco.prolog.member.domain.Term.*;

import io.restassured.RestAssured;
import io.restassured.response.ExtractableResponse;
Expand All @@ -16,11 +18,9 @@
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import wooteco.prolog.Documentation;
import wooteco.prolog.member.domain.GroupMember;
import wooteco.prolog.member.domain.Member;
import wooteco.prolog.member.domain.MemberGroup;
import wooteco.prolog.member.domain.repository.GroupMemberRepository;
import wooteco.prolog.member.domain.repository.MemberGroupRepository;
import wooteco.prolog.member.domain.*;
import wooteco.prolog.member.domain.repository.DepartmentMemberRepository;
import wooteco.prolog.member.domain.repository.DepartmentRepository;
import wooteco.prolog.member.domain.repository.MemberRepository;
import wooteco.prolog.session.application.dto.MissionRequest;
import wooteco.prolog.session.application.dto.MissionResponse;
Expand All @@ -37,9 +37,9 @@ class StudylogDocumentation extends Documentation {
@Autowired
private MemberRepository memberRepository;
@Autowired
private MemberGroupRepository memberGroupRepository;
private DepartmentRepository departmentRepository;
@Autowired
private GroupMemberRepository groupMemberRepository;
private DepartmentMemberRepository departmentMemberRepository;

@Test
void 스터디로그를_생성한다() {
Expand Down Expand Up @@ -312,14 +312,14 @@ private StudylogRequest createStudylogRequest3() {

private void 회원과_멤버그룹_그룹멤버를_등록함() {
Member member = memberRepository.findById(1L).get();
MemberGroup 프론트엔드 = memberGroupRepository.save(
new MemberGroup(null, "4기 프론트엔드", "4기 프론트엔드 설명"));
MemberGroup 백엔드 = memberGroupRepository.save(new MemberGroup(null, "4기 백엔드", "4기 백엔드 설명"));
MemberGroup 안드로이드 = memberGroupRepository.save(
new MemberGroup(null, "4기 안드로이드", "4기 안드로이드 설명"));
groupMemberRepository.save(new GroupMember(null, member, 백엔드));
groupMemberRepository.save(new GroupMember(null, member, 프론트엔드));
groupMemberRepository.save(new GroupMember(null, member, 안드로이드));
Department 프론트엔드 = departmentRepository.save(
new Department(null, FRONTEND, FOURTH));
Department 백엔드 = departmentRepository.save(new Department(null, BACKEND, FOURTH));
Department 안드로이드 = departmentRepository.save(
new Department(null, ANDROID, FOURTH));
departmentMemberRepository.save(new DepartmentMember(null, member, 백엔드));
departmentMemberRepository.save(new DepartmentMember(null, member, 프론트엔드));
departmentMemberRepository.save(new DepartmentMember(null, member, 안드로이드));
}

private Long 미션_등록함(MissionRequest request) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,13 +86,13 @@ public List<ArticleResponse> getFilteredArticles(final LoginMember member,
final ArticleFilterType course,
final boolean onlyBookmarked) {
if (member.isMember()) {
return articleRepository.findArticlesByCourseAndMember(course.getGroupName(),
return articleRepository.findArticlesByCourseAndMember(course.getPartName(),
member.getId(), onlyBookmarked).stream()
.map(article -> ArticleResponse.of(article, member.getId()))
.collect(toList());
}

return articleRepository.findArticlesByCourse(course.getGroupName()).stream()
return articleRepository.findArticlesByCourse(course.getPartName()).stream()
.map(article -> ArticleResponse.of(article, member.getId()))
.collect(toList());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ public enum ArticleFilterType {
BACKEND("백엔드"),
FRONTEND("프론트엔드");

private final String groupName;
private final String partName;

ArticleFilterType(String groupName) {
this.groupName = groupName;
ArticleFilterType(String partName) {
this.partName = partName;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,18 @@ public interface ArticleRepository extends JpaRepository<Article, Long> {
Optional<Article> findFetchLikeById(@Param("id") final Long id);

@Query("SELECT DISTINCT a FROM Article a " +
"JOIN GroupMember gm ON a.member.id = gm.member.id " +
"JOIN gm.group mg " +
"WHERE mg.name LIKE %:course " +
"JOIN DepartmentMember dm ON dm.member.id = dm.member.id " +
"JOIN dm.department d " +
"WHERE d.part = :course " +
"ORDER by a.createdAt desc")
List<Article> findArticlesByCourse(@Param("course") String course);

@Query("SELECT DISTINCT a FROM Article a " +
"JOIN GroupMember gm ON a.member.id = gm.member.id " +
"JOIN gm.group mg " +
"JOIN DepartmentMember dm ON a.member.id = dm.member.id " +
"JOIN dm.department d " +
"LEFT JOIN a.articleBookmarks.articleBookmarks ab " +
"LEFT JOIN a.articleLikes.articleLikes al " +
"WHERE mg.name LIKE %:course AND (:onlyBookmarked = false OR (:onlyBookmarked = true and ab.memberId = :memberId))" +
"WHERE d.part = :course AND (:onlyBookmarked = false OR (:onlyBookmarked = true and ab.memberId = :memberId))" +
"ORDER by a.createdAt desc")
List<Article> findArticlesByCourseAndMember(@Param("course") String course,
@Param("memberId") Long memberId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ public enum BadRequestCode {
ARTICLE_IMAGE_URL_OVER_LENGTH_EXCEPTION(12007, "ARTICLE_IMAGE_URL_OVER_LENGTH_EXCEPTION"),
ARTICLE_INVALID_URL_EXCEPTION(12008, "ARTICLE_INVALID_URL_EXCEPTION"),
UNVALIDATED_MEMBER_EXCEPTION(12009, "UNVALIDATED_MEMBER_EXCEPTION");

private int code;
private String message;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package wooteco.prolog.member.application;

import java.util.List;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import wooteco.prolog.member.domain.DepartmentMember;
import wooteco.prolog.member.domain.repository.DepartmentMemberRepository;

@Service
@AllArgsConstructor
@Transactional(readOnly = true)
public class DepartmentMemberService {

private DepartmentMemberRepository departmentMemberRepository;

public List<DepartmentMember> findDepartmentMemberByDepartmentId(Long departmentId) {
return departmentMemberRepository.findByDepartmentId(departmentId);
}

}

This file was deleted.

40 changes: 40 additions & 0 deletions backend/src/main/java/wooteco/prolog/member/domain/Department.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package wooteco.prolog.member.domain;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Department {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Enumerated(value = EnumType.STRING)
private Part part;

@Enumerated(value = EnumType.STRING)
private Term term;

public Department(Long id, Part part, Term term) {
this.id = id;
this.part = part;
this.term = term;
}

public Department(Long id, String part, String term) {
this.id = id;
this.part = Part.getPartByName(part);
this.term = Term.getTermByName(term);
}

public Part getPart() {
return part;
}

}
Loading

0 comments on commit d07b943

Please sign in to comment.