From 9c9636356cd0f10852b438895d05b17806614aba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=92=E1=85=A7=E1=86=AB=E1=84=90=E1=85=A2=20=E1=84=8E?= =?UTF-8?q?=E1=85=AC?= Date: Tue, 22 Apr 2025 05:50:40 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=ED=8C=80=20=EB=AA=A9=EB=A1=9D=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20V2=20API=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/team/api/TeamController.java | 8 ++++ .../domain/team/application/TeamService.java | 7 ++++ .../domain/team/dao/TeamRepositoryCustom.java | 3 ++ .../domain/team/dao/TeamRepositoryImpl.java | 37 ++++++++++++------- 4 files changed, 42 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/amcamp/domain/team/api/TeamController.java b/src/main/java/com/amcamp/domain/team/api/TeamController.java index 6f0a1e61..856098be 100644 --- a/src/main/java/com/amcamp/domain/team/api/TeamController.java +++ b/src/main/java/com/amcamp/domain/team/api/TeamController.java @@ -12,6 +12,7 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; +import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Slice; import org.springframework.http.ResponseEntity; @@ -78,6 +79,7 @@ public TeamAdminResponse teamFindAdmin(@PathVariable Long teamId) { return teamService.findTeamAdmin(teamId); } + @Deprecated @Operation(summary = "팀 목록 조회", description = "회원이 참여한 팀 목록을 조회합니다.") @GetMapping("/list") public Slice teamFindAll( @@ -88,4 +90,10 @@ public Slice teamFindAll( int pageSize) { return teamService.findAllTeam(lastTeamId, pageSize); } + + @Operation(summary = "팀 목록 조회 V2", description = "회원이 참여한 팀 목록을 조회합니다.") + @GetMapping("/list/all") + public List teamFindAll() { + return teamService.findAllTeam(); + } } diff --git a/src/main/java/com/amcamp/domain/team/application/TeamService.java b/src/main/java/com/amcamp/domain/team/application/TeamService.java index c9bdf2dc..651ea801 100644 --- a/src/main/java/com/amcamp/domain/team/application/TeamService.java +++ b/src/main/java/com/amcamp/domain/team/application/TeamService.java @@ -20,6 +20,7 @@ import com.amcamp.global.util.MemberUtil; import com.amcamp.global.util.RandomUtil; import com.amcamp.global.util.RedisUtil; +import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Slice; @@ -179,6 +180,12 @@ public Slice findAllTeam(Long lastTeamId, int pageSize) { return teamRepository.findAllTeamByMemberId(currentMember.getId(), lastTeamId, pageSize); } + @Transactional(readOnly = true) + public List findAllTeam() { + Member currentMember = memberUtil.getCurrentMember(); + return teamRepository.findAllTeamByMemberId(currentMember.getId()); + } + @Transactional(readOnly = true) public TeamAdminResponse findTeamAdmin(Long teamId) { Member member = memberUtil.getCurrentMember(); diff --git a/src/main/java/com/amcamp/domain/team/dao/TeamRepositoryCustom.java b/src/main/java/com/amcamp/domain/team/dao/TeamRepositoryCustom.java index ae43fc26..3c2e1f32 100644 --- a/src/main/java/com/amcamp/domain/team/dao/TeamRepositoryCustom.java +++ b/src/main/java/com/amcamp/domain/team/dao/TeamRepositoryCustom.java @@ -1,8 +1,11 @@ package com.amcamp.domain.team.dao; import com.amcamp.domain.team.dto.response.TeamInfoResponse; +import java.util.List; import org.springframework.data.domain.Slice; public interface TeamRepositoryCustom { Slice findAllTeamByMemberId(Long memberId, Long lastTeamId, int pageSize); + + List findAllTeamByMemberId(Long memberId); } diff --git a/src/main/java/com/amcamp/domain/team/dao/TeamRepositoryImpl.java b/src/main/java/com/amcamp/domain/team/dao/TeamRepositoryImpl.java index 2aff504f..5e61f208 100644 --- a/src/main/java/com/amcamp/domain/team/dao/TeamRepositoryImpl.java +++ b/src/main/java/com/amcamp/domain/team/dao/TeamRepositoryImpl.java @@ -8,6 +8,7 @@ import com.amcamp.global.exception.errorcode.TeamErrorCode; import com.querydsl.core.types.Projections; import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQueryFactory; import java.util.List; import lombok.RequiredArgsConstructor; @@ -26,19 +27,8 @@ public class TeamRepositoryImpl implements TeamRepositoryCustom { public Slice findAllTeamByMemberId( Long memberId, Long lastTeamId, int pageSize) { List results = - jpaQueryFactory - .select( - Projections.constructor( - TeamInfoResponse.class, - team.id, - team.name, - team.description, - team.emoji)) - .from(teamParticipant) - .leftJoin(teamParticipant.team, team) - .on(team.id.eq(teamParticipant.team.id)) - .where(lastTeamId(lastTeamId), teamParticipant.member.id.eq(memberId)) - .orderBy(teamParticipant.createdDt.desc()) + createTeamQueryByMemberId(memberId) + .where(lastTeamId(lastTeamId)) .limit(pageSize + 1) .fetch(); @@ -49,6 +39,27 @@ public Slice findAllTeamByMemberId( return checkLastPage(pageSize, results); } + @Override + public List findAllTeamByMemberId(Long memberId) { + return createTeamQueryByMemberId(memberId).fetch(); + } + + private JPAQuery createTeamQueryByMemberId(Long memberId) { + return jpaQueryFactory + .select( + Projections.constructor( + TeamInfoResponse.class, + team.id, + team.name, + team.description, + team.emoji)) + .from(teamParticipant) + .leftJoin(teamParticipant.team, team) + .on(team.id.eq(teamParticipant.team.id)) + .where(teamParticipant.member.id.eq(memberId)) + .orderBy(teamParticipant.createdDt.desc()); + } + private BooleanExpression lastTeamId(Long teamId) { if (teamId == null) { return null;