diff --git a/src/main/java/com/lesso/neverland/group/application/GroupService.java b/src/main/java/com/lesso/neverland/group/application/GroupService.java index 6cf93d1..adb664d 100644 --- a/src/main/java/com/lesso/neverland/group/application/GroupService.java +++ b/src/main/java/com/lesso/neverland/group/application/GroupService.java @@ -22,7 +22,9 @@ import java.io.IOException; import java.time.LocalDate; +import java.time.ZoneId; import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; import java.util.*; import java.util.stream.Collectors; @@ -47,13 +49,24 @@ public BaseResponse getGroupList() { User user = userRepository.findById(userService.getUserIdxWithValidation()).orElseThrow(() -> new BaseException(INVALID_USER_IDX)); List groupList = groupRepository.findByAdminAndStatusEquals(user, ACTIVE); List groupListDto = groupList.stream() - .map(group -> new GroupListDto( - group.getTeamIdx(), - group.getTeamImage(), - group.getName())).collect(Collectors.toList()); + .map(group -> { + String startYear = group.getStartDate().format(DateTimeFormatter.ofPattern("yyyy")); + return new GroupListDto(group.getTeamIdx(), group.getTeamImage(), startYear, group.getName(), + group.getUserTeams().size(), group.getAdmin().getProfile().getNickname(), calculateRecentUpdate(group)); + }).collect(Collectors.toList()); return new BaseResponse<>(new GroupListResponse(groupListDto)); } + private String calculateRecentUpdate(Team group) { + Puzzle recentPuzzle = puzzleRepository.findTopByTeamAndStatusEqualsOrderByCreatedDateDesc(group, ACTIVE); + + LocalDate today = LocalDate.now(ZoneId.of("Asia/Seoul")); + LocalDate puzzleCreatedDate = recentPuzzle.getCreatedDate(); + long daysBetween = ChronoUnit.DAYS.between(puzzleCreatedDate, today); + + return daysBetween + "일 전"; + } + // 그룹 퍼즐 목록 조회 public BaseResponse getGroupPuzzleList(Long groupIdx) { User user = userRepository.findById(userService.getUserIdxWithValidation()).orElseThrow(() -> new BaseException(INVALID_USER_IDX)); diff --git a/src/main/java/com/lesso/neverland/group/domain/Team.java b/src/main/java/com/lesso/neverland/group/domain/Team.java index 905cbe4..a36c5e9 100644 --- a/src/main/java/com/lesso/neverland/group/domain/Team.java +++ b/src/main/java/com/lesso/neverland/group/domain/Team.java @@ -10,7 +10,7 @@ import lombok.NoArgsConstructor; import org.hibernate.annotations.DynamicInsert; -import java.time.LocalDate; +import java.time.YearMonth; import java.util.ArrayList; import java.util.List; @@ -37,7 +37,7 @@ public class Team extends BaseEntity { private String teamImage; @Column(nullable = false) - private LocalDate startDate; + private YearMonth startDate; @OneToMany(mappedBy = "team") private List userTeams = new ArrayList<>(); diff --git a/src/main/java/com/lesso/neverland/group/dto/GroupListDto.java b/src/main/java/com/lesso/neverland/group/dto/GroupListDto.java index 4c37fc4..323bffe 100644 --- a/src/main/java/com/lesso/neverland/group/dto/GroupListDto.java +++ b/src/main/java/com/lesso/neverland/group/dto/GroupListDto.java @@ -2,4 +2,8 @@ public record GroupListDto(Long groupIdx, String groupImage, - String name) {} + String startYear, + String name, + Integer memberCount, + String admin, + String recentUpdate) {} diff --git a/src/main/java/com/lesso/neverland/puzzle/repository/PuzzleRepository.java b/src/main/java/com/lesso/neverland/puzzle/repository/PuzzleRepository.java index 4c358a9..e72aa6a 100644 --- a/src/main/java/com/lesso/neverland/puzzle/repository/PuzzleRepository.java +++ b/src/main/java/com/lesso/neverland/puzzle/repository/PuzzleRepository.java @@ -11,6 +11,7 @@ public interface PuzzleRepository extends JpaRepository { List findByTeamAndStatusEqualsOrderByCreatedDateDesc(Team group, String status); + Puzzle findTopByTeamAndStatusEqualsOrderByCreatedDateDesc(Team group, String status); List findByTeamAndStatusEquals(Team group, String status); List findByUserAndStatusEquals(User user, String status); @Query("SELECT p FROM Puzzle p WHERE p.title LIKE CONCAT('%', :keyword, '%') OR p.content LIKE CONCAT('%', :keyword, '%')")