diff --git a/src/main/java/org/poolc/api/comment/controller/CommentController.java b/src/main/java/org/poolc/api/comment/controller/CommentController.java index fa7baee3..5c3070e8 100644 --- a/src/main/java/org/poolc/api/comment/controller/CommentController.java +++ b/src/main/java/org/poolc/api/comment/controller/CommentController.java @@ -54,4 +54,5 @@ public ResponseEntity likeComment(@AuthenticationPrincipal Member member, likeService.like(member, Subject.COMMENT, commentId); return ResponseEntity.status(HttpStatus.OK).build(); } + } diff --git a/src/main/java/org/poolc/api/kubernetes/controller/KubernetesController.java b/src/main/java/org/poolc/api/kubernetes/controller/KubernetesController.java index 039de3ef..37e576c5 100644 --- a/src/main/java/org/poolc/api/kubernetes/controller/KubernetesController.java +++ b/src/main/java/org/poolc/api/kubernetes/controller/KubernetesController.java @@ -2,8 +2,12 @@ import lombok.RequiredArgsConstructor; import org.poolc.api.kubernetes.dto.GetKubernetesResponseDto; +import org.poolc.api.kubernetes.dto.GetMyKubernetesKeyResponseDto; import org.poolc.api.kubernetes.service.KubernetesService; +import org.poolc.api.member.domain.Member; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; import java.util.Map; @@ -31,4 +35,19 @@ public ResponseEntity refreshMamberKeys(@RequestHeader("X-API-KEY") String return ResponseEntity.ok().build(); } + @GetMapping(value="/me") + public ResponseEntity getMyKey(@AuthenticationPrincipal Member loginMember){ + if (loginMember == null) { + return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); + } + try { + GetMyKubernetesKeyResponseDto response = new GetMyKubernetesKeyResponseDto( + kubernetesService.getKubernetesKeyByUUID(loginMember.getUUID()) + ); + return ResponseEntity.ok().body(response); + } catch (IllegalArgumentException e){ + return ResponseEntity.notFound().build(); + } + } + } diff --git a/src/main/java/org/poolc/api/kubernetes/dto/ActiveMemberDto.java b/src/main/java/org/poolc/api/kubernetes/dto/ActiveMemberDto.java new file mode 100644 index 00000000..58403fac --- /dev/null +++ b/src/main/java/org/poolc/api/kubernetes/dto/ActiveMemberDto.java @@ -0,0 +1,6 @@ +package org.poolc.api.kubernetes.dto; + +public interface ActiveMemberDto { + String getMember_uuid(); + String getLogin_id(); +} diff --git a/src/main/java/org/poolc/api/kubernetes/dto/GetKubernetesResponseDto.java b/src/main/java/org/poolc/api/kubernetes/dto/GetKubernetesResponseDto.java index 40c512e5..da87b00d 100644 --- a/src/main/java/org/poolc/api/kubernetes/dto/GetKubernetesResponseDto.java +++ b/src/main/java/org/poolc/api/kubernetes/dto/GetKubernetesResponseDto.java @@ -7,10 +7,10 @@ @Getter public class GetKubernetesResponseDto { - private final List activeMembers; + private final List activeMembers; @JsonCreator - public GetKubernetesResponseDto(List activeMembers) { + public GetKubernetesResponseDto(List activeMembers) { this.activeMembers = activeMembers; } } diff --git a/src/main/java/org/poolc/api/kubernetes/dto/GetMyKubernetesKeyResponseDto.java b/src/main/java/org/poolc/api/kubernetes/dto/GetMyKubernetesKeyResponseDto.java new file mode 100644 index 00000000..7e1cb065 --- /dev/null +++ b/src/main/java/org/poolc/api/kubernetes/dto/GetMyKubernetesKeyResponseDto.java @@ -0,0 +1,15 @@ +package org.poolc.api.kubernetes.dto; + +import com.fasterxml.jackson.annotation.JsonCreator; +import lombok.Getter; + +@Getter +public class GetMyKubernetesKeyResponseDto { + + private final String key; + + @JsonCreator + public GetMyKubernetesKeyResponseDto(String key){ + this.key = key; + } +} diff --git a/src/main/java/org/poolc/api/kubernetes/repository/KubernetesRepository.java b/src/main/java/org/poolc/api/kubernetes/repository/KubernetesRepository.java index 89edfbc0..a19cc519 100644 --- a/src/main/java/org/poolc/api/kubernetes/repository/KubernetesRepository.java +++ b/src/main/java/org/poolc/api/kubernetes/repository/KubernetesRepository.java @@ -1,6 +1,7 @@ package org.poolc.api.kubernetes.repository; import org.poolc.api.kubernetes.domain.KubernetesMapping; +import org.poolc.api.kubernetes.dto.ActiveMemberDto; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; @@ -12,25 +13,28 @@ public interface KubernetesRepository extends JpaRepository { - @Query(value = "SELECT DISTINCT MEMBER_UUID\n" + - "FROM ROLES\n" + - "WHERE MEMBER_UUID IN (\n" + + @Query(value = "SELECT DISTINCT T2.MEMBER_UUID\n" + + " , (SELECT login_id" + + " FROM MEMBER T1" + + " WHERE T1.UUID = T2.MEMBER_UUID)\n" + + "FROM ROLES T2\n" + + "WHERE T2.MEMBER_UUID IN (\n" + " SELECT MEMBER_UUID\n" + " FROM ROLES\n" + " WHERE ROLES = 'MEMBER'\n" + ")\n" + - "AND MEMBER_UUID NOT IN (\n" + + "AND T2.MEMBER_UUID NOT IN (\n" + " SELECT MEMBER_UUID\n" + " FROM ROLES\n" + " WHERE ROLES = 'INACTIVE'\n" + ")", nativeQuery = true) - List findAllActiveMembers(); + List findAllActiveMembers(); @Modifying @Transactional @Query(value = "TRUNCATE TABLE KUBERNETES_MAPPINGS", nativeQuery = true) void truncateKubernetesMappingTable(); - @Query(value = "SELECT kubernetesKey FROM kubernetes_mappings WHERE UUID IN (SELECT UUID FROM Member WHERE loginID = :userId)") - Optional findKubernetesKeyByUserId(String userId); + @Query(value = "SELECT kubernetesKey FROM kubernetes_mappings WHERE UUID = :UUID") + Optional findKubernetesKeyByUUID(String UUID); } diff --git a/src/main/java/org/poolc/api/kubernetes/service/KubernetesService.java b/src/main/java/org/poolc/api/kubernetes/service/KubernetesService.java index a37ae739..fb49185c 100644 --- a/src/main/java/org/poolc/api/kubernetes/service/KubernetesService.java +++ b/src/main/java/org/poolc/api/kubernetes/service/KubernetesService.java @@ -2,6 +2,7 @@ import lombok.RequiredArgsConstructor; import org.poolc.api.kubernetes.domain.KubernetesMapping; +import org.poolc.api.kubernetes.dto.ActiveMemberDto; import org.poolc.api.kubernetes.repository.KubernetesRepository; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -19,7 +20,7 @@ public class KubernetesService { @Value("${kubernetes.api.key}") private String API_KEY; - public List getAllActiveMembers(String apiKey) { + public List getAllActiveMembers(String apiKey) { if(!isValidApiKey(apiKey)) { throw new IllegalArgumentException("Invalid API key"); } @@ -43,9 +44,9 @@ public void refreshMemberKey(Map requestBody, String apiKey) { kubernetesRepository.saveAll(mappings); } - public String getKubernetesKeyByUserId(String userId) { - return kubernetesRepository.findKubernetesKeyByUserId(userId) - .orElseThrow(() -> new IllegalArgumentException("No Kubernetes key found for user: " + userId)); + public String getKubernetesKeyByUUID(String UUID) { + return kubernetesRepository.findKubernetesKeyByUUID(UUID) + .orElseThrow(() -> new IllegalArgumentException("No Kubernetes key found for the authenticated user")); } private boolean isValidApiKey(String apiKey) {