Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
b8aeebf
refactor(graduate): 홈 페이지 디자인 일부 변경
yummjin Jan 25, 2026
7518dab
refactor(graduate): 홈 페이지 컴포넌트 및 스타일 개선
yummjin Jan 25, 2026
9f68de9
style(graduate): 배경 색상 조정
yummjin Jan 25, 2026
8a1b885
refactor(graduate): 일정 페이지에 달력 추가 및 `ScheduleSection` 삭제
yummjin Jan 25, 2026
79d2101
refactor(graduate): 파일 구조 리팩토링 (client, admin 분리)
yummjin Jan 25, 2026
bb92087
refactor(graduate): admin 사이드에서만 사용되는 일부 컴포넌트 이동 및 일부 페이지 로직 분리
yummjin Jan 25, 2026
33f8012
refactor(graduate): domain에 따른 로직 entity 레이어로 분리
yummjin Jan 25, 2026
cff2e1e
refactor(graduate): 중복되는 로직 table 위젯으로 이동 및 중복 비즈니스 로직 table/model 로 분리
yummjin Jan 25, 2026
1a4a0db
refactor(graduate): 스케줄 관련 로직 entity로 일부 분리
yummjin Jan 25, 2026
2a14a59
refactor(graduate): 각 도메인 사용처로 api 메서드 이동 및 분리
yummjin Jan 25, 2026
e0f7d6a
refactor(graduate): 공지사항 관련 API 및 훅 사용 도메인으로 위치 변경
yummjin Jan 26, 2026
c4a6b58
refactor(graduate): 스케줄 관련 API 및 훅을 새로운 구조로 통합 및 정리
yummjin Jan 26, 2026
24e2644
refactor(graduate): config 파일 구조 개선 및 상수 정리
yummjin Jan 26, 2026
ff341dd
refactor(graduate): ui 디렉토리 네이밍 변경 components -> ui
yummjin Jan 26, 2026
a767441
refactor(graduate): 스타일 수정 및 UI 요소 개선
yummjin Jan 26, 2026
ba1770d
refactor(graduate): ui 개선을 위한 Collapse 컴포넌트 수정
yummjin Jan 26, 2026
ffb94f3
refactor(graduate): 쿼리키 팩토리 형식의 쿼리키 적용
yummjin Jan 26, 2026
826078a
fix(graduate): 사용자 파일 제출 또는 방식 지정 시 사용자 상태 재검증
yummjin Jan 26, 2026
bd0426f
refactor(graduate): 리다이렉트 및 라우팅 구조 개선, 인증 상태 초기화 로직 추가
yummjin Jan 26, 2026
105d8b0
refactor(graduate): 홈화면 공지사항 태그 제거 기능 추가 및 공지사항 표시 개수 조정
yummjin Jan 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 3 additions & 1 deletion apps/graduate/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,12 @@
"antd": "^5.24.8",
"axios": "^1.13.2",
"crypto-js": "^4.2.0",
"dayjs": "^1.11.18",
"dayjs": "^1.11.19",
"lucide-react": "^0.503.0",
"motion": "^12.23.24",
"pdfjs-dist": "3.11.174",
"react": "^19.0.0",
"react-big-calendar": "^1.19.4",
"react-dom": "^19.0.0",
"react-hook-form": "^7.56.1",
"react-quill-new": "^3.6.0",
Expand All @@ -44,6 +45,7 @@
"@types/crypto-js": "^4.2.2",
"@types/node": "^22.10.2",
"@types/react": "^19.0.8",
"@types/react-big-calendar": "^1.16.3",
"@types/react-dom": "^19.0.3",
"@vanilla-extract/vite-plugin": "^5.0.1",
"@vitejs/plugin-react": "^5.0.4",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { AxiosResponse } from 'axios';

import { get } from '~/shared/api';
import { END_POINT } from '~/shared/constants';

import { ScheduleItem } from '~/admin/pages/schedule/model';
type ScheduleDetailResponse = ScheduleItem;

export async function fetchScheduleDetail(
scheduleId: number,
): Promise<AxiosResponse<ScheduleDetailResponse>> {
return get<ScheduleDetailResponse>({
request: END_POINT.USER.SCHEDULE(scheduleId),
});
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { AxiosResponse } from 'axios';

import { get } from '~/shared/api';
import { END_POINT } from '~/shared/constants';

import { ScheduleItem } from '~/admin/pages/schedule/model';

export interface ScheduleListResponse {
contents: ScheduleItem[];
}

export async function fetchScheduleList(): Promise<
AxiosResponse<ScheduleListResponse>
> {
return get<ScheduleListResponse>({
request: END_POINT.USER.SCHEDULE_LIST,
});
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export * from './fetchScheduleDetail';
export * from './fetchScheduleList';
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
export { useScheduleList } from './useScheduleList';
export { useScheduleDetail } from './useScheduleDetail';
export { useScheduleContent } from './useScheduleContent';
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import { useQuery } from '@tanstack/react-query';

import { getScheduleDetail } from '~/shared/api';
import { KEYS } from '~/shared/constants';
import { scheduleKeys } from '~/shared/queries/schedule';

import { fetchScheduleDetail } from '../api';

export function useScheduleDetail(scheduleId: number) {
return useQuery({
queryKey: [...KEYS.SCHEDULE, scheduleId],
queryKey: scheduleKeys.detail(scheduleId),
queryFn: async () => {
const response = await getScheduleDetail(scheduleId);
const response = await fetchScheduleDetail(scheduleId);
return response.data;
},
enabled: !!scheduleId,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { useQuery } from '@tanstack/react-query';

import { scheduleKeys } from '~/shared/queries/schedule';

import { fetchScheduleList } from '../api/fetchScheduleList';

export function useScheduleList() {
return useQuery({
queryKey: scheduleKeys.list(),
queryFn: async () => {
const response = await fetchScheduleList();
return response.data.contents ?? [];
},
});
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './updateGraduationBatchApproval';
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
import { patch } from '~/shared/api';
import { END_POINT } from '~/shared/constants';

type UpdateGraduationUsersBatchApproveRequest = {
type UpdateGraduationBatchApprovalRequest = {
ids: number[];
};

type UpdateGraduationUsersBatchApproveResponse = {
type UpdateGraduationBatchApprovalResponse = {
approvedIds: number[];
};

export const updateGraduationUsersBatchApprove = async (ids: number[]) => {
export const updateGraduationBatchApproval = async (ids: number[]) => {
const response = await patch<
UpdateGraduationUsersBatchApproveResponse,
UpdateGraduationUsersBatchApproveRequest
UpdateGraduationBatchApprovalResponse,
UpdateGraduationBatchApprovalRequest
>({
request: END_POINT.ADMIN.GRADUATION_USERS_BATCH_APPROVE,
data: { ids },
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export * from './useGraduationApproval';
export * from './useGraduationBatchApproval';
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
import { createElement } from 'react';

import { useToast } from '~/shared/hooks';

import { useGraduationBatchApproval } from './useGraduationBatchApproval';

import {
APPROVE_ALERT,
APPROVE_CONFIRM_TITLE,
Expand All @@ -16,10 +20,7 @@ import {
APPROVE_RESULT_NOT_APPROVED,
APPROVE_RESULT_TITLE,
APPROVE_SUCCESS,
} from '~/shared/components/Toolbar/toolbarTexts';

import { useToast } from '../useToast';
import { useUpdateGraduationUsersBatchApprove } from './useUpdateGraduationUsersBatchApprove';
} from '~/admin/shared/ui/Toolbar/toolbarTexts';

type UseApproveGraduationUsersProps<T> = {
items: T[];
Expand All @@ -39,7 +40,7 @@ type NotApprovedDetail = {
reason: string;
};

export function useApproveGraduationUsers<T>({
export function useGraduationApproval<T>({
items,
selectedIds,
getId,
Expand All @@ -48,7 +49,7 @@ export function useApproveGraduationUsers<T>({
onSuccess,
}: UseApproveGraduationUsersProps<T>) {
const { toast, confirm, info } = useToast();
const { approveGraduationUsers } = useUpdateGraduationUsersBatchApprove({
const { approveGraduationUsers } = useGraduationBatchApproval({
onSuccess,
});

Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,21 @@
import { useMutation, useQueryClient } from '@tanstack/react-query';

import { updateGraduationUsersBatchApprove } from '~/shared/api';
import { KEYS } from '~/shared/constants';
import { graduationUsersKeys } from '~/shared/queries';

import { updateGraduationBatchApproval } from '../api';

type Options = {
onSuccess?: () => void | Promise<void>;
};

export function useUpdateGraduationUsersBatchApprove({
onSuccess,
}: Options = {}) {
export function useGraduationBatchApproval({ onSuccess }: Options = {}) {
const queryClient = useQueryClient();

const mutation = useMutation({
mutationFn: updateGraduationUsersBatchApprove,
mutationFn: updateGraduationBatchApproval,
onSuccess: async () => {
await queryClient.invalidateQueries({
queryKey: [...KEYS.GRADUATION_USERS],
queryKey: graduationUsersKeys.all,
});
await onSuccess?.();
},
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { get } from '~/shared/api';
import { END_POINT, GraduationType } from '~/shared/constants';
import type { StudentStatus } from '~/shared/types';
import type { SubmissionStatus } from '~/shared/types/graduation';

export type GraduationLabelType = '미정' | '논문' | '자격증';

Expand All @@ -10,7 +10,7 @@ export type GraduationUserSummary = {
name: string;
graduationDate: string;
graduationType: GraduationLabelType;
status?: StudentStatus;
status?: SubmissionStatus;
};

export type PageableResponse = {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
export * from './fetchAdminUsers';
export * from './fetchGraduationUsers';
export * from './fetchGraduationUsersExcel';
export * from './removeGraduationUser';
export * from './removeGraduationUsersBatch';
export * from './updateGraduationUsersBatchApprove';
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export * from './useFetchGraduationUsers';
export * from './useRemoveGraduationUsers';
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
import { useQuery } from '@tanstack/react-query';

import { graduationUsersKeys } from '~/shared/queries';

import {
fetchGraduationUsers,
type FetchGraduationUsersParams,
type GraduationUserSummaryPageResponse,
} from '~/shared/api';
import { KEYS } from '~/shared/constants';
} from '~/admin/entities/graduation-users/api';
import { fetchGraduationUsers } from '~/admin/entities/graduation-users/api';

export function useFetchGraduationUsers(params: FetchGraduationUsersParams) {
return useQuery<GraduationUserSummaryPageResponse>({
queryKey: [...KEYS.GRADUATION_USERS, params],
queryKey: graduationUsersKeys.list(params),
queryFn: () => fetchGraduationUsers(params),
});
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
import { useMutation, useQueryClient } from '@tanstack/react-query';

import { removeGraduationUser, removeGraduationUsersBatch } from '~/shared/api';
import { KEYS } from '~/shared/constants';
import { graduationUsersKeys } from '~/shared/queries';

import {
removeGraduationUser,
removeGraduationUsersBatch,
} from '~/admin/entities/graduation-users/api';

type Options = {
onSuccess?: () => void | Promise<void>;
Expand All @@ -20,7 +24,7 @@ export function useRemoveGraduationUsers({ onSuccess }: Options = {}) {
},
onSuccess: async () => {
await queryClient.invalidateQueries({
queryKey: [...KEYS.GRADUATION_USERS],
queryKey: graduationUsersKeys.all,
});
await onSuccess?.();
},
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { useQuery } from '@tanstack/react-query';

import { KEYS } from '~/shared/constants';
import { studentKeys } from '~/shared/queries/student';

import { getStudentDetail } from '../api';

export function useStudentDetail(studentId: number) {
return useQuery({
queryKey: [...KEYS.STUDENT_DETAIL, studentId],
queryKey: studentKeys.detail(studentId),
queryFn: async () => {
const response = await getStudentDetail(studentId);
return response.data;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { StudentStatus } from '~/shared/types';
import type { SubmissionStatus } from '~/shared/types/graduation';

export interface StudentDetailApiResponse {
graduationUserId: number;
Expand All @@ -8,5 +8,5 @@ export interface StudentDetailApiResponse {
advisor: string;
major: string;
capstoneCompletion: boolean;
status: StudentStatus;
status: SubmissionStatus;
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import type { Column } from '~/shared/components/DataTable/DataTable';

import {
HEADER_NAME,
HEADER_NO,
Expand All @@ -9,6 +7,7 @@ import {
} from './allManagementTexts';
import type { AllManagementRow } from '../types/allManagement';

import type { Column } from '~/admin/shared/ui/DataTable/DataTable';
import { vars } from '~/vars.css';

export const allManagementColumns = (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { GraduationLabelType } from '~/shared/api';

import type { AllManagementRow } from '../types/allManagement';

import { type GraduationLabelType } from '~/admin/entities/graduation-users/api';

export const STATUS_UNKNOWN = '미정';

export const STATUS_CERTIFICATE_NOT_SUBMITTED = '자격증-미제출';
Expand Down
Loading
Loading