From 6e4c4db9707da1ee96f06d99e59a8a199366fd4c Mon Sep 17 00:00:00 2001 From: kimjieun0301 Date: Fri, 26 Jul 2024 15:05:13 +0900 Subject: [PATCH] [feature] login profile info detail api --- .../controller/AgendaProfileController.java | 37 +++++++++++++++- .../response/AgendaProfileDetailsResDto.java | 5 +-- .../AgendaProfileInfoDetailsResDto.java | 16 +++++++ .../service/AgendaProfileFindService.java | 43 ++++++++++++++++--- .../AgendaProfileControllerTest.java | 30 +++++++++++++ .../repo/agenda/AgendaProfileRepository.java | 2 + 6 files changed, 122 insertions(+), 11 deletions(-) create mode 100644 gg-agenda-api/src/main/java/gg/agenda/api/user/agendaprofile/controller/response/AgendaProfileInfoDetailsResDto.java diff --git a/gg-agenda-api/src/main/java/gg/agenda/api/user/agendaprofile/controller/AgendaProfileController.java b/gg-agenda-api/src/main/java/gg/agenda/api/user/agendaprofile/controller/AgendaProfileController.java index 624fe5daf..d92a3afe5 100644 --- a/gg-agenda-api/src/main/java/gg/agenda/api/user/agendaprofile/controller/AgendaProfileController.java +++ b/gg-agenda-api/src/main/java/gg/agenda/api/user/agendaprofile/controller/AgendaProfileController.java @@ -14,10 +14,13 @@ import gg.agenda.api.user.agendaprofile.controller.request.AgendaProfileChangeReqDto; import gg.agenda.api.user.agendaprofile.controller.response.AgendaProfileDetailsResDto; +import gg.agenda.api.user.agendaprofile.controller.response.AgendaProfileInfoDetailsResDto; import gg.agenda.api.user.agendaprofile.service.AgendaProfileFindService; import gg.agenda.api.user.agendaprofile.service.AgendaProfileService; import gg.auth.UserDto; import gg.auth.argumentresolver.Login; +import gg.data.user.type.RoleType; +import gg.repo.user.UserRepository; import io.swagger.v3.oas.annotations.Parameter; import lombok.RequiredArgsConstructor; @@ -27,6 +30,7 @@ public class AgendaProfileController { private final AgendaProfileFindService agendaProfileFindService; private final AgendaProfileService agendaProfileService; + private final UserRepository userRepository; private static final Logger log = LoggerFactory.getLogger(AgendaProfileController.class); /** @@ -37,7 +41,8 @@ public class AgendaProfileController { @GetMapping public ResponseEntity myAgendaProfileDetails( @Login @Parameter(hidden = true) UserDto user) { - AgendaProfileDetailsResDto agendaProfileDetails = agendaProfileFindService.detailsAgendaProfile(user.getId()); + AgendaProfileDetailsResDto agendaProfileDetails = agendaProfileFindService.detailsAgendaProfile( + user.getIntraId()); return ResponseEntity.status(HttpStatus.OK).body(agendaProfileDetails); } @@ -53,5 +58,35 @@ public ResponseEntity agendaProfileModify(@Login @Parameter(hidden = true) agendaProfileService.modifyAgendaProfile(user.getId(), reqDto); return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); } + + /** + * AgendaProfile 상세 조회 API + * @param user 로그인한 사용자 정보 + * @return AgendaProfileDetailsResDto 객체와 HTTP 상태 코드를 포함한 ResponseEntity + */ + @GetMapping("/info") + public ResponseEntity myAgendaProfileInfoDetails( + @Login @Parameter(hidden = true) UserDto user) { + String intraId = user.getIntraId(); + Boolean isAdmin = user.getRoleType() == RoleType.ADMIN; + + AgendaProfileInfoDetailsResDto agendaProfileInfoDetails = new AgendaProfileInfoDetailsResDto(intraId, isAdmin); + + return ResponseEntity.ok(agendaProfileInfoDetails); + } + + // /** + // * 현재 참여중인 Agenda 목록 조회하는 메서드 + // * @param user 로그인한 유저의 id + // * @return List 객체 + // */ + // @GetMapping("/current/list") + // public ResponseEntity> getCurrentAttendAgendaList( + // @Login @Parameter(hidden = true) UserDto user) { + // + // List currentAttendAgendaList = agendaProfileFindService.findCurrentAttendAgenda( + // user.getId()); + // return ResponseEntity.ok(currentAttendAgendaList); + // } } diff --git a/gg-agenda-api/src/main/java/gg/agenda/api/user/agendaprofile/controller/response/AgendaProfileDetailsResDto.java b/gg-agenda-api/src/main/java/gg/agenda/api/user/agendaprofile/controller/response/AgendaProfileDetailsResDto.java index 18f8ce03a..024c41fa2 100644 --- a/gg-agenda-api/src/main/java/gg/agenda/api/user/agendaprofile/controller/response/AgendaProfileDetailsResDto.java +++ b/gg-agenda-api/src/main/java/gg/agenda/api/user/agendaprofile/controller/response/AgendaProfileDetailsResDto.java @@ -3,7 +3,6 @@ import gg.data.agenda.AgendaProfile; import gg.data.agenda.type.Coalition; import gg.data.agenda.type.Location; -import gg.data.user.User; import lombok.Getter; import lombok.NoArgsConstructor; @@ -18,8 +17,8 @@ public class AgendaProfileDetailsResDto { private Location userLocation; private int ticketCount; - public AgendaProfileDetailsResDto(User user, AgendaProfile entity, int ticketCount) { - this.userIntraId = user.getIntraId(); + public AgendaProfileDetailsResDto(String intraId, AgendaProfile entity, int ticketCount) { + this.userIntraId = intraId; this.userContent = entity.getContent(); this.userGithub = entity.getGithubUrl(); this.userCoalition = entity.getCoalition(); diff --git a/gg-agenda-api/src/main/java/gg/agenda/api/user/agendaprofile/controller/response/AgendaProfileInfoDetailsResDto.java b/gg-agenda-api/src/main/java/gg/agenda/api/user/agendaprofile/controller/response/AgendaProfileInfoDetailsResDto.java new file mode 100644 index 000000000..67f7e403c --- /dev/null +++ b/gg-agenda-api/src/main/java/gg/agenda/api/user/agendaprofile/controller/response/AgendaProfileInfoDetailsResDto.java @@ -0,0 +1,16 @@ +package gg.agenda.api.user.agendaprofile.controller.response; + +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor(access = lombok.AccessLevel.PROTECTED) +public class AgendaProfileInfoDetailsResDto { + private String intraId; + private Boolean isAdmin; + + public AgendaProfileInfoDetailsResDto(String intraId, Boolean isAdmin) { + this.intraId = intraId; + this.isAdmin = isAdmin; + } +} diff --git a/gg-agenda-api/src/main/java/gg/agenda/api/user/agendaprofile/service/AgendaProfileFindService.java b/gg-agenda-api/src/main/java/gg/agenda/api/user/agendaprofile/service/AgendaProfileFindService.java index 37ab75d3c..73af1340f 100644 --- a/gg-agenda-api/src/main/java/gg/agenda/api/user/agendaprofile/service/AgendaProfileFindService.java +++ b/gg-agenda-api/src/main/java/gg/agenda/api/user/agendaprofile/service/AgendaProfileFindService.java @@ -7,8 +7,9 @@ import gg.agenda.api.user.agendaprofile.controller.response.AgendaProfileDetailsResDto; import gg.data.agenda.AgendaProfile; -import gg.data.user.User; import gg.repo.agenda.AgendaProfileRepository; +import gg.repo.agenda.AgendaTeamProfileRepository; +import gg.repo.agenda.AgendaTeamRepository; import gg.repo.agenda.TicketRepository; import gg.repo.user.UserRepository; import gg.utils.exception.custom.NotExistException; @@ -21,22 +22,50 @@ public class AgendaProfileFindService { private final UserRepository userRepository; private final AgendaProfileRepository agendaProfileRepository; private final TicketRepository ticketRepository; + private final AgendaTeamProfileRepository agendaTeamProfileRepository; + private final AgendaTeamRepository agendaTeamRepository; /** * AgendaProfile 상세 정보를 조회하는 메서드 - * @param userId 로그인한 유저의 id + * @param intraId 로그인한 유저의 id * @return AgendaProfileDetailsResDto 객체 */ @Transactional(readOnly = true) - public AgendaProfileDetailsResDto detailsAgendaProfile(Long userId) { - User loginUser = userRepository.getById(userId); - - AgendaProfile agendaProfile = agendaProfileRepository.findByUserId(loginUser.getId()) + public AgendaProfileDetailsResDto detailsAgendaProfile(String intraId) { + AgendaProfile agendaProfile = agendaProfileRepository.findByIntraId(intraId) .orElseThrow(() -> new NotExistException(AGENDA_PROFILE_NOT_FOUND)); int ticketCount = ticketRepository.findByAgendaProfileIdAndIsUsedFalseAndIsApprovedTrue(agendaProfile.getId()) .size(); - return new AgendaProfileDetailsResDto(loginUser, agendaProfile, ticketCount); + return new AgendaProfileDetailsResDto(intraId, agendaProfile, ticketCount); } + + // /** + // * 자기가 참여중인 Agenda 목록 조회하는 메서드 + // * @param userId 로그인한 유저의 id + // * @return AgendaProfileDetailsResDto 객체 + // */ + // @Transactional(readOnly = true) + // public List findCurrentAttendAgenda(Long userId) { + // User loginUser = userRepository.getById(userId); + // + // AgendaProfile agendaProfile = agendaProfileRepository.findByUserId(loginUser.getId()) + // .orElseThrow(() -> new NotExistException(AGENDA_PROFILE_NOT_FOUND)); + // + // List agendaTeamProfiles = agendaTeamProfileRepository.findByUserId(loginUser.getId()); + // + // if (agendaTeamProfiles.isEmpty()) { + // throw new NotExistException(AGENDA_PROFILE_NOT_FOUND); + // } + // + // return agendaTeamProfiles.stream() + // .filter(agendaTeamProfile -> agendaTeamProfile.getAgenda().getStatus() == AgendaStatus.ON_GOING) + // .map(agendaTeamProfile -> { + // AgendaTeam agendaTeam = agendaTeamRepository.findById(agendaTeamProfile.getId()) + // .orElseThrow(() -> new NotExistException(AGENDA_TEAM_NOT_FOUND)); + // return new CurrentAttendAgendaListResDto(agendaTeamProfile, agendaTeam); + // }) + // .collect(Collectors.toList()); + // } } diff --git a/gg-agenda-api/src/test/java/gg/agenda/api/user/agendaprofile/AgendaProfileControllerTest.java b/gg-agenda-api/src/test/java/gg/agenda/api/user/agendaprofile/AgendaProfileControllerTest.java index 133c53e42..b4dc9931b 100644 --- a/gg-agenda-api/src/test/java/gg/agenda/api/user/agendaprofile/AgendaProfileControllerTest.java +++ b/gg-agenda-api/src/test/java/gg/agenda/api/user/agendaprofile/AgendaProfileControllerTest.java @@ -21,8 +21,10 @@ import gg.agenda.api.AgendaMockData; import gg.agenda.api.user.agendaprofile.controller.request.AgendaProfileChangeReqDto; import gg.agenda.api.user.agendaprofile.controller.response.AgendaProfileDetailsResDto; +import gg.agenda.api.user.agendaprofile.controller.response.AgendaProfileInfoDetailsResDto; import gg.data.agenda.AgendaProfile; import gg.data.user.User; +import gg.data.user.type.RoleType; import gg.repo.agenda.AgendaProfileRepository; import gg.utils.TestDataUtils; import gg.utils.annotation.IntegrationTest; @@ -200,5 +202,33 @@ void testAgendaProfileNotFound() throws Exception { .andExpect(status().isNotFound()); } } + + @Nested + @DisplayName("개인 프로필 admin 여부 조회") + class GetAgendaProfileInfo { + + @BeforeEach + void beforeEach() { + user = testDataUtils.createNewUser(); + accessToken = testDataUtils.getLoginAccessTokenFromUser(user); + } + + @Test + @DisplayName("로그인된 유저에 해당하는 Admin 여부를 조회합니다.") + void test() throws Exception { + //given + // when + String response = mockMvc.perform(get("/agenda/profile/info") + .header("Authorization", "Bearer " + accessToken)) + .andExpect(status().isOk()) + .andReturn().getResponse().getContentAsString(); + AgendaProfileInfoDetailsResDto result = objectMapper.readValue(response, + AgendaProfileInfoDetailsResDto.class); + // then + Boolean isAdmin = user.getRoleType() == RoleType.ADMIN; + assertThat(result.getIntraId()).isEqualTo(user.getIntraId()); + assertThat(result.getIsAdmin()).isEqualTo(isAdmin); + } + } } diff --git a/gg-repo/src/main/java/gg/repo/agenda/AgendaProfileRepository.java b/gg-repo/src/main/java/gg/repo/agenda/AgendaProfileRepository.java index ae365a233..5d110342d 100644 --- a/gg-repo/src/main/java/gg/repo/agenda/AgendaProfileRepository.java +++ b/gg-repo/src/main/java/gg/repo/agenda/AgendaProfileRepository.java @@ -8,4 +8,6 @@ public interface AgendaProfileRepository extends JpaRepository { Optional findByUserId(Long userId); + + Optional findByIntraId(String intraId); }