Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/refactor/143-written-checklist-r…
Browse files Browse the repository at this point in the history
…ead' into dev-be

# Conflicts:
#	backend/bang-ggood/src/main/java/com/bang_ggood/category/dto/response/CategoryQuestionsResponse.java
#	backend/bang-ggood/src/main/java/com/bang_ggood/category/dto/response/WrittenCategoryQuestionsResponse.java
#	backend/bang-ggood/src/main/java/com/bang_ggood/checklist/controller/ChecklistController.java
#	backend/bang-ggood/src/main/java/com/bang_ggood/checklist/dto/response/ChecklistQuestionsResponse.java
#	backend/bang-ggood/src/main/java/com/bang_ggood/checklist/dto/response/QuestionResponse.java
#	backend/bang-ggood/src/main/java/com/bang_ggood/checklist/dto/response/WrittenChecklistResponse.java
#	backend/bang-ggood/src/main/java/com/bang_ggood/checklist/dto/response/WrittenQuestionResponse.java
#	backend/bang-ggood/src/main/java/com/bang_ggood/checklist/service/ChecklistService.java
#	backend/bang-ggood/src/main/resources/schema.sql
#	backend/bang-ggood/src/test/java/com/bang_ggood/checklist/ChecklistFixture.java
#	backend/bang-ggood/src/test/java/com/bang_ggood/checklist/controller/ChecklistE2ETest.java
#	backend/bang-ggood/src/test/java/com/bang_ggood/checklist/service/ChecklistServiceTest.java
#	backend/bang-ggood/src/test/resources/schema-test.sql
  • Loading branch information
JINU-CHANG committed Jul 30, 2024
2 parents bb2de37 + 87ee8cd commit e38d09d
Show file tree
Hide file tree
Showing 18 changed files with 203 additions and 28 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,18 @@
package com.bang_ggood.category.dto.response;

import com.bang_ggood.category.domain.Category;
import com.bang_ggood.checklist.dto.response.WrittenQuestionResponse;

import java.util.List;

public record WrittenCategoryQuestionsResponse(Integer categoryId, String categoryName, List<WrittenQuestionResponse> questions) {
public record WrittenCategoryQuestionsResponse(Integer categoryId, String categoryName,
List<WrittenQuestionResponse> questions) {

public static WrittenCategoryQuestionsResponse of(Category category, List<WrittenQuestionResponse> questions) {
return new WrittenCategoryQuestionsResponse(
category.getId(),
category.getName(),
questions
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import com.bang_ggood.checklist.dto.response.WrittenChecklistResponse;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
Expand All @@ -30,4 +32,9 @@ public ResponseEntity<Void> createChecklist(@Valid @RequestBody ChecklistCreateR
public ResponseEntity<ChecklistQuestionsResponse> readChecklistQuestions() {
return ResponseEntity.ok(checklistService.readChecklistQuestions());
}

@GetMapping("/checklists/{id}")
public ResponseEntity<WrittenChecklistResponse> readChecklistById(@PathVariable long id) {
return ResponseEntity.ok(checklistService.readChecklistById(id));
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package com.bang_ggood.checklist.dto.request;

import com.bang_ggood.room.domain.Room;
import com.bang_ggood.room.dto.RoomCreateRequest;
import com.bang_ggood.room.dto.request.RoomCreateRequest;
import jakarta.validation.Valid;

import java.util.List;

public record ChecklistCreateRequest(@Valid RoomCreateRequest room, List<Integer> options,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.bang_ggood.checklist.dto.response;

import com.bang_ggood.checklist.domain.Checklist;

import java.util.List;

public record ChecklistComparisonReadResponse(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.bang_ggood.checklist.dto.response;

import com.bang_ggood.checklist.domain.Checklist;

import java.time.LocalDateTime;
import java.util.List;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,15 @@
package com.bang_ggood.checklist.dto.response;

import com.bang_ggood.checklist.domain.ChecklistQuestion;

public record WrittenQuestionResponse(Integer questionId, String title, String subtitle, String answer) {

public static WrittenQuestionResponse of(ChecklistQuestion checklistQuestion) {
return new WrittenQuestionResponse(
checklistQuestion.getQuestion().getId(),
checklistQuestion.getQuestion().getTitle(),
checklistQuestion.getQuestion().getSubtitle(),
checklistQuestion.getGrade().name()
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public interface ChecklistRepository extends JpaRepository<Checklist, Long> {
Optional<Checklist> findById(long id);

default Checklist getById(long id) {
return findById(id).orElseThrow(() -> new BangggoodException(ExceptionCode.USER_NOT_FOUND));
return findById(id).orElseThrow(() -> new BangggoodException(ExceptionCode.CHECKLIST_NOT_FOUND));
}

List<Checklist> findByUser(User user);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.bang_ggood.category.dto.response.WrittenCategoryQuestionsResponse;
import com.bang_ggood.checklist.dto.response.WrittenChecklistResponse;
import com.bang_ggood.checklist.dto.response.WrittenQuestionResponse;

@Service
public class ChecklistService {

Expand Down Expand Up @@ -147,4 +151,41 @@ private void validateQuestionInvalid(List<QuestionCreateRequest> questions) {
}
}
}

@Transactional
public WrittenChecklistResponse readChecklistById(long id) {
Checklist checklist = checklistRepository.getById(id);
WrittenRoomResponse writtenRoomResponse = WrittenRoomResponse.of(checklist);

List<Integer> optionIds = readOptionsByChecklistId(id);

List<WrittenCategoryQuestionsResponse> writtenCategoryQuestionsResponses =
readCategoryQuestionsByChecklistId(id);

return new WrittenChecklistResponse(writtenRoomResponse, optionIds, writtenCategoryQuestionsResponses);
}

private List<Integer> readOptionsByChecklistId(long checklistId) {
return checklistOptionRepository.findByChecklistId(checklistId)
.stream()
.map(ChecklistOption::getOptionId)
.toList();
}

private List<WrittenCategoryQuestionsResponse> readCategoryQuestionsByChecklistId(long checklistId) {
List<ChecklistQuestion> checklistQuestions = checklistQuestionRepository.findByChecklistId(checklistId);
return Arrays.stream(Category.values())
.map(category -> readQuestionsByCategory(category, checklistQuestions))
.collect(Collectors.toList());
}

private WrittenCategoryQuestionsResponse readQuestionsByCategory(Category category,
List<ChecklistQuestion> checklistQuestions) {
List<WrittenQuestionResponse> writtenQuestionResponses =
Question.filter(category, checklistQuestions).stream()
.map(WrittenQuestionResponse::of)
.collect(Collectors.toList());

return WrittenCategoryQuestionsResponse.of(category, writtenQuestionResponses);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.bang_ggood.room.dto;
package com.bang_ggood.room.dto.request;

import com.bang_ggood.room.domain.Room;
import jakarta.validation.constraints.NotNull;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.bang_ggood.room.dto.response;

import com.bang_ggood.checklist.domain.Checklist;

public record WrittenRoomResponse(String name, Integer deposit, Integer rent, Integer contractTerm, Integer floor,
String address, String station, Integer walkingTime, String realEstate) {

public static WrittenRoomResponse of(Checklist checklist) {
return new WrittenRoomResponse(checklist.getRoomName(), checklist.getDeposit(), checklist.getRent(),
checklist.getContractTerm(), checklist.getRoomFloor(), checklist.getRoomAddress(),
checklist.getRoomStation(), checklist.getRoomWalkingTime(), checklist.getRealEstate());
}
}
10 changes: 0 additions & 10 deletions backend/bang-ggood/src/main/resources/schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -64,16 +64,6 @@ CREATE TABLE checklist_question
);


CREATE TABLE test_entity
(
id bigint generated by default as identity,
name varchar(255) not null,
created_at TIMESTAMP not null,
modified_at TIMESTAMP not null,
primary key (id)
);


CREATE TABLE category_priority
(
id bigint generated by default as identity,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,20 @@
package com.bang_ggood.checklist;

import com.bang_ggood.checklist.domain.Checklist;
import com.bang_ggood.checklist.dto.request.ChecklistCreateRequest;
import com.bang_ggood.checklist.dto.request.QuestionCreateRequest;
import com.bang_ggood.room.RoomFixture;
import com.bang_ggood.user.domain.User;
import java.util.List;

public class ChecklistFixture {

public static final Checklist checklist = new Checklist(
new User(1L, "방방이"),
RoomFixture.ROOM,
1000, 50, 12, "방끗공인중개사"
);

public static final QuestionCreateRequest QUESTION_1_CREATE_REQUEST = new QuestionCreateRequest(
1, "GOOD"
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,20 @@
import io.restassured.http.ContentType;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import com.bang_ggood.checklist.dto.response.WrittenChecklistResponse;
import com.bang_ggood.checklist.repository.ChecklistRepository;
import com.bang_ggood.room.RoomFixture;
import com.bang_ggood.room.repository.RoomRepository;
import org.junit.jupiter.api.Assertions;
import org.springframework.beans.factory.annotation.Autowired;

public class ChecklistE2ETest extends AcceptanceTest {

@Autowired
private ChecklistRepository checklistRepository;
@Autowired
private RoomRepository roomRepository;

@DisplayName("체크리스트 방 정보 작성 성공")
@Test
void createChecklist() {
Expand Down Expand Up @@ -71,4 +82,24 @@ void readChecklistQuestions() {
assertThat(checklistQuestionsResponse.categories().size()).isEqualTo(Category.values().length);
}

@DisplayName("작성된 체크리스트 조회 성공")
@Test
void readChecklistById() {
//체크리스트 저장
roomRepository.save(RoomFixture.ROOM);
checklistRepository.save(ChecklistFixture.checklist);

WrittenChecklistResponse writtenChecklistResponse = RestAssured.given().log().all()
.contentType(ContentType.JSON)
.when().get("/checklists/1")
.then().log().all()
.statusCode(200)
.extract()
.as(WrittenChecklistResponse.class);

Assertions.assertAll(
() -> assertThat(writtenChecklistResponse.room().name()).isEqualTo("살기 좋은 방"),
() -> assertThat(writtenChecklistResponse.room().address()).isEqualTo("인천광역시 부평구")
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.bang_ggood.checklist.option;

import static org.assertj.core.api.Assertions.assertThat;

import com.bang_ggood.checklist.domain.Option;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

class OptionTest {

@DisplayName("옵션 포함 성공: 포함하는 경우")
@Test
void contains_true() {
assertThat(Option.contains(1)).isTrue();
}

@DisplayName("옵션 포함 성공 : 포함하지 않는 경우")
@Test
void contains_false() {
assertThat(Option.contains(9999)).isFalse();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,13 @@
import com.bang_ggood.checklist.domain.Question;
import com.bang_ggood.checklist.dto.response.ChecklistQuestionsResponse;
import com.bang_ggood.checklist.repository.ChecklistQuestionRepository;
import com.bang_ggood.checklist.repository.ChecklistRepository;
import com.bang_ggood.exception.BangggoodException;
import com.bang_ggood.exception.ExceptionCode;
import com.bang_ggood.checklist.dto.response.WrittenChecklistResponse;
import com.bang_ggood.room.RoomFixture;
import com.bang_ggood.room.repository.RoomRepository;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
Expand All @@ -21,7 +26,12 @@ class ChecklistServiceTest extends IntegrationTestSupport {
@Autowired
private ChecklistService checklistService;
@Autowired
private ChecklistRepository checklistRepository;
@Autowired
private ChecklistQuestionRepository checklistQuestionRepository;
@Autowired
private RoomRepository roomRepository;


@DisplayName("체크리스트 방 정보 작성 성공")
@Test
Expand Down Expand Up @@ -87,4 +97,29 @@ void readChecklistQuestions() {
assertThat(checklistQuestionsResponse.categories().size()).isEqualTo(Category.values().length);
}

@DisplayName("작성된 체크리스트 조회 성공")
@Test
void readChecklistById() {
// given
roomRepository.save(RoomFixture.ROOM);
checklistRepository.save(ChecklistFixture.checklist);

// when
WrittenChecklistResponse writtenChecklistResponse = checklistService.readChecklistById(1L);

// then
Assertions.assertAll(
() -> assertThat(writtenChecklistResponse.room().name()).isEqualTo("살기 좋은 방"),
() -> assertThat(writtenChecklistResponse.room().address()).isEqualTo("인천광역시 부평구")
);
}

@DisplayName("작성된 체크리스트 조회 실패 : 체크리스트가 존재하지 않는 id인 경우")
@Test
void readChecklistById_invalidChecklistId_exception() {
// given & when & then
assertThatThrownBy(() -> checklistService.readChecklistById(0))
.isInstanceOf(BangggoodException.class)
.hasMessage(ExceptionCode.CHECKLIST_NOT_FOUND.getMessage());
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
package com.bang_ggood.room;

import com.bang_ggood.room.dto.RoomCreateRequest;
import com.bang_ggood.room.domain.Room;
import com.bang_ggood.room.dto.request.RoomCreateRequest;

public class RoomFixture {

public static final Room ROOM = new Room(
"살기 좋은 방", 3, "인천광역시 부평구", "잠실", 10
);

public static final RoomCreateRequest ROOM_CREATE_REQUEST = new RoomCreateRequest(
"방이름", 1000, 50, 12, 3,
"부산광역시 루터회관", "잠실역", 10, "방끗공인중개사"
Expand Down
11 changes: 11 additions & 0 deletions backend/bang-ggood/src/test/resources/schema-test.sql
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,17 @@ CREATE TABLE checklist_question
FOREIGN KEY (checklist_id) REFERENCES checklist (id)
);

CREATE TABLE if not exists category_priority
(
id bigint generated by default as identity,
category_id INTEGER not null,
user_id bigint not null,
created_at TIMESTAMP not null,
modified_at TIMESTAMP not null,
primary key (id),
foreign key (user_id) references users
);


CREATE TABLE test_entity
(
Expand Down

0 comments on commit e38d09d

Please sign in to comment.