Skip to content

Commit 7dc9a62

Browse files
authored
feat: 모든 회고 목록 조회 (#439)
* del: 미사용 코드 제거 * feat: 모든 회고 목록 조회 로직 구현
1 parent a532d55 commit 7dc9a62

File tree

8 files changed

+71
-49
lines changed

8 files changed

+71
-49
lines changed

layer-api/src/main/java/org/layer/domain/retrospect/controller/RetrospectApi.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ ResponseEntity<RetrospectCreateResponse> createRetrospect(@PathVariable("spaceId
2828
ResponseEntity<RetrospectListGetResponse> getRetrospects(@PathVariable("spaceId") Long spaceId,
2929
@MemberId Long memberId);
3030

31+
@Operation(summary = "모든 회고 목록 조회", description = "특정 유저의 모든 회고 목록을 보는 기능입니다.")
32+
ResponseEntity<RetrospectListGetResponse> getAllRetrospects(@MemberId Long memberId);
33+
3134
@Operation(summary = "회고 수정", description = "특정 팀 스페이스에서 작성했던 회고를 수정하는 기능입니다.")
3235
ResponseEntity<RetrospectListGetResponse> updateRetrospect(@PathVariable("spaceId") Long spaceId,
3336
@PathVariable("retrospectId") Long retrospectId, @RequestBody @Valid RetrospectUpdateRequest request, @MemberId Long memberId);

layer-api/src/main/java/org/layer/domain/retrospect/controller/RetrospectController.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,12 @@
1414

1515
@RestController
1616
@RequiredArgsConstructor
17-
@RequestMapping("/space/{spaceId}/retrospect")
1817
public class RetrospectController implements RetrospectApi {
1918

2019
private final RetrospectService retrospectService;
2120

2221
@Override
23-
@PostMapping
22+
@PostMapping("/space/{spaceId}/retrospect")
2423
public ResponseEntity<RetrospectCreateResponse> createRetrospect(
2524
@PathVariable("spaceId") Long spaceId,
2625
@RequestBody @Valid RetrospectCreateRequest request,
@@ -32,15 +31,22 @@ public ResponseEntity<RetrospectCreateResponse> createRetrospect(
3231
}
3332

3433
@Override
35-
@GetMapping
34+
@GetMapping("/space/{spaceId}/retrospect")
3635
public ResponseEntity<RetrospectListGetResponse> getRetrospects(@PathVariable("spaceId") Long spaceId,
3736
@MemberId Long memberId) {
3837

3938
return ResponseEntity.ok().body(retrospectService.getRetrospects(spaceId, memberId));
4039
}
4140

4241
@Override
43-
@PatchMapping("/{retrospectId}")
42+
@GetMapping("/retrospects")
43+
public ResponseEntity<RetrospectListGetResponse> getAllRetrospects(@MemberId Long memberId) {
44+
45+
return ResponseEntity.ok().body(retrospectService.getAllRetrospects(memberId));
46+
}
47+
48+
@Override
49+
@PatchMapping("/space/{spaceId}/retrospect/{retrospectId}")
4450
public ResponseEntity<RetrospectListGetResponse> updateRetrospect(@PathVariable("spaceId") Long spaceId,
4551
@PathVariable("retrospectId") Long retrospectId, @RequestBody @Valid RetrospectUpdateRequest request,
4652
@MemberId Long memberId) {
@@ -50,7 +56,7 @@ public ResponseEntity<RetrospectListGetResponse> updateRetrospect(@PathVariable(
5056
}
5157

5258
@Override
53-
@DeleteMapping("/{retrospectId}")
59+
@DeleteMapping("/space/{spaceId}/retrospect/{retrospectId}")
5460
public ResponseEntity<RetrospectListGetResponse> deleteRetrospect(@PathVariable("spaceId") Long spaceId,
5561
@PathVariable("retrospectId") Long retrospectId, @MemberId Long memberId) {
5662

@@ -59,7 +65,7 @@ public ResponseEntity<RetrospectListGetResponse> deleteRetrospect(@PathVariable(
5965
}
6066

6167
@Override
62-
@PatchMapping("/{retrospectId}/close")
68+
@PatchMapping("/space/{spaceId}/retrospect/{retrospectId}/close")
6369
public ResponseEntity<Void> closeRetrospect(
6470
@PathVariable("spaceId") Long spaceId,
6571
@PathVariable("retrospectId") Long retrospectId,

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

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import lombok.RequiredArgsConstructor;
44
import lombok.extern.slf4j.Slf4j;
55

6+
import org.layer.domain.retrospect.dto.SpaceMemberCount;
7+
import org.layer.domain.space.entity.MemberSpaceRelation;
68
import org.layer.event.ai.AIAnalyzeStartEvent;
79
import org.layer.domain.answer.entity.Answers;
810
import org.layer.domain.answer.repository.AnswerRepository;
@@ -35,7 +37,9 @@
3537
import org.springframework.transaction.annotation.Transactional;
3638

3739
import java.util.List;
40+
import java.util.Map;
3841
import java.util.concurrent.atomic.AtomicInteger;
42+
import java.util.stream.Collectors;
3943

4044
@Service
4145
@RequiredArgsConstructor
@@ -145,6 +149,34 @@ public RetrospectListGetResponse getRetrospects(Long spaceId, Long memberId) {
145149
return RetrospectListGetResponse.of(retrospects.size(), retrospectDtos);
146150
}
147151

152+
public RetrospectListGetResponse getAllRetrospects(Long memberId) {
153+
154+
List<MemberSpaceRelation> msrList = memberSpaceRelationRepository.findAllByMemberId(memberId);
155+
List<Long> spaceIds = msrList.stream().map(m -> m.getSpace().getId()).toList();
156+
157+
Map<Long, Long> spaceMemberCountMap = memberSpaceRelationRepository.countMembersBySpaceIds(spaceIds)
158+
.stream().collect(Collectors.toMap(SpaceMemberCount::getSpaceId, SpaceMemberCount::getMemberCount));
159+
160+
List<Retrospect> retrospects = retrospectRepository.findAllBySpaceIdIn(spaceIds);
161+
List<Long> retrospectIds = retrospects.stream().map(Retrospect::getId).toList();
162+
Answers answers = new Answers(answerRepository.findAllByRetrospectIdIn(retrospectIds));
163+
164+
List<RetrospectGetResponse> retrospectDtos = retrospects.stream()
165+
.map(r -> {
166+
long writeCount = spaceMemberCountMap.get(r.getSpaceId());
167+
if (r.getRetrospectStatus().equals(RetrospectStatus.DONE)) {
168+
writeCount = answers.getWriteCount(r.getId());
169+
}
170+
171+
return RetrospectGetResponse.of(r.getId(), r.getTitle(), r.getIntroduction(),
172+
answers.getWriteStatus(memberId, r.getId()), r.getRetrospectStatus(), r.getAnalysisStatus(),
173+
answers.getWriteCount(r.getId()), writeCount, r.getCreatedAt(), r.getDeadline());
174+
})
175+
.toList();
176+
177+
return RetrospectListGetResponse.of(retrospects.size(), retrospectDtos);
178+
}
179+
148180
private List<Question> getQuestions(List<QuestionCreateRequest> questions, Long savedRetrospectId, Long formId) {
149181
AtomicInteger index = new AtomicInteger(1);
150182

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.layer.domain.retrospect.dto;
2+
3+
import lombok.Getter;
4+
5+
@Getter
6+
public class SpaceMemberCount {
7+
private final Long spaceId;
8+
private final Long memberCount;
9+
10+
public SpaceMemberCount(Long spaceId, Long memberCount) {
11+
this.spaceId = spaceId;
12+
this.memberCount = memberCount;
13+
}
14+
}

layer-domain/src/main/java/org/layer/domain/retrospect/repository/RetrospectCustomRepository.java

Lines changed: 0 additions & 8 deletions
This file was deleted.

layer-domain/src/main/java/org/layer/domain/retrospect/repository/RetrospectCustomRepositoryImpl.java

Lines changed: 0 additions & 34 deletions
This file was deleted.

layer-domain/src/main/java/org/layer/domain/retrospect/repository/RetrospectRepository.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@
1717
import java.util.List;
1818
import java.util.Optional;
1919

20-
public interface RetrospectRepository extends JpaRepository<Retrospect, Long>, RetrospectCustomRepository {
20+
public interface RetrospectRepository extends JpaRepository<Retrospect, Long> {
2121
List<Retrospect> findAllBySpaceId(Long spaceId);
2222

23+
List<Retrospect> findAllBySpaceIdIn(List<Long> spaceIds);
24+
2325
List<Retrospect> findAllByDeadlineBeforeAndRetrospectStatus(LocalDateTime now, RetrospectStatus retrospectStatus);
2426

2527
default Retrospect findByIdOrThrow(Long retrospectId) {

layer-domain/src/main/java/org/layer/domain/space/repository/MemberSpaceRelationRepository.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.layer.domain.space.repository;
22

33

4+
import org.layer.domain.retrospect.dto.SpaceMemberCount;
45
import org.layer.domain.space.entity.MemberSpaceRelation;
56
import org.layer.domain.space.entity.Space;
67
import org.springframework.data.jpa.repository.JpaRepository;
@@ -18,6 +19,12 @@ public interface MemberSpaceRelationRepository extends JpaRepository<MemberSpace
1819

1920
List<MemberSpaceRelation> findAllBySpaceId(Long spaceId);
2021

22+
@Query("SELECT new org.layer.domain.retrospect.dto.SpaceMemberCount(m.space.id, COUNT(m)) " +
23+
"FROM MemberSpaceRelation m " +
24+
"WHERE m.space.id IN :spaceIds " +
25+
"GROUP BY m.space.id")
26+
List<SpaceMemberCount> countMembersBySpaceIds(@Param("spaceIds") List<Long> spaceIds);
27+
2128
@Modifying(clearAutomatically = true)
2229
@Query("DELETE FROM MemberSpaceRelation m where m.space.id = :spaceId")
2330
void deleteAllBySpaceIdInBatch(Long spaceId);

0 commit comments

Comments
 (0)