Skip to content
Merged
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
10 changes: 9 additions & 1 deletion questions-server/src/docs/asciidoc/index.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -168,4 +168,12 @@ operation::delete-bookmark[snippets='request-headers,query-parameters,http-reque

사용자가 북마크한 문제 목록을 조회합니다.

operation::bookmarked-questions[snippets='request-headers,query-parameters,http-request,http-response,response-fields']
operation::bookmarked-questions[snippets='request-headers,query-parameters,http-request,http-response,response-fields']


[[resources-check-bookmark]]
==== 북마크된 문제 번호 조회

사용자가 북마크한 문제 번호 목록을 조회합니다.

operation::check-bookmark[snippets='request-headers,query-parameters,http-request,http-response,response-fields']
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,9 @@ public PasswordEncoder passwordEncoder() {
}

private final String [] permitArray={
"/exam"
"/exam",
"/certification/{certificationId}/*",
"/subject/{subjectId}/*"
};


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,12 @@ public ResponseEntity<ResponseStatus> deleteBookMark(@RequestHeader("Authorizati
return ResponseEntity.ok().build();
}

@GetMapping("/book-mark")
public ResponseEntity<List<QuestionInfoDto>> checkBookmarkAndQuestions(@RequestHeader("Authorization") String authHeader) {
String username = jwtUtils.extractUsername(authHeader);
return ResponseEntity.ok(userQuestionService.checkBookmarkAndQuestions(username));
}

@GetMapping("/book-mark/question")
public ResponseEntity<List<QuestionDto>> getBookMarkQuestions(@RequestHeader("Authorization") String authHeader,
@RequestParam Long certificationId) {
Expand All @@ -124,4 +130,6 @@ public ResponseEntity<List<QuestionDto>> getBookMarkQuestions(@RequestHeader("Au
}




}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.example.questionsserver.dtos;

public record QuestionInfoDto(Long questionId) {

}
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package com.example.questionsserver.repository.middle.userBookmark;

import com.example.questionsserver.dtos.QuestionDto;
import com.example.questionsserver.dtos.QuestionInfoDto;

import java.util.List;

public interface UserBookmarkRepositoryQuery {
List<QuestionDto> getBookMarkQuestion(String username, Long certificationId);

List<QuestionInfoDto> checkBookmarkAndQuestions(String username);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.example.questionsserver.repository.middle.userBookmark;

import com.example.questionsserver.dtos.QuestionDto;
import com.example.questionsserver.dtos.QuestionInfoDto;
import com.querydsl.core.types.Projections;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
Expand Down Expand Up @@ -32,4 +33,15 @@ public List<QuestionDto> getBookMarkQuestion(String username, Long certification
.where(userBookmark.username.eq(username), certification.id.eq(certificationId))
.fetch();
}

@Override
public List<QuestionInfoDto> checkBookmarkAndQuestions(String username) {
return queryFactory.select(Projections.constructor(QuestionInfoDto.class,
question.id.as("questionId")))
.from(userBookmark)
.join(userBookmark.question, question)
.where(userBookmark.username.eq(username))
.fetch();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.example.questionsserver.dtos.AnswerRecordDto;
import com.example.questionsserver.dtos.AnswerSubmitDTO;
import com.example.questionsserver.dtos.QuestionDto;
import com.example.questionsserver.dtos.QuestionInfoDto;
import com.example.questionsserver.entity.middleTable.UserQuestion;

import java.util.List;
Expand All @@ -19,4 +20,6 @@ public interface UserQuestionService {
List<QuestionDto> getBookMarkQuestion(String username, Long certificationId);

void deleteBookMark(String username, Long questionId);

List<QuestionInfoDto> checkBookmarkAndQuestions(String username);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.example.questionsserver.dtos.AnswerRecordDto;
import com.example.questionsserver.dtos.AnswerSubmitDTO;
import com.example.questionsserver.dtos.QuestionDto;
import com.example.questionsserver.dtos.QuestionInfoDto;
import com.example.questionsserver.entity.Question;
import com.example.questionsserver.entity.middleTable.UserBookmark;
import com.example.questionsserver.entity.middleTable.UserQuestion;
Expand Down Expand Up @@ -106,6 +107,11 @@ public void deleteBookMark(String username, Long questionId) {

}

@Override
public List<QuestionInfoDto> checkBookmarkAndQuestions(String username) {
return userBookmarkRepository.checkBookmarkAndQuestions(username);
}

@Override
@Transactional(readOnly = true)
@Cacheable(value = "userBookmarks", key = "#username + '_' + #certificationId")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -408,6 +408,32 @@ void createBookmark() throws Exception {
));
}


@Test
@DisplayName("북마크 확인 API")
void checkBookmarkAndQuestions() throws Exception {
// given
when(userQuestionService.checkBookmarkAndQuestions(anyString()))
.thenReturn(ExamFixture.createCheckBookmarkAndQuestions());
// when & then
mockMvc.perform(get("/exam/book-mark")
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE)
.header(HttpHeaders.AUTHORIZATION, "Bearer jwt-token-here"))
.andDo(print())
.andExpect(status().isOk())
.andDo(document("check-bookmark",
ApiDocumentUtils.getDocumentRequest(),
ApiDocumentUtils.getDocumentResponse(),
requestHeaders(
headerWithName("Authorization").description("JWT 인증 토큰")
), responseFields(
fieldWithPath("[].questionId").type(JsonFieldType.NUMBER)
.description("문제 ID")
)
));
}

@Test
@DisplayName("북마크 삭제 API")
void deleteBookmark() throws Exception {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.example.questionsserver.entity.middleTable.UserQuestion;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class ExamFixture {
Expand Down Expand Up @@ -62,4 +63,12 @@ public static AnswerRecordDto createAnswerRecord() {
return new AnswerRecordDto(1L, UserQuestion.Status.CORRECT);
}

public static List<QuestionInfoDto> createCheckBookmarkAndQuestions() {
return Collections.singletonList(
new QuestionInfoDto(1L));
}




}
Loading