Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ DataGSM의 OpenAPI를 추상화된 환경에서 제공합니다.
<dependency>
<groupId>com.github.themoment-team</groupId>
<artifactId>datagsm-openapi-sdk-java</artifactId>
<version>1.0.0</version>
<version>1.1.1</version>
</dependency>
```
### 설치 - Gradle
Expand All @@ -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'
}
```

Expand All @@ -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")
}
```

Expand Down
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ plugins {
}

group = "team.themoment.datagsm.sdk"
version = "1.1.0"
version = "1.1.1"

java {
toolchain {
Expand Down
59 changes: 36 additions & 23 deletions src/main/java/team/themoment/datagsm/sdk/openapi/DataGsmClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,90 +2,97 @@

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();
}

/**
* 리소스 정리
*/
@Override
public void close() {
if (httpClient != null) {
httpClient.close();
}
delegate.close();
}

/**
* DataGsmClient 빌더
*
* @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;
Expand All @@ -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;
Expand All @@ -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;
Expand All @@ -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);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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);
}
}
}