From 1a4e43cd38bcd733687152dee30bface5694648f Mon Sep 17 00:00:00 2001 From: snowykte0426 Date: Sat, 21 Feb 2026 19:29:27 +0900 Subject: [PATCH 1/2] =?UTF-8?q?update:=20DataGsmOpenApiClient=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B0=8F=20DataGsmClient=20Deprecated=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datagsm/sdk/openapi/DataGsmClient.java | 59 +++++--- .../sdk/openapi/DataGsmOpenApiClient.java | 132 ++++++++++++++++++ 2 files changed, 168 insertions(+), 23 deletions(-) create mode 100644 src/main/java/team/themoment/datagsm/sdk/openapi/DataGsmOpenApiClient.java diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/DataGsmClient.java b/src/main/java/team/themoment/datagsm/sdk/openapi/DataGsmClient.java index d9c4cb7..d2d726d 100644 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/DataGsmClient.java +++ b/src/main/java/team/themoment/datagsm/sdk/openapi/DataGsmClient.java @@ -2,65 +2,69 @@ import team.themoment.datagsm.sdk.openapi.client.*; import team.themoment.datagsm.sdk.openapi.http.HttpClient; -import team.themoment.datagsm.sdk.openapi.http.OkHttpClientImpl; /** * DataGSM OpenAPI 메인 클라이언트 + * + * @deprecated {@link DataGsmOpenApiClient}를 사용하세요. */ +@Deprecated(since = "1.1.1", forRemoval = true) public class DataGsmClient implements AutoCloseable { - private static final String DEFAULT_BASE_URL = "https://openapi.data.hellogsm.kr"; - - private final HttpClient httpClient; - private final StudentApi studentApi; - private final ClubApi clubApi; - private final NeisApi neisApi; - private final ProjectApi projectApi; + private final DataGsmOpenApiClient delegate; private DataGsmClient(Builder builder) { - this.httpClient = builder.httpClient != null ? builder.httpClient : new OkHttpClientImpl(); - - String baseUrl = builder.baseUrl != null ? builder.baseUrl : DEFAULT_BASE_URL; - - this.studentApi = new StudentApiImpl(httpClient, builder.apiKey, baseUrl); - this.clubApi = new ClubApiImpl(httpClient, builder.apiKey, baseUrl); - this.neisApi = new NeisApiImpl(httpClient, builder.apiKey, baseUrl); - this.projectApi = new ProjectApiImpl(httpClient, builder.apiKey, baseUrl); + DataGsmOpenApiClient.Builder delegateBuilder = DataGsmOpenApiClient.builder(builder.apiKey); + if (builder.baseUrl != null) { + delegateBuilder.baseUrl(builder.baseUrl); + } + if (builder.httpClient != null) { + delegateBuilder.httpClient(builder.httpClient); + } + this.delegate = delegateBuilder.build(); } /** * 학생 API 반환 * * @return 학생 API + * @deprecated {@link DataGsmOpenApiClient#students()}를 사용하세요. */ + @Deprecated public StudentApi students() { - return studentApi; + return delegate.students(); } /** * 동아리 API 반환 * * @return 동아리 API + * @deprecated {@link DataGsmOpenApiClient#clubs()}를 사용하세요. */ + @Deprecated public ClubApi clubs() { - return clubApi; + return delegate.clubs(); } /** * NEIS API 반환 * * @return NEIS API + * @deprecated {@link DataGsmOpenApiClient#neis()}를 사용하세요. */ + @Deprecated public NeisApi neis() { - return neisApi; + return delegate.neis(); } /** * 프로젝트 API 반환 * * @return 프로젝트 API + * @deprecated {@link DataGsmOpenApiClient#projects()}를 사용하세요. */ + @Deprecated public ProjectApi projects() { - return projectApi; + return delegate.projects(); } /** @@ -68,9 +72,7 @@ public ProjectApi projects() { */ @Override public void close() { - if (httpClient != null) { - httpClient.close(); - } + delegate.close(); } /** @@ -78,14 +80,19 @@ public void close() { * * @param apiKey API 키 * @return 빌더 + * @deprecated {@link DataGsmOpenApiClient#builder(String)}를 사용하세요. */ + @Deprecated public static Builder builder(String apiKey) { return new Builder(apiKey); } /** * 빌더 클래스 + * + * @deprecated {@link DataGsmOpenApiClient.Builder}를 사용하세요. */ + @Deprecated public static class Builder { private final String apiKey; private String baseUrl; @@ -103,7 +110,9 @@ private Builder(String apiKey) { * * @param baseUrl 베이스 URL * @return 빌더 + * @deprecated {@link DataGsmOpenApiClient.Builder#baseUrl(String)}를 사용하세요. */ + @Deprecated public Builder baseUrl(String baseUrl) { this.baseUrl = baseUrl; return this; @@ -114,7 +123,9 @@ public Builder baseUrl(String baseUrl) { * * @param httpClient HTTP 클라이언트 * @return 빌더 + * @deprecated {@link DataGsmOpenApiClient.Builder#httpClient(HttpClient)}를 사용하세요. */ + @Deprecated public Builder httpClient(HttpClient httpClient) { this.httpClient = httpClient; return this; @@ -124,7 +135,9 @@ public Builder httpClient(HttpClient httpClient) { * DataGsmClient 생성 * * @return DataGsmClient + * @deprecated {@link DataGsmOpenApiClient.Builder#build()}를 사용하세요. */ + @Deprecated public DataGsmClient build() { return new DataGsmClient(this); } diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/DataGsmOpenApiClient.java b/src/main/java/team/themoment/datagsm/sdk/openapi/DataGsmOpenApiClient.java new file mode 100644 index 0000000..f3c98a2 --- /dev/null +++ b/src/main/java/team/themoment/datagsm/sdk/openapi/DataGsmOpenApiClient.java @@ -0,0 +1,132 @@ +package team.themoment.datagsm.sdk.openapi; + +import team.themoment.datagsm.sdk.openapi.client.*; +import team.themoment.datagsm.sdk.openapi.http.HttpClient; +import team.themoment.datagsm.sdk.openapi.http.OkHttpClientImpl; + +/** + * DataGSM OpenAPI 메인 클라이언트 + */ +public class DataGsmOpenApiClient implements AutoCloseable { + private static final String DEFAULT_BASE_URL = "https://openapi.data.hellogsm.kr"; + + private final HttpClient httpClient; + private final StudentApi studentApi; + private final ClubApi clubApi; + private final NeisApi neisApi; + private final ProjectApi projectApi; + + private DataGsmOpenApiClient(Builder builder) { + this.httpClient = builder.httpClient != null ? builder.httpClient : new OkHttpClientImpl(); + + String baseUrl = builder.baseUrl != null ? builder.baseUrl : DEFAULT_BASE_URL; + + this.studentApi = new StudentApiImpl(httpClient, builder.apiKey, baseUrl); + this.clubApi = new ClubApiImpl(httpClient, builder.apiKey, baseUrl); + this.neisApi = new NeisApiImpl(httpClient, builder.apiKey, baseUrl); + this.projectApi = new ProjectApiImpl(httpClient, builder.apiKey, baseUrl); + } + + /** + * 학생 API 반환 + * + * @return 학생 API + */ + public StudentApi students() { + return studentApi; + } + + /** + * 동아리 API 반환 + * + * @return 동아리 API + */ + public ClubApi clubs() { + return clubApi; + } + + /** + * NEIS API 반환 + * + * @return NEIS API + */ + public NeisApi neis() { + return neisApi; + } + + /** + * 프로젝트 API 반환 + * + * @return 프로젝트 API + */ + public ProjectApi projects() { + return projectApi; + } + + /** + * 리소스 정리 + */ + @Override + public void close() { + if (httpClient != null) { + httpClient.close(); + } + } + + /** + * DataGsmOpenApiClient 빌더 + * + * @param apiKey API 키 + * @return 빌더 + */ + public static Builder builder(String apiKey) { + return new Builder(apiKey); + } + + /** + * 빌더 클래스 + */ + public static class Builder { + private final String apiKey; + private String baseUrl; + private HttpClient httpClient; + + private Builder(String apiKey) { + if (apiKey == null || apiKey.trim().isEmpty()) { + throw new IllegalArgumentException("API key is required"); + } + this.apiKey = apiKey; + } + + /** + * 베이스 URL 설정 (선택) + * + * @param baseUrl 베이스 URL + * @return 빌더 + */ + public Builder baseUrl(String baseUrl) { + this.baseUrl = baseUrl; + return this; + } + + /** + * HTTP 클라이언트 설정 (선택) + * + * @param httpClient HTTP 클라이언트 + * @return 빌더 + */ + public Builder httpClient(HttpClient httpClient) { + this.httpClient = httpClient; + return this; + } + + /** + * DataGsmOpenApiClient 생성 + * + * @return DataGsmOpenApiClient + */ + public DataGsmOpenApiClient build() { + return new DataGsmOpenApiClient(this); + } + } +} \ No newline at end of file From 5dddfda5b0afa9351c00f5fd8c2e0f66387f1412 Mon Sep 17 00:00:00 2001 From: snowykte0426 Date: Sat, 21 Feb 2026 19:29:32 +0900 Subject: [PATCH 2/2] =?UTF-8?q?update:=201.1.1=EB=A1=9C=20=EB=B2=84?= =?UTF-8?q?=EC=A0=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++--- build.gradle.kts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index da1a852..be61dab 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ DataGSM의 OpenAPI를 추상화된 환경에서 제공합니다. com.github.themoment-team datagsm-openapi-sdk-java - 1.0.0 + 1.1.1 ``` ### 설치 - Gradle @@ -27,7 +27,7 @@ repositories { } dependencies { - implementation 'com.github.themoment-team:datagsm-openapi-sdk-java:1.0.0' + implementation 'com.github.themoment-team:datagsm-openapi-sdk-java:1.1.1' } ``` @@ -38,7 +38,7 @@ repositories { } dependencies { - implementation("com.github.themoment-team:datagsm-openapi-sdk-java:1.0.0") + implementation("com.github.themoment-team:datagsm-openapi-sdk-java:1.1.1") } ``` diff --git a/build.gradle.kts b/build.gradle.kts index ec5e72e..b4a6c14 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ plugins { } group = "team.themoment.datagsm.sdk" -version = "1.1.0" +version = "1.1.1" java { toolchain {