Skip to content
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
2 changes: 1 addition & 1 deletion be/config
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@
import org.springframework.transaction.annotation.Transactional;

@Slf4j
@Transactional(readOnly = true)
@Service
@Transactional(readOnly = true)
public class QuestionService {


public QuestionResponse find() {
public QuestionResponse findById(Long questionId) {
log.debug("[오늘의 문장 조회] questionId = {}", questionId);
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@
@Getter
public class QuestionResponse {

@Schema(type = "String", description = "문장 주제, NOT NULL")
@Schema(type = "Long", description = "오늘의 문장 ID, NOT NULL")
private final Long questionId;

@Schema(type = "String", description = "문장 제목, NOT NULL")
private final String title;

@Schema(type = "String", description = "음성 녹음 URL, NOT NULL")
Expand All @@ -15,7 +18,8 @@ public class QuestionResponse {
@Schema(type = "String", description = "음성 텍스트 URL, NOT NULL")
private final String voiceText;

public QuestionResponse(String title, String voidRecord, String voiceText) {
public QuestionResponse(Long questionId, String title, String voidRecord, String voiceText) {
this.questionId = questionId;
this.title = title;
this.voidRecord = voidRecord;
this.voiceText = voiceText;
Expand Down
34 changes: 34 additions & 0 deletions be/src/main/java/com/example/be/core/domain/question/Question.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.example.be.core.domain.question;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;

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

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "question_id")
private Long id;

@Lob
private String voiceRecord;

@Lob
private String voiceText;

public Question(Long id, String voiceRecord, String voiceText) {
this.id = id;
this.voiceRecord = voiceRecord;
this.voiceText = voiceText;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.example.be.core.domain.question;

import com.example.be.core.domain.member.Member;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;

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

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "subject_question_id")
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "subject_id")
private Member member;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "question_id")
private Question question;

public QuestionSubject(Member member, Question question) {
this.member = member;
this.question = question;
}
}
28 changes: 28 additions & 0 deletions be/src/main/java/com/example/be/core/domain/question/Subject.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.example.be.core.domain.question;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;

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

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "subject_id")
private Long id;

private String content;

public Subject(Long id, String content) {
this.id = id;
this.content = content;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.example.be.core.domain.question;

import com.example.be.core.domain.member.Member;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;

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

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "subject_member_id")
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id")
private Member member;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "subject_id")
private Subject subject;

public SubjectMember(Member member, Subject subject) {
this.member = member;
this.subject = subject;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public QuestionController(QuestionService questionService) {
@GetMapping
@ApiOperation(value = "오늘의 문장 조회입니다.")
public BaseResponse<QuestionResponse> find() {
QuestionResponse response = questionService.find();
QuestionResponse response = questionService.findById(1L);
return new BaseResponse<>(FIND_QUESTION_SUCCESS, response);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.example.be.core.web.question;

import com.example.be.core.application.QuestionService;
import com.example.be.core.web.QuestionController;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.BeforeEach;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.filter.CharacterEncodingFilter;

@WebMvcTest(QuestionController.class)
public abstract class InitQuestionControllerTest {

@Autowired
protected MockMvc mockMvc;

@MockBean
protected QuestionService questionService;

@Autowired
protected ObjectMapper objectMapper;

@BeforeEach
void init(WebApplicationContext wc) {
this.mockMvc = MockMvcBuilders.webAppContextSetup(wc)
.addFilter(new CharacterEncodingFilter("UTF-8", true))
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package com.example.be.core.web.question;

import static com.example.be.common.response.ResponseCodeAndMessages.FIND_QUESTION_SUCCESS;
import static org.mockito.ArgumentMatchers.refEq;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import com.example.be.common.response.BaseResponse;
import com.example.be.core.application.dto.response.QuestionResponse;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.ResultActions;

public class QuestionControllerFindTest extends InitQuestionControllerTest{

@Nested
@DisplayName("오늘의 문장 조회할 때")
class QuestionFindTest {

@Nested
@DisplayName("정상적인 요청이라면")
class NormalTest {

@Test
@DisplayName("오늘의 문장 조회 시, 해당 ID를 가진 오늘의 문장이 조회된다.")
void find_question() throws Exception {
//given
Long questionId = 1L;
QuestionResponse response = new QuestionResponse(questionId, "어떤 영화를 가장 좋아하세요?", "rulsjaklsjrlkrjslarjsalrkj", "rulsjaklsjrlkrjslarjsalrkj");
BaseResponse<QuestionResponse> baseResponse = new BaseResponse<>(FIND_QUESTION_SUCCESS, response);

when(questionService.findById(refEq(questionId)))
.thenReturn(response);

//when
ResultActions resultActions = mockMvc.perform(get("/question")
.accept(MediaType.APPLICATION_JSON_VALUE)
.contentType(MediaType.APPLICATION_JSON_VALUE));

//then
resultActions.andExpect(status().isOk())
.andExpect(content().string(objectMapper.writeValueAsString(baseResponse)));

verify(questionService).findById(refEq(questionId));
}
}
}

}