diff --git a/.github/workflows/CD.yml b/.github/workflows/CD.yml index ebac384..acd2428 100644 --- a/.github/workflows/CD.yml +++ b/.github/workflows/CD.yml @@ -5,19 +5,23 @@ on: tags: - '*' +permissions: + contents: read + packages: write + jobs: build-and-publish: runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@v6 + uses: actions/checkout@v4 - name: Set up JDK 25 uses: actions/setup-java@v5 with: java-version: '25' - distribution: 'oracle' + distribution: 'temurin' - name: Setup Gradle uses: gradle/actions/setup-gradle@v5 @@ -25,11 +29,8 @@ jobs: - name: Grant execute permission for gradlew run: chmod +x gradlew - - name: Build with Gradle - run: ./gradlew clean build publishToMavenLocal -x test - - - name: Trigger JitPack build - run: | - TAG_NAME=${GITHUB_REF#refs/tags/} - REPO_FULL_NAME=${{ github.repository }} - curl -s "https://jitpack.io/api/builds/com.github.${REPO_FULL_NAME//\//.}/${TAG_NAME}" \ No newline at end of file + - name: Publish to GitHub Packages + run: ./gradlew clean publish -x test + env: + GITHUB_ACTOR: ${{ github.actor }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 43e6ecc..f38c736 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -4,26 +4,34 @@ on: push: branches: - main + - develop pull_request: branches: - main + - develop jobs: - build-and-publish: + build: runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@v6 + uses: actions/checkout@v4 - name: Set up JDK 25 uses: actions/setup-java@v5 with: java-version: '25' - distribution: 'oracle' + distribution: 'temurin' - name: Setup Gradle uses: gradle/actions/setup-gradle@v5 + - name: Grant execute permission for gradlew + run: chmod +x gradlew + - name: Build with Gradle run: ./gradlew build + env: + GITHUB_ACTOR: ${{ github.actor }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/build.gradle.kts b/build.gradle.kts index 0d91560..de7ffa4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,28 +4,44 @@ plugins { } group = "team.themoment.datagsm.sdk" -version = "1.7.0" +version = "2.0.0" java { toolchain { languageVersion = JavaLanguageVersion.of(25) } - sourceCompatibility = JavaVersion.VERSION_13 - targetCompatibility = JavaVersion.VERSION_13 + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 withSourcesJar() withJavadocJar() } +val gprUser: String = (findProperty("gpr.user") as String?) ?: System.getenv("GITHUB_ACTOR") ?: "" +val gprToken: String = (findProperty("gpr.token") as String?) ?: System.getenv("GITHUB_TOKEN") ?: "" + repositories { mavenCentral() + maven { + name = "GitHubPackages" + url = uri("https://maven.pkg.github.com/themoment-team/datagsm-server") + credentials { + username = gprUser + password = gprToken + } + } } dependencies { + // Shared types from datagsm-server (api: 반환 타입이 공개 API에 노출되므로 소비자 컴파일 클래스패스에 포함) + api("team.themoment:datagsm-shared-jvm:20260618-38") + implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.6.2") + // HTTP Client implementation("com.squareup.okhttp3:okhttp:4.12.0") - // JSON Processing - implementation("com.google.code.gson:gson:2.11.0") + // JSON Processing (Jackson + Kotlin support) + implementation("com.fasterxml.jackson.core:jackson-databind:2.18.3") + implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.18.3") // Testing testImplementation(platform("org.junit:junit-bom:5.11.4")) @@ -38,6 +54,17 @@ tasks.test { } publishing { + repositories { + maven { + name = "GitHubPackages" + url = uri("https://maven.pkg.github.com/themoment-team/datagsm-openapi-sdk-java") + credentials { + username = gprUser + password = gprToken + } + } + } + publications { create("maven") { groupId = project.group.toString() @@ -78,7 +105,7 @@ publishing { tasks.withType { options.encoding = "UTF-8" - options.release.set(13) + options.release.set(17) } tasks.withType { diff --git a/gradle.properties b/gradle.properties index ec2257a..5d1f518 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,3 +3,4 @@ org.gradle.parallel=true org.gradle.caching=true org.gradle.daemon=true org.gradle.configuration-cache=true + diff --git a/jitpack.yml b/jitpack.yml deleted file mode 100644 index fdaec9f..0000000 --- a/jitpack.yml +++ /dev/null @@ -1,7 +0,0 @@ -jdk: - - openjdk25 -before_install: - - sdk install java 25-open - - sdk use java 25-open -install: - - ./gradlew clean build publishToMavenLocal -x test diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/client/ClubApi.java b/src/main/java/team/themoment/datagsm/sdk/openapi/client/ClubApi.java index 91c68c5..b53e5c2 100644 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/client/ClubApi.java +++ b/src/main/java/team/themoment/datagsm/sdk/openapi/client/ClubApi.java @@ -1,30 +1,17 @@ package team.themoment.datagsm.sdk.openapi.client; -import team.themoment.datagsm.sdk.openapi.model.*; +import team.themoment.datagsm.sdk.openapi.model.SortDirection; +import team.themoment.datagsm.shared.domain.club.dto.response.ClubListResDto; +import team.themoment.datagsm.shared.domain.club.dto.response.ClubResDto; +import team.themoment.datagsm.shared.domain.club.entity.constant.ClubSortBy; +import team.themoment.datagsm.shared.domain.club.entity.constant.ClubStatus; +import team.themoment.datagsm.shared.domain.club.entity.constant.ClubType; -/** - * 동아리 데이터 API 인터페이스 - */ public interface ClubApi { - /** - * 동아리 목록 조회 - * - * @param request 조회 조건 - * @return 동아리 응답 - */ - ClubResponse getClubs(ClubRequest request); - - /** - * 특정 동아리 조회 - * - * @param clubId 동아리 ID - * @return 동아리 상세 정보 - */ - ClubDetail getClub(Long clubId); - - /** - * 동아리 요청 파라미터 빌더 - */ + ClubListResDto getClubs(ClubRequest request); + + ClubResDto getClub(Long clubId); + class ClubRequest { private Long clubId; private String clubName; @@ -94,44 +81,15 @@ public ClubRequest sortDirection(SortDirection sortDirection) { return this; } - public Long getClubId() { - return clubId; - } - - public String getClubName() { - return clubName; - } - - public ClubType getClubType() { - return clubType; - } - - public ClubStatus getStatus() { - return status; - } - - public Integer getFoundedYear() { - return foundedYear; - } - - public Integer getPage() { - return page; - } - - public Integer getSize() { - return size; - } - - public Boolean getIncludeLeaderInParticipants() { - return includeLeaderInParticipants; - } - - public ClubSortBy getSortBy() { - return sortBy; - } - - public SortDirection getSortDirection() { - return sortDirection; - } + public Long getClubId() { return clubId; } + public String getClubName() { return clubName; } + public ClubType getClubType() { return clubType; } + public ClubStatus getStatus() { return status; } + public Integer getFoundedYear() { return foundedYear; } + public Integer getPage() { return page; } + public Integer getSize() { return size; } + public Boolean getIncludeLeaderInParticipants() { return includeLeaderInParticipants; } + public ClubSortBy getSortBy() { return sortBy; } + public SortDirection getSortDirection() { return sortDirection; } } } diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/client/ClubApiImpl.java b/src/main/java/team/themoment/datagsm/sdk/openapi/client/ClubApiImpl.java index 4b7c1d5..229d8fb 100644 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/client/ClubApiImpl.java +++ b/src/main/java/team/themoment/datagsm/sdk/openapi/client/ClubApiImpl.java @@ -1,17 +1,15 @@ package team.themoment.datagsm.sdk.openapi.client; -import com.google.gson.reflect.TypeToken; +import com.fasterxml.jackson.core.type.TypeReference; import team.themoment.datagsm.sdk.openapi.http.HttpClient; import team.themoment.datagsm.sdk.openapi.http.JsonUtil; -import team.themoment.datagsm.sdk.openapi.model.*; +import team.themoment.datagsm.sdk.openapi.model.CommonApiResponse; +import team.themoment.datagsm.shared.domain.club.dto.response.ClubListResDto; +import team.themoment.datagsm.shared.domain.club.dto.response.ClubResDto; -import java.lang.reflect.Type; import java.util.HashMap; import java.util.Map; -/** - * 동아리 데이터 API 구현 - */ public class ClubApiImpl implements ClubApi { private final HttpClient httpClient; private final String apiKey; @@ -24,25 +22,26 @@ public ClubApiImpl(HttpClient httpClient, String apiKey, String baseUrl) { } @Override - public ClubResponse getClubs(ClubRequest request) { + public ClubListResDto getClubs(ClubRequest request) { Map headers = createHeaders(); Map queryParams = buildClubQueryParams(request); String responseBody = httpClient.get(baseUrl + "/v1/clubs", headers, queryParams); - Type type = new TypeToken>(){}.getType(); - CommonApiResponse apiResponse = JsonUtil.fromJson(responseBody, type); + CommonApiResponse apiResponse = JsonUtil.fromJson( + responseBody, new TypeReference>() {} + ); return apiResponse.getData(); } @Override - public ClubDetail getClub(Long clubId) { + public ClubResDto getClub(Long clubId) { ClubRequest request = new ClubRequest().clubId(clubId); - ClubResponse response = getClubs(request); + ClubListResDto response = getClubs(request); - if (response.getClubs() != null && !response.getClubs().isEmpty()) { - return response.getClubs().get(0); + ClubResDto[] clubs = response.getClubs(); + if (clubs != null && clubs.length > 0) { + return clubs[0]; } - return null; } diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/client/NeisApi.java b/src/main/java/team/themoment/datagsm/sdk/openapi/client/NeisApi.java index c21aa98..f5fab74 100644 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/client/NeisApi.java +++ b/src/main/java/team/themoment/datagsm/sdk/openapi/client/NeisApi.java @@ -1,40 +1,18 @@ package team.themoment.datagsm.sdk.openapi.client; -import team.themoment.datagsm.sdk.openapi.model.*; +import team.themoment.datagsm.shared.domain.neis.dto.meal.response.MealResDto; +import team.themoment.datagsm.shared.domain.neis.dto.schedule.response.ScheduleResDto; +import team.themoment.datagsm.shared.domain.neis.dto.timetable.response.TimetableResDto; + import java.time.LocalDate; -import java.util.List; -/** - * NEIS 데이터 API 인터페이스 - */ public interface NeisApi { - /** - * 급식 정보 조회 - * - * @param request 조회 조건 - * @return 급식 목록 - */ - List getMeals(MealRequest request); - - /** - * 학사일정 정보 조회 - * - * @param request 조회 조건 - * @return 학사일정 목록 - */ - List getSchedules(ScheduleRequest request); - - /** - * 시간표 정보 조회 - * - * @param request 조회 조건 - * @return 시간표 목록 - */ - List getTimetables(TimetableRequest request); - - /** - * 급식 요청 파라미터 빌더 - */ + MealResDto getMeals(MealRequest request); + + ScheduleResDto getSchedules(ScheduleRequest request); + + TimetableResDto getTimetables(TimetableRequest request); + class MealRequest { private LocalDate date; private LocalDate fromDate; @@ -57,22 +35,11 @@ public MealRequest toDate(LocalDate toDate) { return this; } - public LocalDate getDate() { - return date; - } - - public LocalDate getFromDate() { - return fromDate; - } - - public LocalDate getToDate() { - return toDate; - } + public LocalDate getDate() { return date; } + public LocalDate getFromDate() { return fromDate; } + public LocalDate getToDate() { return toDate; } } - /** - * 시간표 요청 파라미터 빌더 - */ class TimetableRequest { private final int grade; private final int classNum; @@ -100,30 +67,13 @@ public TimetableRequest toDate(LocalDate toDate) { return this; } - public int getGrade() { - return grade; - } - - public int getClassNum() { - return classNum; - } - - public LocalDate getDate() { - return date; - } - - public LocalDate getFromDate() { - return fromDate; - } - - public LocalDate getToDate() { - return toDate; - } + public int getGrade() { return grade; } + public int getClassNum() { return classNum; } + public LocalDate getDate() { return date; } + public LocalDate getFromDate() { return fromDate; } + public LocalDate getToDate() { return toDate; } } - /** - * 학사일정 요청 파라미터 빌더 - */ class ScheduleRequest { private LocalDate date; private LocalDate fromDate; @@ -146,16 +96,8 @@ public ScheduleRequest toDate(LocalDate toDate) { return this; } - public LocalDate getDate() { - return date; - } - - public LocalDate getFromDate() { - return fromDate; - } - - public LocalDate getToDate() { - return toDate; - } + public LocalDate getDate() { return date; } + public LocalDate getFromDate() { return fromDate; } + public LocalDate getToDate() { return toDate; } } -} \ No newline at end of file +} diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/client/NeisApiImpl.java b/src/main/java/team/themoment/datagsm/sdk/openapi/client/NeisApiImpl.java index d9f1345..52d50c7 100644 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/client/NeisApiImpl.java +++ b/src/main/java/team/themoment/datagsm/sdk/openapi/client/NeisApiImpl.java @@ -1,19 +1,17 @@ package team.themoment.datagsm.sdk.openapi.client; -import com.google.gson.reflect.TypeToken; +import com.fasterxml.jackson.core.type.TypeReference; import team.themoment.datagsm.sdk.openapi.http.HttpClient; import team.themoment.datagsm.sdk.openapi.http.JsonUtil; -import team.themoment.datagsm.sdk.openapi.model.*; +import team.themoment.datagsm.sdk.openapi.model.CommonApiResponse; +import team.themoment.datagsm.shared.domain.neis.dto.meal.response.MealResDto; +import team.themoment.datagsm.shared.domain.neis.dto.schedule.response.ScheduleResDto; +import team.themoment.datagsm.shared.domain.neis.dto.timetable.response.TimetableResDto; -import java.lang.reflect.Type; import java.time.format.DateTimeFormatter; import java.util.HashMap; -import java.util.List; import java.util.Map; -/** - * NEIS 데이터 API 구현 - */ public class NeisApiImpl implements NeisApi { private final HttpClient httpClient; private final String apiKey; @@ -27,36 +25,39 @@ public NeisApiImpl(HttpClient httpClient, String apiKey, String baseUrl) { } @Override - public List getMeals(MealRequest request) { + public MealResDto getMeals(MealRequest request) { Map headers = createHeaders(); Map queryParams = buildMealQueryParams(request); String responseBody = httpClient.get(baseUrl + "/v1/neis/meals", headers, queryParams); - Type type = new TypeToken>(){}.getType(); - CommonApiResponse apiResponse = JsonUtil.fromJson(responseBody, type); - return apiResponse.getData().meals; + CommonApiResponse apiResponse = JsonUtil.fromJson( + responseBody, new TypeReference>() {} + ); + return apiResponse.getData(); } @Override - public List getSchedules(ScheduleRequest request) { + public ScheduleResDto getSchedules(ScheduleRequest request) { Map headers = createHeaders(); Map queryParams = buildScheduleQueryParams(request); String responseBody = httpClient.get(baseUrl + "/v1/neis/schedules", headers, queryParams); - Type type = new TypeToken>(){}.getType(); - CommonApiResponse apiResponse = JsonUtil.fromJson(responseBody, type); - return apiResponse.getData().schedules; + CommonApiResponse apiResponse = JsonUtil.fromJson( + responseBody, new TypeReference>() {} + ); + return apiResponse.getData(); } @Override - public List getTimetables(TimetableRequest request) { + public TimetableResDto getTimetables(TimetableRequest request) { Map headers = createHeaders(); Map queryParams = buildTimetableQueryParams(request); String responseBody = httpClient.get(baseUrl + "/v1/neis/timetables", headers, queryParams); - Type type = new TypeToken>(){}.getType(); - CommonApiResponse apiResponse = JsonUtil.fromJson(responseBody, type); - return apiResponse.getData().timetables; + CommonApiResponse apiResponse = JsonUtil.fromJson( + responseBody, new TypeReference>() {} + ); + return apiResponse.getData(); } private Map buildMealQueryParams(MealRequest request) { @@ -115,16 +116,4 @@ private Map createHeaders() { headers.put("X-API-KEY", apiKey); return headers; } - - private static class MealResponseWrapper { - List meals; - } - - private static class ScheduleResponseWrapper { - List schedules; - } - - private static class TimetableResponseWrapper { - List timetables; - } -} \ No newline at end of file +} diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/client/ProjectApi.java b/src/main/java/team/themoment/datagsm/sdk/openapi/client/ProjectApi.java index f6c83c7..59c5006 100644 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/client/ProjectApi.java +++ b/src/main/java/team/themoment/datagsm/sdk/openapi/client/ProjectApi.java @@ -1,30 +1,15 @@ package team.themoment.datagsm.sdk.openapi.client; -import team.themoment.datagsm.sdk.openapi.model.*; +import team.themoment.datagsm.sdk.openapi.model.SortDirection; +import team.themoment.datagsm.shared.domain.project.dto.response.ProjectListResDto; +import team.themoment.datagsm.shared.domain.project.dto.response.ProjectResDto; +import team.themoment.datagsm.shared.domain.project.entity.constant.ProjectSortBy; -/** - * 프로젝트 데이터 API 인터페이스 - */ public interface ProjectApi { - /** - * 프로젝트 목록 조회 - * - * @param request 조회 조건 - * @return 프로젝트 응답 - */ - ProjectResponse getProjects(ProjectRequest request); + ProjectListResDto getProjects(ProjectRequest request); - /** - * 특정 프로젝트 조회 - * - * @param projectId 프로젝트 ID - * @return 프로젝트 정보 - */ - Project getProject(Long projectId); + ProjectResDto getProject(Long projectId); - /** - * 프로젝트 요청 파라미터 빌더 - */ class ProjectRequest { private Long projectId; private String projectName; @@ -75,32 +60,12 @@ public ProjectRequest sortDirection(SortDirection sortDirection) { return this; } - public Long getProjectId() { - return projectId; - } - - public String getProjectName() { - return projectName; - } - - public Long getClubId() { - return clubId; - } - - public Integer getPage() { - return page; - } - - public Integer getSize() { - return size; - } - - public ProjectSortBy getSortBy() { - return sortBy; - } - - public SortDirection getSortDirection() { - return sortDirection; - } + public Long getProjectId() { return projectId; } + public String getProjectName() { return projectName; } + public Long getClubId() { return clubId; } + public Integer getPage() { return page; } + public Integer getSize() { return size; } + public ProjectSortBy getSortBy() { return sortBy; } + public SortDirection getSortDirection() { return sortDirection; } } -} \ No newline at end of file +} diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/client/ProjectApiImpl.java b/src/main/java/team/themoment/datagsm/sdk/openapi/client/ProjectApiImpl.java index bf9a3e5..84b6cdf 100644 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/client/ProjectApiImpl.java +++ b/src/main/java/team/themoment/datagsm/sdk/openapi/client/ProjectApiImpl.java @@ -1,17 +1,15 @@ package team.themoment.datagsm.sdk.openapi.client; -import com.google.gson.reflect.TypeToken; +import com.fasterxml.jackson.core.type.TypeReference; import team.themoment.datagsm.sdk.openapi.http.HttpClient; import team.themoment.datagsm.sdk.openapi.http.JsonUtil; -import team.themoment.datagsm.sdk.openapi.model.*; +import team.themoment.datagsm.sdk.openapi.model.CommonApiResponse; +import team.themoment.datagsm.shared.domain.project.dto.response.ProjectListResDto; +import team.themoment.datagsm.shared.domain.project.dto.response.ProjectResDto; -import java.lang.reflect.Type; import java.util.HashMap; import java.util.Map; -/** - * 프로젝트 데이터 API 구현 - */ public class ProjectApiImpl implements ProjectApi { private final HttpClient httpClient; private final String apiKey; @@ -24,25 +22,26 @@ public ProjectApiImpl(HttpClient httpClient, String apiKey, String baseUrl) { } @Override - public ProjectResponse getProjects(ProjectRequest request) { + public ProjectListResDto getProjects(ProjectRequest request) { Map headers = createHeaders(); Map queryParams = buildProjectQueryParams(request); String responseBody = httpClient.get(baseUrl + "/v1/projects", headers, queryParams); - Type type = new TypeToken>(){}.getType(); - CommonApiResponse apiResponse = JsonUtil.fromJson(responseBody, type); + CommonApiResponse apiResponse = JsonUtil.fromJson( + responseBody, new TypeReference>() {} + ); return apiResponse.getData(); } @Override - public Project getProject(Long projectId) { + public ProjectResDto getProject(Long projectId) { ProjectRequest request = new ProjectRequest().projectId(projectId); - ProjectResponse response = getProjects(request); + ProjectListResDto response = getProjects(request); - if (response.getProjects() != null && !response.getProjects().isEmpty()) { - return response.getProjects().get(0); + ProjectResDto[] projects = response.getProjects(); + if (projects != null && projects.length > 0) { + return projects[0]; } - return null; } @@ -79,4 +78,4 @@ private Map createHeaders() { headers.put("X-API-KEY", apiKey); return headers; } -} \ No newline at end of file +} diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/client/StudentApi.java b/src/main/java/team/themoment/datagsm/sdk/openapi/client/StudentApi.java index 8972260..4fb014e 100644 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/client/StudentApi.java +++ b/src/main/java/team/themoment/datagsm/sdk/openapi/client/StudentApi.java @@ -1,30 +1,18 @@ package team.themoment.datagsm.sdk.openapi.client; -import team.themoment.datagsm.sdk.openapi.model.*; +import team.themoment.datagsm.sdk.openapi.model.EnrollmentFilter; +import team.themoment.datagsm.sdk.openapi.model.SortDirection; +import team.themoment.datagsm.shared.domain.student.dto.response.StudentListResDto; +import team.themoment.datagsm.shared.domain.student.dto.response.StudentResDto; +import team.themoment.datagsm.shared.domain.student.entity.constant.Sex; +import team.themoment.datagsm.shared.domain.student.entity.constant.StudentRole; +import team.themoment.datagsm.shared.domain.student.entity.constant.StudentSortBy; -/** - * 학생 데이터 API 인터페이스 - */ public interface StudentApi { - /** - * 학생 목록 조회 - * - * @param request 조회 조건 - * @return 학생 응답 - */ - StudentResponse getStudents(StudentRequest request); - - /** - * 특정 학생 조회 - * - * @param studentId 학생 ID - * @return 학생 정보 - */ - Student getStudent(Long studentId); - - /** - * 학생 요청 파라미터 빌더 - */ + StudentListResDto getStudents(StudentRequest request); + + StudentResDto getStudent(Long studentId); + class StudentRequest { private Long studentId; private String name; @@ -123,64 +111,20 @@ public StudentRequest sortDirection(SortDirection sortDirection) { return this; } - public Long getStudentId() { - return studentId; - } - - public String getName() { - return name; - } - - public String getEmail() { - return email; - } - - public Integer getGrade() { - return grade; - } - - public Integer getClassNum() { - return classNum; - } - - public Integer getNumber() { - return number; - } - - public Sex getSex() { - return sex; - } - - public StudentRole getRole() { - return role; - } - - public Integer getDormitoryRoom() { - return dormitoryRoom; - } - - public String getSpecialty() { - return specialty; - } - - public EnrollmentFilter getEnrollmentFilter() { - return enrollmentFilter; - } - - public Integer getPage() { - return page; - } - - public Integer getSize() { - return size; - } - - public StudentSortBy getSortBy() { - return sortBy; - } - - public SortDirection getSortDirection() { - return sortDirection; - } + public Long getStudentId() { return studentId; } + public String getName() { return name; } + public String getEmail() { return email; } + public Integer getGrade() { return grade; } + public Integer getClassNum() { return classNum; } + public Integer getNumber() { return number; } + public Sex getSex() { return sex; } + public StudentRole getRole() { return role; } + public Integer getDormitoryRoom() { return dormitoryRoom; } + public String getSpecialty() { return specialty; } + public EnrollmentFilter getEnrollmentFilter() { return enrollmentFilter; } + public Integer getPage() { return page; } + public Integer getSize() { return size; } + public StudentSortBy getSortBy() { return sortBy; } + public SortDirection getSortDirection() { return sortDirection; } } -} \ No newline at end of file +} diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/client/StudentApiImpl.java b/src/main/java/team/themoment/datagsm/sdk/openapi/client/StudentApiImpl.java index 5e82780..05b642c 100644 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/client/StudentApiImpl.java +++ b/src/main/java/team/themoment/datagsm/sdk/openapi/client/StudentApiImpl.java @@ -1,11 +1,12 @@ package team.themoment.datagsm.sdk.openapi.client; -import com.google.gson.reflect.TypeToken; +import com.fasterxml.jackson.core.type.TypeReference; import team.themoment.datagsm.sdk.openapi.http.HttpClient; import team.themoment.datagsm.sdk.openapi.http.JsonUtil; -import team.themoment.datagsm.sdk.openapi.model.*; +import team.themoment.datagsm.sdk.openapi.model.CommonApiResponse; +import team.themoment.datagsm.shared.domain.student.dto.response.StudentListResDto; +import team.themoment.datagsm.shared.domain.student.dto.response.StudentResDto; -import java.lang.reflect.Type; import java.util.HashMap; import java.util.Map; @@ -21,25 +22,26 @@ public StudentApiImpl(HttpClient httpClient, String apiKey, String baseUrl) { } @Override - public StudentResponse getStudents(StudentRequest request) { + public StudentListResDto getStudents(StudentRequest request) { Map headers = createHeaders(); Map queryParams = buildStudentQueryParams(request); String responseBody = httpClient.get(baseUrl + "/v1/students", headers, queryParams); - Type type = new TypeToken>(){}.getType(); - CommonApiResponse apiResponse = JsonUtil.fromJson(responseBody, type); + CommonApiResponse apiResponse = JsonUtil.fromJson( + responseBody, new TypeReference>() {} + ); return apiResponse.getData(); } @Override - public Student getStudent(Long studentId) { + public StudentResDto getStudent(Long studentId) { StudentRequest request = new StudentRequest().studentId(studentId); - StudentResponse response = getStudents(request); + StudentListResDto response = getStudents(request); - if (response.getStudents() != null && !response.getStudents().isEmpty()) { - return response.getStudents().get(0); + StudentResDto[] students = response.getStudents(); + if (students != null && students.length > 0) { + return students[0]; } - return null; } @@ -100,4 +102,4 @@ private Map createHeaders() { headers.put("X-API-KEY", apiKey); return headers; } -} \ No newline at end of file +} diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/http/JsonUtil.java b/src/main/java/team/themoment/datagsm/sdk/openapi/http/JsonUtil.java index 79c78a9..c2cf090 100644 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/http/JsonUtil.java +++ b/src/main/java/team/themoment/datagsm/sdk/openapi/http/JsonUtil.java @@ -1,78 +1,69 @@ package team.themoment.datagsm.sdk.openapi.http; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonDeserializer; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.fasterxml.jackson.module.kotlin.KotlinModule; +import kotlinx.datetime.LocalDate; import team.themoment.datagsm.sdk.openapi.exception.DataGsmException; -import java.lang.reflect.Type; -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; +import java.io.IOException; -/** - * JSON 직렬화/역직렬화 유틸리티 - */ public class JsonUtil { - private static final Gson GSON; + private static final ObjectMapper OBJECT_MAPPER; static { - GsonBuilder builder = new GsonBuilder(); + SimpleModule kotlinDatetimeModule = new SimpleModule(); + // kotlinx.datetime.LocalDate.parse(String) is synthetic — use fromEpochDays conversion instead + kotlinDatetimeModule.addDeserializer(LocalDate.class, new StdDeserializer(LocalDate.class) { + @Override + public LocalDate deserialize(JsonParser p, DeserializationContext ctx) throws IOException { + java.time.LocalDate javaDate = java.time.LocalDate.parse(p.getText()); + return LocalDate.Companion.fromEpochDays((int) javaDate.toEpochDay()); + } + }); + // kotlinx.datetime.LocalDate.toString() returns ISO-8601 (e.g. "2026-06-24") + kotlinDatetimeModule.addSerializer(LocalDate.class, new StdSerializer(LocalDate.class) { + @Override + public void serialize(LocalDate value, JsonGenerator gen, SerializerProvider provider) throws IOException { + gen.writeString(value.toString()); + } + }); - // LocalDate 처리 - DateTimeFormatter dateFormatter = DateTimeFormatter.ISO_LOCAL_DATE; - JsonDeserializer dateDeserializer = (json, typeOfT, context) -> - LocalDate.parse(json.getAsString(), dateFormatter); - - builder.registerTypeAdapter(LocalDate.class, dateDeserializer); - builder.registerTypeAdapter(LocalDate.class, (com.google.gson.JsonSerializer) - (src, typeOfSrc, context) -> context.serialize(src.format(dateFormatter))); - - GSON = builder.create(); + OBJECT_MAPPER = new ObjectMapper() + .registerModule(new KotlinModule.Builder().build()) + .registerModule(kotlinDatetimeModule) + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); } - /** - * JSON 문자열을 객체로 변환 - * - * @param json JSON 문자열 - * @param clazz 대상 클래스 - * @param 타입 - * @return 변환된 객체 - */ - public static T fromJson(String json, Class clazz) { + public static T fromJson(String json, TypeReference typeRef) { try { - return GSON.fromJson(json, clazz); + return OBJECT_MAPPER.readValue(json, typeRef); } catch (Exception e) { throw new DataGsmException("Failed to deserialize JSON: " + e.getMessage(), e); } } - /** - * JSON 문자열을 객체로 변환 (제네릭 타입) - * - * @param json JSON 문자열 - * @param type 대상 타입 - * @param 타입 - * @return 변환된 객체 - */ - public static T fromJson(String json, Type type) { + public static T fromJson(String json, Class clazz) { try { - return GSON.fromJson(json, type); + return OBJECT_MAPPER.readValue(json, clazz); } catch (Exception e) { throw new DataGsmException("Failed to deserialize JSON: " + e.getMessage(), e); } } - /** - * 객체를 JSON 문자열로 변환 - * - * @param obj 변환할 객체 - * @return JSON 문자열 - */ public static String toJson(Object obj) { try { - return GSON.toJson(obj); + return OBJECT_MAPPER.writeValueAsString(obj); } catch (Exception e) { throw new DataGsmException("Failed to serialize JSON: " + e.getMessage(), e); } } -} \ No newline at end of file +} diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/model/Club.java b/src/main/java/team/themoment/datagsm/sdk/openapi/model/Club.java deleted file mode 100644 index 80c1699..0000000 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/model/Club.java +++ /dev/null @@ -1,87 +0,0 @@ -package team.themoment.datagsm.sdk.openapi.model; - -import java.util.Optional; - -/** - * 동아리 정보 (간단 버전) - */ -public class Club { - private Long id; - private String name; - private ClubType type; - private ClubStatus status; - private Integer foundedYear; - private Integer abolishedYear; - - public Club() {} - - public Club(Long id, String name, ClubType type) { - this.id = id; - this.name = name; - this.type = type; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public ClubType getType() { - return type; - } - - public void setType(ClubType type) { - this.type = type; - } - - public ClubStatus getStatus() { - return status; - } - - public void setStatus(ClubStatus status) { - this.status = status; - } - - public Integer getFoundedYear() { - return foundedYear; - } - - public void setFoundedYear(Integer foundedYear) { - this.foundedYear = foundedYear; - } - - /** - * 동아리 폐지연도를 반환합니다. - * 운영 중인 동아리인 경우 비어 있을 수 있습니다. - */ - public Optional getAbolishedYear() { - return Optional.ofNullable(abolishedYear); - } - - public void setAbolishedYear(Integer abolishedYear) { - this.abolishedYear = abolishedYear; - } - - @Override - public String toString() { - return "Club{" + - "id=" + id + - ", name='" + name + '\'' + - ", type=" + type + - ", status=" + status + - ", foundedYear=" + foundedYear + - ", abolishedYear=" + abolishedYear + - '}'; - } -} diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/model/ClubDetail.java b/src/main/java/team/themoment/datagsm/sdk/openapi/model/ClubDetail.java deleted file mode 100644 index 582ac1b..0000000 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/model/ClubDetail.java +++ /dev/null @@ -1,107 +0,0 @@ -package team.themoment.datagsm.sdk.openapi.model; - -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; - -/** - * 동아리 상세 정보 - */ -public class ClubDetail { - private Long id; - private String name; - private ClubType type; - private ClubStatus status; - private Integer foundedYear; - private Integer abolishedYear; - private ParticipantInfo leader; - private List participants = new ArrayList<>(); - - public ClubDetail() {} - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public ClubType getType() { - return type; - } - - public void setType(ClubType type) { - this.type = type; - } - - public ClubStatus getStatus() { - return status; - } - - public void setStatus(ClubStatus status) { - this.status = status; - } - - public Integer getFoundedYear() { - return foundedYear; - } - - public void setFoundedYear(Integer foundedYear) { - this.foundedYear = foundedYear; - } - - /** - * 동아리 폐지연도를 반환합니다. - * 운영 중인 동아리인 경우 비어 있을 수 있습니다. - */ - public Optional getAbolishedYear() { - return Optional.ofNullable(abolishedYear); - } - - public void setAbolishedYear(Integer abolishedYear) { - this.abolishedYear = abolishedYear; - } - - /** - * 동아리 부장 정보를 반환합니다. - * 부장이 자퇴 또는 졸업 처리된 경우 비어 있을 수 있습니다. - */ - public Optional getLeader() { - return Optional.ofNullable(leader); - } - - public void setLeader(ParticipantInfo leader) { - this.leader = leader; - } - - public List getParticipants() { - return participants; - } - - public void setParticipants(List participants) { - this.participants = participants; - } - - @Override - public String toString() { - return "ClubDetail{" + - "id=" + id + - ", name='" + name + '\'' + - ", type=" + type + - ", status=" + status + - ", foundedYear=" + foundedYear + - ", abolishedYear=" + abolishedYear + - ", leader=" + leader + - ", participants=" + participants + - '}'; - } -} diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/model/ClubResponse.java b/src/main/java/team/themoment/datagsm/sdk/openapi/model/ClubResponse.java deleted file mode 100644 index 39ba6f5..0000000 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/model/ClubResponse.java +++ /dev/null @@ -1,48 +0,0 @@ -package team.themoment.datagsm.sdk.openapi.model; - -import java.util.ArrayList; -import java.util.List; - -/** - * 동아리 목록 응답 - */ -public class ClubResponse { - private Integer totalPages; - private Long totalElements; - private List clubs = new ArrayList<>(); - - public ClubResponse() {} - - public Integer getTotalPages() { - return totalPages; - } - - public void setTotalPages(Integer totalPages) { - this.totalPages = totalPages; - } - - public Long getTotalElements() { - return totalElements; - } - - public void setTotalElements(Long totalElements) { - this.totalElements = totalElements; - } - - public List getClubs() { - return clubs; - } - - public void setClubs(List clubs) { - this.clubs = clubs; - } - - @Override - public String toString() { - return "ClubResponse{" + - "totalPages=" + totalPages + - ", totalElements=" + totalElements + - ", clubs=" + clubs + - '}'; - } -} \ No newline at end of file diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/model/ClubSortBy.java b/src/main/java/team/themoment/datagsm/sdk/openapi/model/ClubSortBy.java deleted file mode 100644 index 5d8e1f2..0000000 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/model/ClubSortBy.java +++ /dev/null @@ -1,36 +0,0 @@ -package team.themoment.datagsm.sdk.openapi.model; - -/** - * 동아리 정렬 기준 - */ -public enum ClubSortBy { - /** - * ID로 정렬 - */ - ID, - - /** - * 이름으로 정렬 - */ - NAME, - - /** - * 타입으로 정렬 - */ - TYPE, - - /** - * 설립연도로 정렬 - */ - FOUNDED_YEAR, - - /** - * 폐지연도로 정렬 - */ - ABOLISHED_YEAR, - - /** - * 운영 상태로 정렬 - */ - STATUS -} diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/model/ClubStatus.java b/src/main/java/team/themoment/datagsm/sdk/openapi/model/ClubStatus.java deleted file mode 100644 index c67cca9..0000000 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/model/ClubStatus.java +++ /dev/null @@ -1,16 +0,0 @@ -package team.themoment.datagsm.sdk.openapi.model; - -/** - * 동아리 운영 상태 - */ -public enum ClubStatus { - /** - * 운영 중인 동아리 - */ - ACTIVE, - - /** - * 폐지된 동아리 - */ - ABOLISHED -} diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/model/ClubType.java b/src/main/java/team/themoment/datagsm/sdk/openapi/model/ClubType.java deleted file mode 100644 index 11dda81..0000000 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/model/ClubType.java +++ /dev/null @@ -1,9 +0,0 @@ -package team.themoment.datagsm.sdk.openapi.model; - -/** - * 동아리 종류 - */ -public enum ClubType { - MAJOR_CLUB, - AUTONOMOUS_CLUB -} \ No newline at end of file diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/model/Major.java b/src/main/java/team/themoment/datagsm/sdk/openapi/model/Major.java deleted file mode 100644 index bcdd507..0000000 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/model/Major.java +++ /dev/null @@ -1,10 +0,0 @@ -package team.themoment.datagsm.sdk.openapi.model; - -/** - * 전공 - */ -public enum Major { - SW_DEVELOPMENT, - SMART_IOT, - AI -} \ No newline at end of file diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/model/Meal.java b/src/main/java/team/themoment/datagsm/sdk/openapi/model/Meal.java deleted file mode 100644 index 4f4fa69..0000000 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/model/Meal.java +++ /dev/null @@ -1,150 +0,0 @@ -package team.themoment.datagsm.sdk.openapi.model; - -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; - -/** - * 급식 정보 - */ -public class Meal { - private String mealId; - private String schoolCode; - private String schoolName; - private String officeCode; - private String officeName; - private LocalDate mealDate; - private MealType mealType; - private List mealMenu = new ArrayList<>(); - private List mealAllergyInfo = new ArrayList<>(); - private String mealCalories; - private String originInfo; - private String nutritionInfo; - private Integer mealServeCount; - - public Meal() {} - - public String getMealId() { - return mealId; - } - - public void setMealId(String mealId) { - this.mealId = mealId; - } - - public String getSchoolCode() { - return schoolCode; - } - - public void setSchoolCode(String schoolCode) { - this.schoolCode = schoolCode; - } - - public String getSchoolName() { - return schoolName; - } - - public void setSchoolName(String schoolName) { - this.schoolName = schoolName; - } - - public String getOfficeCode() { - return officeCode; - } - - public void setOfficeCode(String officeCode) { - this.officeCode = officeCode; - } - - public String getOfficeName() { - return officeName; - } - - public void setOfficeName(String officeName) { - this.officeName = officeName; - } - - public LocalDate getMealDate() { - return mealDate; - } - - public void setMealDate(LocalDate mealDate) { - this.mealDate = mealDate; - } - - public MealType getMealType() { - return mealType; - } - - public void setMealType(MealType mealType) { - this.mealType = mealType; - } - - public List getMealMenu() { - return mealMenu; - } - - public void setMealMenu(List mealMenu) { - this.mealMenu = mealMenu; - } - - public Optional> getMealAllergyInfo() { - return Optional.ofNullable(mealAllergyInfo); - } - - public void setMealAllergyInfo(List mealAllergyInfo) { - this.mealAllergyInfo = mealAllergyInfo; - } - - public Optional getMealCalories() { - return Optional.ofNullable(mealCalories); - } - - public void setMealCalories(String mealCalories) { - this.mealCalories = mealCalories; - } - - public Optional getOriginInfo() { - return Optional.ofNullable(originInfo); - } - - public void setOriginInfo(String originInfo) { - this.originInfo = originInfo; - } - - public Optional getNutritionInfo() { - return Optional.ofNullable(nutritionInfo); - } - - public void setNutritionInfo(String nutritionInfo) { - this.nutritionInfo = nutritionInfo; - } - - public Optional getMealServeCount() { - return Optional.ofNullable(mealServeCount); - } - - public void setMealServeCount(Integer mealServeCount) { - this.mealServeCount = mealServeCount; - } - - @Override - public String toString() { - return "Meal{" + - "mealId='" + mealId + '\'' + - ", schoolCode='" + schoolCode + '\'' + - ", schoolName='" + schoolName + '\'' + - ", officeCode='" + officeCode + '\'' + - ", officeName='" + officeName + '\'' + - ", mealDate=" + mealDate + - ", mealType=" + mealType + - ", mealMenu=" + mealMenu + - ", mealAllergyInfo=" + mealAllergyInfo + - ", mealCalories='" + mealCalories + '\'' + - ", originInfo='" + originInfo + '\'' + - ", nutritionInfo='" + nutritionInfo + '\'' + - ", mealServeCount=" + mealServeCount + - '}'; - } -} \ No newline at end of file diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/model/MealType.java b/src/main/java/team/themoment/datagsm/sdk/openapi/model/MealType.java deleted file mode 100644 index 6f8a9ff..0000000 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/model/MealType.java +++ /dev/null @@ -1,10 +0,0 @@ -package team.themoment.datagsm.sdk.openapi.model; - -/** - * 급식 타입 - */ -public enum MealType { - BREAKFAST, - LUNCH, - DINNER -} \ No newline at end of file diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/model/ParticipantInfo.java b/src/main/java/team/themoment/datagsm/sdk/openapi/model/ParticipantInfo.java deleted file mode 100644 index e57b404..0000000 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/model/ParticipantInfo.java +++ /dev/null @@ -1,77 +0,0 @@ -package team.themoment.datagsm.sdk.openapi.model; - -import java.util.Optional; - -/** - * 동아리 부원 정보 - */ -public class ParticipantInfo { - private Long id; - private String name; - private String email; - private Integer studentNumber; - private Major major; - private Sex sex; - - public ParticipantInfo() {} - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public Optional getStudentNumber() { - return Optional.ofNullable(studentNumber); - } - - public void setStudentNumber(Integer studentNumber) { - this.studentNumber = studentNumber; - } - - public Optional getMajor() { - return Optional.ofNullable(major); - } - - public void setMajor(Major major) { - this.major = major; - } - - public Sex getSex() { - return sex; - } - - public void setSex(Sex sex) { - this.sex = sex; - } - - @Override - public String toString() { - return "ParticipantInfo{" + - "id=" + id + - ", name='" + name + '\'' + - ", email='" + email + '\'' + - ", studentNumber=" + studentNumber + - ", major=" + major + - ", sex=" + sex + - '}'; - } -} \ No newline at end of file diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/model/Project.java b/src/main/java/team/themoment/datagsm/sdk/openapi/model/Project.java deleted file mode 100644 index 1f47288..0000000 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/model/Project.java +++ /dev/null @@ -1,99 +0,0 @@ -package team.themoment.datagsm.sdk.openapi.model; - -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; - -/** - * 프로젝트 정보 - */ -public class Project { - private Long id; - private String name; - private String description; - private int startYear; - private Integer endYear; - private ProjectStatus status; - private Club club; - private List participants = new ArrayList<>(); - - public Project() {} - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getStartYear() { - return startYear; - } - - public void setStartYear(int startYear) { - this.startYear = startYear; - } - - public Optional getEndYear() { - return Optional.ofNullable(endYear); - } - - public void setEndYear(Integer endYear) { - this.endYear = endYear; - } - - public ProjectStatus getStatus() { - return status; - } - - public void setStatus(ProjectStatus status) { - this.status = status; - } - - public Optional getClub() { - return Optional.ofNullable(club); - } - - public void setClub(Club club) { - this.club = club; - } - - public List getParticipants() { - return participants; - } - - public void setParticipants(List participants) { - this.participants = participants; - } - - @Override - public String toString() { - return "Project{" + - "id=" + id + - ", name='" + name + '\'' + - ", description='" + description + '\'' + - ", startYear=" + startYear + - ", endYear=" + endYear + - ", status=" + status + - ", club=" + club + - ", participants=" + participants + - '}'; - } -} diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/model/ProjectResponse.java b/src/main/java/team/themoment/datagsm/sdk/openapi/model/ProjectResponse.java deleted file mode 100644 index da2afbd..0000000 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/model/ProjectResponse.java +++ /dev/null @@ -1,48 +0,0 @@ -package team.themoment.datagsm.sdk.openapi.model; - -import java.util.ArrayList; -import java.util.List; - -/** - * 프로젝트 목록 응답 - */ -public class ProjectResponse { - private Integer totalPages; - private Long totalElements; - private List projects = new ArrayList<>(); - - public ProjectResponse() {} - - public Integer getTotalPages() { - return totalPages; - } - - public void setTotalPages(Integer totalPages) { - this.totalPages = totalPages; - } - - public Long getTotalElements() { - return totalElements; - } - - public void setTotalElements(Long totalElements) { - this.totalElements = totalElements; - } - - public List getProjects() { - return projects; - } - - public void setProjects(List projects) { - this.projects = projects; - } - - @Override - public String toString() { - return "ProjectResponse{" + - "totalPages=" + totalPages + - ", totalElements=" + totalElements + - ", projects=" + projects + - '}'; - } -} \ No newline at end of file diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/model/ProjectSortBy.java b/src/main/java/team/themoment/datagsm/sdk/openapi/model/ProjectSortBy.java deleted file mode 100644 index cfb7cf9..0000000 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/model/ProjectSortBy.java +++ /dev/null @@ -1,16 +0,0 @@ -package team.themoment.datagsm.sdk.openapi.model; - -/** - * 프로젝트 정렬 기준 - */ -public enum ProjectSortBy { - /** - * ID로 정렬 - */ - ID, - - /** - * 이름으로 정렬 - */ - NAME -} \ No newline at end of file diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/model/ProjectStatus.java b/src/main/java/team/themoment/datagsm/sdk/openapi/model/ProjectStatus.java deleted file mode 100644 index 0db0e8e..0000000 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/model/ProjectStatus.java +++ /dev/null @@ -1,16 +0,0 @@ -package team.themoment.datagsm.sdk.openapi.model; - -/** - * 프로젝트 운영 상태 - */ -public enum ProjectStatus { - /** - * 운영 중인 프로젝트 - */ - ACTIVE, - - /** - * 종료된 프로젝트 - */ - ENDED -} diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/model/Schedule.java b/src/main/java/team/themoment/datagsm/sdk/openapi/model/Schedule.java deleted file mode 100644 index b0f8d6e..0000000 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/model/Schedule.java +++ /dev/null @@ -1,150 +0,0 @@ -package team.themoment.datagsm.sdk.openapi.model; - -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; - -/** - * 학사일정 정보 - */ -public class Schedule { - private String scheduleId; - private String schoolCode; - private String schoolName; - private String officeCode; - private String officeName; - private LocalDate scheduleDate; - private String academicYear; - private String eventName; - private String eventContent; - private String dayCategory; - private String schoolCourseType; - private String dayNightType; - private List targetGrades = new ArrayList<>(); - - public Schedule() {} - - public String getScheduleId() { - return scheduleId; - } - - public void setScheduleId(String scheduleId) { - this.scheduleId = scheduleId; - } - - public String getSchoolCode() { - return schoolCode; - } - - public void setSchoolCode(String schoolCode) { - this.schoolCode = schoolCode; - } - - public String getSchoolName() { - return schoolName; - } - - public void setSchoolName(String schoolName) { - this.schoolName = schoolName; - } - - public String getOfficeCode() { - return officeCode; - } - - public void setOfficeCode(String officeCode) { - this.officeCode = officeCode; - } - - public String getOfficeName() { - return officeName; - } - - public void setOfficeName(String officeName) { - this.officeName = officeName; - } - - public LocalDate getScheduleDate() { - return scheduleDate; - } - - public void setScheduleDate(LocalDate scheduleDate) { - this.scheduleDate = scheduleDate; - } - - public String getAcademicYear() { - return academicYear; - } - - public void setAcademicYear(String academicYear) { - this.academicYear = academicYear; - } - - public String getEventName() { - return eventName; - } - - public void setEventName(String eventName) { - this.eventName = eventName; - } - - public Optional getEventContent() { - return Optional.ofNullable(eventContent); - } - - public void setEventContent(String eventContent) { - this.eventContent = eventContent; - } - - public Optional getDayCategory() { - return Optional.ofNullable(dayCategory); - } - - public void setDayCategory(String dayCategory) { - this.dayCategory = dayCategory; - } - - public Optional getSchoolCourseType() { - return Optional.ofNullable(schoolCourseType); - } - - public void setSchoolCourseType(String schoolCourseType) { - this.schoolCourseType = schoolCourseType; - } - - public Optional getDayNightType() { - return Optional.ofNullable(dayNightType); - } - - public void setDayNightType(String dayNightType) { - this.dayNightType = dayNightType; - } - - public List getTargetGrades() { - return targetGrades; - } - - public void setTargetGrades(List targetGrades) { - this.targetGrades = targetGrades; - } - - @Override - public String toString() { - return "Schedule{" + - "scheduleId='" + scheduleId + '\'' + - ", schoolCode='" + schoolCode + '\'' + - ", schoolName='" + schoolName + '\'' + - ", officeCode='" + officeCode + '\'' + - ", officeName='" + officeName + '\'' + - ", scheduleDate=" + scheduleDate + - ", academicYear='" + academicYear + '\'' + - ", eventName='" + eventName + '\'' + - ", eventContent='" + eventContent + '\'' + - ", dayCategory='" + dayCategory + '\'' + - ", schoolCourseType='" + schoolCourseType + '\'' + - ", dayNightType='" + dayNightType + '\'' + - ", targetGrades=" + targetGrades + - '}'; - } -} \ No newline at end of file diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/model/Sex.java b/src/main/java/team/themoment/datagsm/sdk/openapi/model/Sex.java deleted file mode 100644 index adb873f..0000000 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/model/Sex.java +++ /dev/null @@ -1,9 +0,0 @@ -package team.themoment.datagsm.sdk.openapi.model; - -/** - * 성별 - */ -public enum Sex { - MAN, - WOMAN -} \ No newline at end of file diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/model/Student.java b/src/main/java/team/themoment/datagsm/sdk/openapi/model/Student.java deleted file mode 100644 index 5897e2e..0000000 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/model/Student.java +++ /dev/null @@ -1,187 +0,0 @@ -package team.themoment.datagsm.sdk.openapi.model; - -import java.util.Optional; - -/** - * 학생 정보 - */ -public class Student { - private Long id; - private String name; - private Sex sex; - private String email; - private Integer grade; - private Integer classNum; - private Integer number; - private Integer studentNumber; - private Major major; - private String specialty; - private StudentRole role; - private Integer dormitoryFloor; - private Integer dormitoryRoom; - private Club majorClub; - private Club autonomousClub; - private String githubId; - private String githubUrl; - - public Student() {} - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Sex getSex() { - return sex; - } - - public void setSex(Sex sex) { - this.sex = sex; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public Optional getGrade() { - return Optional.ofNullable(grade); - } - - public void setGrade(Integer grade) { - this.grade = grade; - } - - public Optional getClassNum() { - return Optional.ofNullable(classNum); - } - - public void setClassNum(Integer classNum) { - this.classNum = classNum; - } - - public Optional getNumber() { - return Optional.ofNullable(number); - } - - public void setNumber(Integer number) { - this.number = number; - } - - public Optional getStudentNumber() { - return Optional.ofNullable(studentNumber); - } - - public void setStudentNumber(Integer studentNumber) { - this.studentNumber = studentNumber; - } - - public Optional getMajor() { - return Optional.ofNullable(major); - } - - public void setMajor(Major major) { - this.major = major; - } - - public Optional getSpecialty() { - return Optional.ofNullable(specialty); - } - - public void setSpecialty(String specialty) { - this.specialty = specialty; - } - - public StudentRole getRole() { - return role; - } - - public void setRole(StudentRole role) { - this.role = role; - } - - public Optional getDormitoryFloor() { - return Optional.ofNullable(dormitoryFloor); - } - - public void setDormitoryFloor(Integer dormitoryFloor) { - this.dormitoryFloor = dormitoryFloor; - } - - public Optional getDormitoryRoom() { - return Optional.ofNullable(dormitoryRoom); - } - - public void setDormitoryRoom(Integer dormitoryRoom) { - this.dormitoryRoom = dormitoryRoom; - } - - public Optional getMajorClub() { - return Optional.ofNullable(majorClub); - } - - public void setMajorClub(Club majorClub) { - this.majorClub = majorClub; - } - - public Optional getAutonomousClub() { - return Optional.ofNullable(autonomousClub); - } - - public void setAutonomousClub(Club autonomousClub) { - this.autonomousClub = autonomousClub; - } - - public Optional getGithubId() { - return Optional.ofNullable(githubId); - } - - public void setGithubId(String githubId) { - this.githubId = githubId; - } - - public Optional getGithubUrl() { - return Optional.ofNullable(githubUrl); - } - - public void setGithubUrl(String githubUrl) { - this.githubUrl = githubUrl; - } - - @Override - public String toString() { - return "Student{" + - "id=" + id + - ", name='" + name + '\'' + - ", sex=" + sex + - ", email='" + email + '\'' + - ", grade=" + grade + - ", classNum=" + classNum + - ", number=" + number + - ", studentNumber=" + studentNumber + - ", major=" + major + - ", specialty='" + specialty + '\'' + - ", role=" + role + - ", dormitoryFloor=" + dormitoryFloor + - ", dormitoryRoom=" + dormitoryRoom + - ", majorClub=" + majorClub + - ", autonomousClub=" + autonomousClub + - ", githubId='" + githubId + '\'' + - ", githubUrl='" + githubUrl + '\'' + - '}'; - } -} \ No newline at end of file diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/model/StudentResponse.java b/src/main/java/team/themoment/datagsm/sdk/openapi/model/StudentResponse.java deleted file mode 100644 index a366a42..0000000 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/model/StudentResponse.java +++ /dev/null @@ -1,48 +0,0 @@ -package team.themoment.datagsm.sdk.openapi.model; - -import java.util.ArrayList; -import java.util.List; - -/** - * 학생 목록 응답 - */ -public class StudentResponse { - private List students = new ArrayList<>(); - private Long totalElements; - private Integer totalPages; - - public StudentResponse() {} - - public List getStudents() { - return students; - } - - public void setStudents(List students) { - this.students = students; - } - - public Long getTotalElements() { - return totalElements; - } - - public void setTotalElements(Long totalElements) { - this.totalElements = totalElements; - } - - public Integer getTotalPages() { - return totalPages; - } - - public void setTotalPages(Integer totalPages) { - this.totalPages = totalPages; - } - - @Override - public String toString() { - return "StudentResponse{" + - "students=" + students + - ", totalElements=" + totalElements + - ", totalPages=" + totalPages + - '}'; - } -} \ No newline at end of file diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/model/StudentRole.java b/src/main/java/team/themoment/datagsm/sdk/openapi/model/StudentRole.java deleted file mode 100644 index b368e1d..0000000 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/model/StudentRole.java +++ /dev/null @@ -1,12 +0,0 @@ -package team.themoment.datagsm.sdk.openapi.model; - -/** - * 학생 역할 - */ -public enum StudentRole { - GENERAL_STUDENT, - STUDENT_COUNCIL, - DORMITORY_MANAGER, - GRADUATE, - WITHDRAWN, -} \ No newline at end of file diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/model/StudentSortBy.java b/src/main/java/team/themoment/datagsm/sdk/openapi/model/StudentSortBy.java deleted file mode 100644 index bf39a75..0000000 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/model/StudentSortBy.java +++ /dev/null @@ -1,61 +0,0 @@ -package team.themoment.datagsm.sdk.openapi.model; - -/** - * 학생 정렬 기준 - */ -public enum StudentSortBy { - /** - * ID로 정렬 - */ - ID, - - /** - * 이름으로 정렬 - */ - NAME, - - /** - * 이메일로 정렬 - */ - EMAIL, - - /** - * 학번으로 정렬 (학년, 반, 번호 순) - */ - STUDENT_NUMBER, - - /** - * 학년으로 정렬 - */ - GRADE, - - /** - * 반으로 정렬 - */ - CLASS_NUM, - - /** - * 번호로 정렬 - */ - NUMBER, - - /** - * 전공으로 정렬 - */ - MAJOR, - - /** - * 역할로 정렬 - */ - ROLE, - - /** - * 성별로 정렬 - */ - SEX, - - /** - * 기숙사 방 번호로 정렬 - */ - DORMITORY_ROOM -} \ No newline at end of file diff --git a/src/main/java/team/themoment/datagsm/sdk/openapi/model/Timetable.java b/src/main/java/team/themoment/datagsm/sdk/openapi/model/Timetable.java deleted file mode 100644 index aa997eb..0000000 --- a/src/main/java/team/themoment/datagsm/sdk/openapi/model/Timetable.java +++ /dev/null @@ -1,138 +0,0 @@ -package team.themoment.datagsm.sdk.openapi.model; - -import java.time.LocalDate; -import java.util.Optional; - -/** - * 시간표 정보 - */ -public class Timetable { - private String timetableId; - private String schoolCode; - private String schoolName; - private String officeCode; - private String officeName; - private LocalDate timetableDate; - private String academicYear; - private String semester; - private int grade; - private int classNum; - private int period; - private String subject; - - public Timetable() {} - - public String getTimetableId() { - return timetableId; - } - - public void setTimetableId(String timetableId) { - this.timetableId = timetableId; - } - - public String getSchoolCode() { - return schoolCode; - } - - public void setSchoolCode(String schoolCode) { - this.schoolCode = schoolCode; - } - - public String getSchoolName() { - return schoolName; - } - - public void setSchoolName(String schoolName) { - this.schoolName = schoolName; - } - - public String getOfficeCode() { - return officeCode; - } - - public void setOfficeCode(String officeCode) { - this.officeCode = officeCode; - } - - public String getOfficeName() { - return officeName; - } - - public void setOfficeName(String officeName) { - this.officeName = officeName; - } - - public LocalDate getTimetableDate() { - return timetableDate; - } - - public void setTimetableDate(LocalDate timetableDate) { - this.timetableDate = timetableDate; - } - - public String getAcademicYear() { - return academicYear; - } - - public void setAcademicYear(String academicYear) { - this.academicYear = academicYear; - } - - public Optional getSemester() { - return Optional.ofNullable(semester); - } - - public void setSemester(String semester) { - this.semester = semester; - } - - public int getGrade() { - return grade; - } - - public void setGrade(int grade) { - this.grade = grade; - } - - public int getClassNum() { - return classNum; - } - - public void setClassNum(int classNum) { - this.classNum = classNum; - } - - public int getPeriod() { - return period; - } - - public void setPeriod(int period) { - this.period = period; - } - - public Optional getSubject() { - return Optional.ofNullable(subject); - } - - public void setSubject(String subject) { - this.subject = subject; - } - - @Override - public String toString() { - return "Timetable{" + - "timetableId='" + timetableId + '\'' + - ", schoolCode='" + schoolCode + '\'' + - ", schoolName='" + schoolName + '\'' + - ", officeCode='" + officeCode + '\'' + - ", officeName='" + officeName + '\'' + - ", timetableDate=" + timetableDate + - ", academicYear='" + academicYear + '\'' + - ", semester='" + semester + '\'' + - ", grade=" + grade + - ", classNum=" + classNum + - ", period=" + period + - ", subject='" + subject + '\'' + - '}'; - } -} \ No newline at end of file