Skip to content

Commit 5b7012a

Browse files
authored
fix: spaceId 주입 오류 및 마감기한 설정 오류 해결 (#415)
* fix: spaceId 주입되지 않은 오류 해결 * fix: 회고 상태가 DONE 인 경우 같은 로직에서 마감기한 업데이트 하도록 설정 * test: 마감기한이 미지정이라면, 마감기한이 현재 시간으로 설정된다.
1 parent 03a06c8 commit 5b7012a

File tree

10 files changed

+145
-49
lines changed

10 files changed

+145
-49
lines changed

layer-admin/src/main/java/org/layer/admin/space/service/AdminSpaceService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public void saveSpaceHistory(CreateSpaceEvent event) {
5959
.eventTime(event.eventTime())
6060
.memberId(event.memberId())
6161
.category(AdminSpaceCategory.from(event.category()))
62+
.spaceId(event.spaceId())
6263
.build();
6364

6465
adminSpaceRepository.save(spaceHistory);

layer-api/src/main/java/org/layer/domain/answer/service/AnswerService.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,8 @@ public void create(AnswerListCreateRequest request, Long spaceId, Long retrospec
105105

106106
// 마지막 답변인 경우 -> ai 분석 실행
107107
if (answers.getWriteCount(retrospectId) == team.getTeamMemberCount()) {
108-
retrospect.completeRetrospectAndStartAnalysis();
109-
110-
if (!retrospect.hasDeadLine()) {
111-
retrospect.updateDeadLine(time.now());
112-
}
108+
retrospect.completeRetrospectAndStartAnalysis(time.now());
113109
retrospectRepository.save(retrospect);
114-
115110
eventPublisher.publishEvent(AIAnalyzeStartEvent.of(retrospectId));
116111
}
117112

layer-api/src/main/java/org/layer/domain/retrospect/service/RetrospectService.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -196,13 +196,11 @@ public void closeRetrospect(Long spaceId, Long retrospectId, Long memberId) {
196196

197197
Retrospect retrospect = retrospectRepository.findByIdOrThrow(retrospectId);
198198

199-
retrospect.completeRetrospectAndStartAnalysis();
199+
retrospect.completeRetrospectAndStartAnalysis(time.now());
200200
if (retrospect.getAnalysisStatus().equals(AnalysisStatus.DONE)) {
201-
// 비정상 케이스
202201
log.error("비정상적인 오류입니다.");
203202
return;
204203
}
205-
206204
retrospectRepository.save(retrospect);
207205

208206
// 회고 ai 분석 시작

layer-api/src/main/java/org/layer/domain/space/service/SpaceService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ private void publishCreateSpaceEvent(final Space space, final Long memberId) {
110110
random.generateRandomValue(),
111111
memberId,
112112
time.now(),
113+
space.getId(),
113114
space.getName(),
114115
space.getCategory().name()
115116
));

layer-api/src/test/java/org/layer/domain/answer/service/AnswerServiceTest.java

Lines changed: 59 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,17 @@
22

33
import static org.assertj.core.api.Assertions.*;
44

5-
import org.assertj.core.api.Assertions;
5+
import java.util.List;
6+
67
import org.junit.jupiter.api.DisplayName;
78
import org.junit.jupiter.api.Nested;
89
import org.junit.jupiter.api.Test;
10+
import org.layer.domain.answer.controller.dto.request.AnswerCreateRequest;
11+
import org.layer.domain.answer.controller.dto.request.AnswerListCreateRequest;
912
import org.layer.domain.answer.controller.dto.response.AnswerListGetResponse;
13+
import org.layer.domain.retrospect.entity.Retrospect;
14+
import org.layer.domain.retrospect.entity.RetrospectStatus;
15+
import org.layer.domain.retrospect.repository.RetrospectRepository;
1016
import org.springframework.beans.factory.annotation.Autowired;
1117
import org.springframework.boot.test.context.SpringBootTest;
1218
import org.springframework.test.context.ActiveProfiles;
@@ -22,6 +28,9 @@ class AnswerServiceTest {
2228
@Autowired
2329
private AnswerService answerService;
2430

31+
@Autowired
32+
private RetrospectRepository retrospectRepository;
33+
2534
@Nested
2635
@SqlGroup({
2736
@Sql(value = "/sql/answer-service-test-data.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD),
@@ -43,15 +52,59 @@ void getAnalyzeAnswersTest_1() {
4352

4453
// then
4554
assertThat(analyzeAnswers).isNotNull();
46-
assertThat(analyzeAnswers.questions()).hasSize(2);
55+
assertThat(analyzeAnswers.questions()).hasSize(4);
4756
assertThat(analyzeAnswers.questions().get(0).questionContent()).isEqualTo("질문1");
48-
assertThat(analyzeAnswers.questions().get(0).answers().get(0).answerContent()).isEqualTo("회고답변 1");
49-
assertThat(analyzeAnswers.questions().get(1).answers().get(0).answerContent()).isEqualTo("회고답변 2");
57+
assertThat(analyzeAnswers.questions().get(0).answers().get(0).answerContent()).isEqualTo("5");
58+
assertThat(analyzeAnswers.questions().get(1).answers().get(0).answerContent()).isEqualTo("80");
5059

5160
assertThat(analyzeAnswers.individuals()).hasSize(1);
5261
assertThat(analyzeAnswers.individuals().get(0).name()).isEqualTo("홍길동");
53-
assertThat(analyzeAnswers.individuals().get(0).answers().get(0).answerContent()).isEqualTo("회고답변 1");
54-
assertThat(analyzeAnswers.individuals().get(0).answers().get(1).answerContent()).isEqualTo("회고답변 2");
62+
assertThat(analyzeAnswers.individuals().get(0).answers().get(0).answerContent()).isEqualTo("5");
63+
assertThat(analyzeAnswers.individuals().get(0).answers().get(1).answerContent()).isEqualTo("80");
64+
}
65+
}
66+
67+
@Nested
68+
@SqlGroup({
69+
@Sql(value = "/sql/answer-service-test-data.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD),
70+
@Sql(value = "/sql/delete-all-test-data.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
71+
72+
})
73+
class 회고_작성 {
74+
@Test
75+
@DisplayName("특정 회고 작성 후에 작성된 답변이 팀 인원 수와 같다면, 회고 마감 상태로 변경된다."
76+
+ "또한 만약 마감기한이 미지정이라면, 마감기한이 현재 시간으로 설정된다.")
77+
void createAnswerTest_1() {
78+
// given
79+
Long spaceId = 1L;
80+
Long retrospectId = 1L;
81+
Long memberId = 2L;
82+
83+
AnswerCreateRequest request1 = new AnswerCreateRequest(
84+
1L, "number", "5"
85+
);
86+
87+
AnswerCreateRequest request2 = new AnswerCreateRequest(
88+
2L, "range", "100"
89+
);
90+
91+
AnswerCreateRequest request3 = new AnswerCreateRequest(
92+
3L, "plain_text", "답변1"
93+
);
94+
95+
AnswerCreateRequest request4 = new AnswerCreateRequest(
96+
4L, "plain_text", "답변2"
97+
);
98+
99+
// when
100+
answerService.create(new AnswerListCreateRequest(
101+
List.of(request1, request2, request3, request4), false),
102+
spaceId, retrospectId, memberId);
103+
104+
// then
105+
Retrospect retrospect = retrospectRepository.findByIdOrThrow(retrospectId);
106+
assertThat(retrospect.getRetrospectStatus()).isEqualTo(RetrospectStatus.DONE);
107+
assertThat(retrospect.getDeadline()).isNotNull();
55108
}
56109
}
57110

layer-api/src/test/java/org/layer/domain/retrospect/service/RetrospectServiceTest.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,14 @@
1010
import org.junit.jupiter.api.Nested;
1111
import org.junit.jupiter.api.Test;
1212
import org.layer.domain.fixture.MemberFixture;
13+
import org.layer.domain.fixture.RetrospectFixture;
1314
import org.layer.domain.fixture.SpaceFixture;
1415
import org.layer.domain.member.entity.Member;
1516
import org.layer.domain.member.repository.MemberRepository;
1617
import org.layer.domain.question.enums.QuestionType;
1718
import org.layer.domain.retrospect.controller.dto.request.QuestionCreateRequest;
1819
import org.layer.domain.retrospect.controller.dto.request.RetrospectCreateRequest;
20+
import org.layer.domain.retrospect.entity.AnalysisStatus;
1921
import org.layer.domain.retrospect.entity.Retrospect;
2022
import org.layer.domain.retrospect.entity.RetrospectStatus;
2123
import org.layer.domain.retrospect.repository.RetrospectRepository;
@@ -80,8 +82,32 @@ void createRetrospectTest_1() {
8082
}
8183

8284
@Nested
83-
class 회고_마감{
85+
class 회고_마감 {
86+
@Test
87+
@DisplayName("마감기한이 미지정된 회고를 마감할 경우, 마감기한이 현재시간으로 설정된다.")
88+
void closeRetrospectWithoutDeadline() {
89+
// given
90+
Member member = MemberFixture.createFixture("social-1");
91+
member = memberRepository.save(member);
92+
93+
Space space = SpaceFixture.createFixture(member.getId(), 1L);
94+
spaceRepository.save(space);
95+
memberSpaceRelationRepository.save(new MemberSpaceRelation(member.getId(), space));
8496

97+
Retrospect retrospect = RetrospectFixture.createFixture(space.getId(),
98+
RetrospectStatus.PROCEEDING, AnalysisStatus.NOT_STARTED, null);
99+
100+
retrospect = retrospectRepository.save(retrospect);
101+
102+
// when
103+
retrospectService.closeRetrospect(space.getId(), retrospect.getId(), member.getId());
104+
105+
// then
106+
Retrospect savedRetrospect = retrospectRepository.findByIdOrThrow(retrospect.getId());
107+
108+
Assertions.assertThat(savedRetrospect.getDeadline()).isNotNull();
109+
Assertions.assertThat(retrospect.getDeadline()).isBeforeOrEqualTo(LocalDateTime.now());
110+
}
85111
}
86112

87113
}

layer-api/src/test/resources/sql/answer-service-test-data.sql

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,24 @@ VALUES
1212
('2024-12-27 00:00:00', '2024-12-27 00:00:00', 1, 1),
1313
('2024-12-27 00:00:00', '2024-12-27 00:00:00', 2, 1);
1414

15-
INSERT INTO question (created_at, updated_at, content, form_id, question_order, question_owner, question_type, retrospect_id)
15+
INSERT INTO retrospect (id, created_at, updated_at, space_id, title, introduction, retrospect_status,
16+
analysis_status, deadline)
1617
VALUES
17-
('2024-12-27 00:00:00', '2024-12-27 00:00:00', '질문1', 1, 1, 'INDIVIDUAL', 'PLAIN_TEXT', 1),
18-
('2024-12-27 00:00:00', '2024-12-27 00:00:00', '질문2', 1, 2, 'TEAM', 'PLAIN_TEXT', 1);
18+
(1, '2024-12-27 00:00:00', '2024-12-27 00:00:00', 1, '2024년 12월 회고', '2024년 12월 회고를 위한 공간입니다.', 'PROCEEDING',
19+
'NOT_STARTED', null);
1920

20-
INSERT INTO answer (created_at, updated_at, answer_status, content, member_id, question_id, retrospect_id)
21+
INSERT INTO question (id, created_at, updated_at, content, form_id, question_order, question_owner, question_type, retrospect_id)
2122
VALUES
22-
('2024-12-27 00:00:00', '2024-12-27 00:00:00', 'DONE', '회고답변 1', 1, 1, 1),
23-
('2024-12-27 00:00:00', '2024-12-27 00:00:00', 'TEMPORARY', '회고임시답변', 1, 2, 1),
24-
('2024-12-27 00:00:00', '2024-12-27 00:00:00', 'DONE', '회고답변 2', 1, 2, 1);
23+
(1, '2024-12-27 00:00:00', '2024-12-27 00:00:00', '질문1', 1, 1, 'TEAM', 'NUMBER', 1),
24+
(2, '2024-12-27 00:00:00', '2024-12-27 00:00:00', '질문2', 1, 2, 'TEAM', 'RANGER', 1),
25+
(3, '2024-12-27 00:00:00', '2024-12-27 00:00:00', '질문3', 1, 3, 'TEAM', 'PLAIN_TEXT', 1),
26+
(4, '2024-12-27 00:00:00', '2024-12-27 00:00:00', '질문4', 1, 4, 'TEAM', 'PLAIN_TEXT', 1);
27+
28+
INSERT INTO answer (id, created_at, updated_at, answer_status, content, member_id, question_id, retrospect_id)
29+
VALUES
30+
(1, '2024-12-27 00:00:00', '2024-12-27 00:00:00', 'DONE', '5', 1, 1, 1),
31+
(2, '2024-12-27 00:00:00', '2024-12-27 00:00:00', 'TEMPORARY', '80', 1, 2, 1),
32+
(3, '2024-12-27 00:00:00', '2024-12-27 00:00:00', 'DONE', '80', 1, 2, 1),
33+
(4, '2024-12-27 00:00:00', '2024-12-27 00:00:00', 'DONE', '답변1', 1, 3, 1),
34+
(5, '2024-12-27 00:00:00', '2024-12-27 00:00:00', 'DONE', '답변2', 1, 4, 1);
2535

layer-batch/src/main/java/org/layer/batch/retrospect/RetrospectScheduler.java

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,35 +21,35 @@
2121
@Slf4j
2222
public class RetrospectScheduler {
2323

24-
private final RetrospectRepository retrospectRepository;
25-
private final ApplicationEventPublisher eventPublisher;
24+
private final RetrospectRepository retrospectRepository;
25+
private final ApplicationEventPublisher eventPublisher;
2626

27-
private final Time time;
27+
private final Time time;
2828

29-
/**
30-
* @note: 1시간마다 실행된다.
31-
*/
32-
@Scheduled(cron = "0 0 * * * *")
33-
public void updateRetrospectStatusToDone() {
34-
log.info("Batch Module: Batch Start : updateRetrospectStatusToDone");
29+
/**
30+
* @note: 1시간마다 실행된다.
31+
*/
32+
@Scheduled(cron = "0 0 * * * *")
33+
public void updateRetrospectStatusToDone() {
34+
log.info("Batch Module: Batch Start : updateRetrospectStatusToDone");
3535

36-
LocalDateTime now = time.now();
36+
LocalDateTime now = time.now();
3737

38-
List<Retrospect> retrospects = retrospectRepository.findAllByDeadlineBeforeAndRetrospectStatus(
39-
now, RetrospectStatus.PROCEEDING);
38+
List<Retrospect> retrospects = retrospectRepository.findAllByDeadlineBeforeAndRetrospectStatus(
39+
now, RetrospectStatus.PROCEEDING);
4040

41-
updateRetrospectAndPublishEvent(retrospects);
41+
updateRetrospectAndPublishEvent(retrospects);
4242

43-
log.info("Batch Module: Batch End : updateRetrospectStatusToDone");
44-
}
43+
log.info("Batch Module: Batch End : updateRetrospectStatusToDone");
44+
}
4545

46-
@Transactional
47-
public void updateRetrospectAndPublishEvent(List<Retrospect> retrospects) {
48-
retrospects.forEach(Retrospect::completeRetrospectAndStartAnalysis);
49-
retrospectRepository.saveAll(retrospects);
46+
@Transactional
47+
public void updateRetrospectAndPublishEvent(List<Retrospect> retrospects) {
48+
retrospects.forEach(retrospect -> retrospect.completeRetrospectAndStartAnalysis(time.now()));
49+
retrospectRepository.saveAll(retrospects);
5050

51-
retrospects.forEach(retrospect ->
52-
eventPublisher.publishEvent(AIAnalyzeStartEvent.of(retrospect.getId()))
53-
);
54-
}
51+
retrospects.forEach(retrospect ->
52+
eventPublisher.publishEvent(AIAnalyzeStartEvent.of(retrospect.getId()))
53+
);
54+
}
5555
}

layer-domain/src/main/java/org/layer/domain/retrospect/entity/Retrospect.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,13 @@ public void updateRetrospect(String title, String introduction, LocalDateTime de
8787
this.deadline = deadline;
8888
}
8989

90-
public void completeRetrospectAndStartAnalysis(){
90+
public void completeRetrospectAndStartAnalysis(LocalDateTime now){
9191
updateRetrospectStatus(RetrospectStatus.DONE);
9292
updateAnalysisStatus(AnalysisStatus.PROCEEDING);
93+
94+
if(this.deadline == null) {
95+
this.deadline = now;
96+
}
9397
}
9498

9599
public void updateRetrospectStatus(RetrospectStatus retrospectStatus) {

layer-event/src/main/java/org/layer/event/space/CreateSpaceEvent.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,18 @@ public record CreateSpaceEvent(
88
String eventId,
99
Long memberId,
1010
LocalDateTime eventTime,
11+
Long spaceId,
1112
String title,
1213
String category
1314
) implements BaseEvent {
14-
public static CreateSpaceEvent of(String eventId, Long memberId, LocalDateTime eventTime, String title, String category) {
15-
return new CreateSpaceEvent(eventId, memberId, eventTime, title, category);
15+
public static CreateSpaceEvent of(
16+
String eventId,
17+
Long memberId,
18+
LocalDateTime eventTime,
19+
Long spaceId,
20+
String title,
21+
String category
22+
) {
23+
return new CreateSpaceEvent(eventId, memberId, eventTime, spaceId, title, category);
1624
}
1725
}

0 commit comments

Comments
 (0)