From 1819aa4011f9237241b819156ad05e2b328159c8 Mon Sep 17 00:00:00 2001 From: coli Date: Tue, 5 Aug 2025 22:01:54 +0900 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20=EA=B9=83=ED=97=88=EB=B8=8C?= =?UTF-8?q?=EC=9A=A9=20notfound=20=EC=98=88=EC=99=B8=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/devoops/exception/GithubNotFoundException.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 gss-client/gss-github-client/src/main/java/com/devoops/exception/GithubNotFoundException.java diff --git a/gss-client/gss-github-client/src/main/java/com/devoops/exception/GithubNotFoundException.java b/gss-client/gss-github-client/src/main/java/com/devoops/exception/GithubNotFoundException.java new file mode 100644 index 00000000..0f25124a --- /dev/null +++ b/gss-client/gss-github-client/src/main/java/com/devoops/exception/GithubNotFoundException.java @@ -0,0 +1,7 @@ +package com.devoops.exception; + +public class GithubNotFoundException extends RuntimeException { + public GithubNotFoundException(String message) { + super(message); + } +} From 9159e11c371d6ef5468bbac0b9d10038b8c40ea2 Mon Sep 17 00:00:00 2001 From: coli Date: Tue, 5 Aug 2025 22:02:16 +0900 Subject: [PATCH 2/4] =?UTF-8?q?feat:=20=EA=B9=83=ED=97=88=EB=B8=8C?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EC=9B=B9=ED=9B=85=EC=9D=84=20=EB=AA=BB?= =?UTF-8?q?=EC=B0=BE=EB=8D=94=EB=9D=BC=EB=8F=84=20=EC=9E=90=EC=B2=B4=20DB?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/devoops/service/GitHubService.java | 24 +++++++++++++------ .../client/GithubExchangeFilterFunction.java | 3 ++- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/gss-api-app/src/main/java/com/devoops/service/GitHubService.java b/gss-api-app/src/main/java/com/devoops/service/GitHubService.java index cf611d7e..47ebee5b 100644 --- a/gss-api-app/src/main/java/com/devoops/service/GitHubService.java +++ b/gss-api-app/src/main/java/com/devoops/service/GitHubService.java @@ -13,15 +13,17 @@ import com.devoops.dto.response.GithubPrResponse; import com.devoops.dto.response.GithubRepoInfoResponse; import com.devoops.dto.response.WebHookCreateResponse; +import com.devoops.exception.GithubNotFoundException; import com.devoops.exception.custom.GssException; import com.devoops.exception.errorcode.ErrorCode; -import com.devoops.jpa.repository.github.GithubWebHookDomainRepositoryImpl; import java.util.List; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +@Slf4j @Service @RequiredArgsConstructor public class GitHubService { @@ -91,12 +93,20 @@ public void deleteWebhook(User user, long repositoryId) { GithubToken githubToken = githubTokenDomainRepository.findByUserId(user) .orElseThrow(() -> new GssException(ErrorCode.NO_RESOURCE_FOUND)); GithubWebhook webhook = githubWebhookDomainRepository.findByRepositoryId(repo.getId()); - gitHubClient.deleteWebhook( - BEARER_PREFIX + githubToken.getToken(), - repo.getOwner(), - repo.getName(), - webhook.getExternalId() - ); + tryDeleteWebhook(githubToken, webhook, repo); githubWebhookDomainRepository.deleteById(webhook.getId()); } + + private void tryDeleteWebhook(GithubToken githubToken, GithubWebhook webhook, GithubRepository repo) { + try { + gitHubClient.deleteWebhook( + BEARER_PREFIX + githubToken.getToken(), + repo.getOwner(), + repo.getName(), + webhook.getExternalId() + ); + } catch (GithubNotFoundException githubNotFoundException) { + log.error("깃허브 레포에서 웹훅을 찾을 수 없습니다 : {}, repo : {} ", githubNotFoundException, repo); + } + } } diff --git a/gss-client/gss-github-client/src/main/java/com/devoops/client/GithubExchangeFilterFunction.java b/gss-client/gss-github-client/src/main/java/com/devoops/client/GithubExchangeFilterFunction.java index 5293c56e..ab856094 100644 --- a/gss-client/gss-github-client/src/main/java/com/devoops/client/GithubExchangeFilterFunction.java +++ b/gss-client/gss-github-client/src/main/java/com/devoops/client/GithubExchangeFilterFunction.java @@ -1,5 +1,6 @@ package com.devoops.client; +import com.devoops.exception.GithubNotFoundException; import com.devoops.exception.custom.GssException; import com.devoops.exception.errorcode.ErrorCode; import java.util.Map; @@ -27,7 +28,7 @@ public ExchangeFilterFunction githubErrorLogger() { "response", body )); if (response.statusCode().isSameCodeAs(HttpStatusCode.valueOf(404))) { - return Mono.error(new GssException(ErrorCode.MALFORMED_GITHUB_REPOSITORY_URL)); + return Mono.error(new GithubNotFoundException("깃허브에서 자원을 찾을 수 없습니다.")); } return Mono.error(new GssException(ErrorCode.GITHUB_CLIENT_ERROR)); }); From c608d5eade2a91809e90e6b32fd85cbf926177d1 Mon Sep 17 00:00:00 2001 From: coli Date: Tue, 5 Aug 2025 22:15:49 +0900 Subject: [PATCH 3/4] =?UTF-8?q?test:=20=EC=9B=B9=ED=9B=85=20=EC=97=86?= =?UTF-8?q?=EB=8A=94=20=EC=8B=9C=EB=82=98=EB=A6=AC=EC=98=A4=EC=9D=98=20?= =?UTF-8?q?=ED=8A=B8=EB=9E=98=ED=82=B9=20=EC=A0=9C=EA=B1=B0=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../facade/RepositoryFacadeServiceTest.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gss-api-app/src/test/java/com/devoops/service/facade/RepositoryFacadeServiceTest.java b/gss-api-app/src/test/java/com/devoops/service/facade/RepositoryFacadeServiceTest.java index 0802bd2f..3599bbd1 100644 --- a/gss-api-app/src/test/java/com/devoops/service/facade/RepositoryFacadeServiceTest.java +++ b/gss-api-app/src/test/java/com/devoops/service/facade/RepositoryFacadeServiceTest.java @@ -4,6 +4,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.jupiter.api.Assertions.assertAll; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.times; @@ -16,6 +17,7 @@ import com.devoops.dto.response.GithubRepoInfoResponse; import com.devoops.dto.response.OwnerResponse; import com.devoops.dto.response.WebHookCreateResponse; +import com.devoops.exception.GithubNotFoundException; import com.devoops.exception.custom.GssException; import com.devoops.exception.errorcode.ErrorCode; import org.junit.jupiter.api.Nested; @@ -78,4 +80,23 @@ private void mockingGithubClient() { .thenReturn(mockWebHookCreateResponse); } } + + @Nested + class Delete { + + @Test + void 웹훅을_찾지_못해도_레포지토리_트래킹을_끊을_수_있다() { + User user = userGenerator.generate("김건우"); + GithubRepository repo = repoGenerator.generate(user, "건우의 레포"); + webhookGenerator.generate(user, repo); + Mockito.doThrow(new GithubNotFoundException("mocking error")) + .when(gitHubClient) + .deleteWebhook(anyString(), anyString(), anyString(), anyLong()); + + repositoryFacadeService.deleteRepository(user, repo.getId()); + + GithubRepository foundRepo = githubRepoDomainRepository.findByIdAndUserId(repo.getId(), user.getId()); + assertThat(foundRepo.isTracking()).isFalse(); + } + } } From 6d04d99903501606ade9f0fb91adf1b88cdb13c8 Mon Sep 17 00:00:00 2001 From: coli Date: Tue, 5 Aug 2025 22:19:27 +0900 Subject: [PATCH 4/4] =?UTF-8?q?refactor:=20=EB=A1=9C=EA=B9=85=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/devoops/service/GitHubService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gss-api-app/src/main/java/com/devoops/service/GitHubService.java b/gss-api-app/src/main/java/com/devoops/service/GitHubService.java index 47ebee5b..d7ec08f7 100644 --- a/gss-api-app/src/main/java/com/devoops/service/GitHubService.java +++ b/gss-api-app/src/main/java/com/devoops/service/GitHubService.java @@ -106,7 +106,7 @@ private void tryDeleteWebhook(GithubToken githubToken, GithubWebhook webhook, Gi webhook.getExternalId() ); } catch (GithubNotFoundException githubNotFoundException) { - log.error("깃허브 레포에서 웹훅을 찾을 수 없습니다 : {}, repo : {} ", githubNotFoundException, repo); + log.error("깃허브 레포에서 웹훅을 찾을 수 없습니다 : {}, repo : {} ", githubNotFoundException, repo.getName()); } } }