diff --git a/src/__generated__/api.d.ts b/src/__generated__/api.d.ts index b6a07cf..b7754a5 100644 --- a/src/__generated__/api.d.ts +++ b/src/__generated__/api.d.ts @@ -4,1713 +4,1695 @@ */ export interface paths { - '/notification/register': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations['registerNotification']; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/admin': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** - * 어드민 메인 데이터 조회 - * @description 어드민 메인 데이터를 조회합니다 - */ - get: operations['getMain']; - put?: never; - /** - * 어드민 메인 데이터 배포 - * @description 어드민 메인 데이터를 배포합니다 - */ - post: operations['addMain']; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/admin/news': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** - * 최신소식 조회 - * @description 최신소식을 조회합니다 - */ - get: operations['getMainNews']; - put?: never; - /** - * 최신소식 추가 - * @description 최신소식을 추가합니다 - */ - post: operations['addMainNews']; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/admin/news/delete': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** - * 최신소식 삭제 - * @description 최신소식을 삭제합니다 - */ - post: operations['deleteMainNews']; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/admin/confirm': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** - * 어드민 메인 데이터 배포 확인 - * @description 어드민 메인 데이터 배포를 확인합니다 - */ - post: operations['addMainConfirm']; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/semesters': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations['getSemesters']; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/projects': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations['getAllProject']; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/notification/list': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations['getAllProject_1']; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/homepage': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** - * 메인 페이지 조회 - * @description 메인 페이지 데이터를 조회합니다 - */ - get: operations['getMainPage']; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/homepage/recruit': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** - * 지원하기 페이지 조회 - * @description 지원하기 페이지 데이터를 조회합니다 - */ - get: operations['get']; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/homepage/about': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** - * 소개 페이지 조회 - * @description 소개 페이지 데이터를 조회합니다 - */ - get: operations['getAboutPage']; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/health': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations['healthCheck']; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; -} -export type webhooks = Record; -export interface components { - schemas: { - RegisterNotificationResponseDto: { - /** - * Format: int32 - * @description Notification ID - */ - id: number; - /** - * Format: int32 - * @description 기수 (Generation) - */ - generation: number; - /** @description 이메일 (Email) */ - email: string; - /** - * Format: date-time - * @description 생성일자 (Creation Date) - */ - createdAt: string; - }; - /** @description 브랜딩 컬러 */ - AddAdminBrandingColorRequestDto: { - /** - * @description 메인 컬러 - * @example #FF0000 - */ - main: string; - /** - * @description 로우 톤 컬러 - * @example #CC0000 - */ - low: string; - /** - * @description 하이 톤 컬러 - * @example #FF3333 - */ - high: string; - /** - * @description 포인트 컬러 - * @example #FF9999 - */ - point: string; - }; - /** @description 핵심 가치 */ - AddAdminCoreValueRequestDto: { - /** - * @description 핵심 가치 - * @example 용기 - */ - value: string; - /** - * @description 핵심 가치 설명 - * @example 새로운 도전을 위해 과감히 용기내는 사람 - */ - description: string; - /** - * @description 핵심 가치 이미지 파일명 - * @example image.png - */ - imageFileName: string; - }; - /** @description 소개글 정보 */ - AddAdminIntroductionRequestDto: { - /** - * @description 내용 - * @example Android 앱 개발 - */ - content: string; - /** - * @description 우대사항 - * @example Kotlin 개발 경험 - */ - preference: string; - }; - /** @description 메인 버튼 스타일 */ - AddAdminMainButtonRequestDto: { - /** - * @description 버튼 텍스트 - * @example 지원하기 - */ - text: string; - /** - * @description 주요 컬러 - * @example #FF0000 - */ - keyColor: string; - /** - * @description 보조 컬러 - * @example #CC0000 - */ - subColor: string; - }; - /** @description 멤버 정보 */ - AddAdminMemberRequestDto: { - /** - * @description 역할 - * @example 회장 - */ - role: string; - /** - * @description 이름 - * @example 홍길동 - */ - name: string; - /** - * @description 소속 - * @example SOPT - */ - affiliation: string; - /** - * @description 한줄 소개 - * @example 안녕하세요! - */ - introduction: string; - sns: components['schemas']['AddAdminSnsLinksRequestDto']; - /** - * @description 프로필 이미지 파일명 - * @example image.png - */ - profileImageFileName: string; - }; - /** @description 파트별 커리큘럼 */ - AddAdminPartCurriculumRequestDto: { - /** - * @description 파트명 - * @example 안드로이드 - */ - part: string; - /** @description 주차별 커리큘럼 (배열 순서 = 주차 순서) */ - curriculums: string[]; - }; - /** @description 파트 소개 */ - AddAdminPartIntroductionRequestDto: { - /** - * @description 파트명 - * @example 안드로이드 - */ - part: string; - /** - * @description 파트 설명 - * @example Android 앱 개발 - */ - description: string; - }; - /** @description 질문과 답변 */ - AddAdminQuestionRequestDto: { - /** - * @description 질문 - * @example 몇명 뽑나요? - */ - question: string; - /** - * @description 답변 - * @example 10명 뽑아요. - */ - answer: string; - }; - /** @description 모집 파트 커리큘럼 */ - AddAdminRecruitPartCurriculumRequestDto: { - /** - * @description 파트명 - * @example 안드로이드 - */ - part: string; - introduction: components['schemas']['AddAdminIntroductionRequestDto']; - }; - /** @description 모집 질문 */ - AddAdminRecruitQuestionRequestDto: { - /** - * @description 파트명 - * @example 안드로이드 - */ - part: string; - /** @description 질문 리스트 */ - questions: components['schemas']['AddAdminQuestionRequestDto'][]; - }; - /** @description 모집 일정 */ - AddAdminRecruitScheduleRequestDto: { - /** - * @description 타입 - * @example OB - * @enum {string} - */ - type: 'OB' | 'YB'; - schedule: components['schemas']['AddAdminScheduleRequestDto']; - }; - /** @description 어드민 배포하기 */ - AddAdminRequestDto: { - /** - * Format: int32 - * @description 기수 - * @example 34 - */ - generation: number; - /** - * @description 기수명 - * @example SOPT - */ - name: string; - recruitSchedule?: components['schemas']['AddAdminRecruitScheduleRequestDto'][]; - brandingColor?: components['schemas']['AddAdminBrandingColorRequestDto']; - mainButton?: components['schemas']['AddAdminMainButtonRequestDto']; - partIntroduction?: components['schemas']['AddAdminPartIntroductionRequestDto'][]; - /** - * @description 헤더 이미지 파일명 - * @example header.png - */ - headerImageFileName: string; - coreValue?: components['schemas']['AddAdminCoreValueRequestDto'][]; - partCurriculum?: components['schemas']['AddAdminPartCurriculumRequestDto'][]; - member?: components['schemas']['AddAdminMemberRequestDto'][]; - /** - * @description 지원하기 헤더 이미지 파일명 - * @example recruit_header.png - */ - recruitHeaderImageFileName: string; - recruitPartCurriculum?: components['schemas']['AddAdminRecruitPartCurriculumRequestDto'][]; - recruitQuestion?: components['schemas']['AddAdminRecruitQuestionRequestDto'][]; - }; - /** @description 상세 일정 */ - AddAdminScheduleRequestDto: { - /** - * @description 지원 시작 시간 - * @example 2024-01-01 09:00:00 - */ - applicationStartTime: string; - /** - * @description 지원 종료 시간 - * @example 2024-01-31 18:00:00 - */ - applicationEndTime: string; - /** - * @description 지원 결과 발표 시간 - * @example 2024-02-01 12:00:00 - */ - applicationResultTime: string; - /** - * @description 면접 시작 시간 - * @example 2024-02-05 09:00:00 - */ - interviewStartTime: string; - /** - * @description 면접 종료 시간 - * @example 2024-02-05 18:00:00 - */ - interviewEndTime: string; - /** - * @description 최종 결과 발표 시간 - * @example 2024-02-10 12:00:00 - */ - finalResultTime: string; - }; - /** @description SNS 링크 정보 */ - AddAdminSnsLinksRequestDto: { - /** - * @description 이메일 - * @example example@sopt.org - */ - email?: string; - /** - * @description 링크드인 URL - * @example https://www.linkedin.com/in/example - */ - linkedin?: string; - /** - * @description 깃허브 URL - * @example https://github.com/example - */ - github?: string; - /** - * @description 비핸스 URL - * @example https://www.behance.net/example - */ - behance?: string; - }; - /** @description 핵심가치 이미지 S3 PresigneUrl 정보 */ - AddAdminCoreValueResponseRecordDto: { - /** - * @description 핵심 가치 - * @example 용기 - */ - value: string; - /** @description 핵심가치 이미지 PresgiendUrl */ - image: string; - }; - /** @description 멤버 프로필 이미지 S3 PresigneUrl 정보 */ - AddAdminMemberResponseRecordDto: { - /** - * @description 역할 - * @example 회장 - */ - role: string; - /** - * @description 이름 - * @example 홍길동 - */ - name: string; - /** @description 프로필 이미지 PresgiendUrl */ - profileImage: string; - }; - /** @description 어드민 메인정보 추가 */ - AddAdminResponseDto: { - /** - * Format: int32 - * @description 기수 - * @example 34 - */ - generation: number; - /** - * @description 헤더 이미지 S3 PresignedUrl - * @example https://image.url - */ - headerImage: string; - /** @description 핵심가치 이미지 S3 PresigneUrl 정보 */ - coreValues: components['schemas']['AddAdminCoreValueResponseRecordDto'][]; - /** @description 멤버 프로필 이미지 S3 PresigneUrl 정보 */ - members: components['schemas']['AddAdminMemberResponseRecordDto'][]; - /** - * @description 지원하기 헤더 이미지 S3 PresignedUrl - * @example https://image.url - */ - recruitHeaderImage: string; - }; - /** @description 최신소식 추가하기 */ - AddAdminNewsRequestDto: { - /** Format: binary */ - image: string; - /** - * @description 제목 - * @example MIND 23 - */ - title: string; - /** - * @description 링크 - * @example https://disquiet.io/product/mind-23-%EC%98%A4%EB%8A%98%EB%8F%84-%EB%A9%88%EC%B6%94%EC%A7%80-%EC%95%8A%EB%8A%94-it%EC%9D%B8%EB%93%A4 - */ - link: string; - }; - /** @description 최신 소식 추가 */ - AddAdminNewsResponseDto: { - /** - * @description 성공 메세지 - * @example success - */ - message: string; - }; - /** @description 최신소식 삭제하기 */ - DeleteAdminNewsRequestDto: { - /** - * Format: int32 - * @description 최신소식 ID - */ - id: number; - }; - /** @description 최신소식 삭제 */ - DeleteAdminNewsResponseDto: { - /** - * @description 성공 메세지 - * @example success - */ - message: string; - }; - /** @description 어드민 배포 확인 */ - AddAdminConfirmRequestDto: { - /** - * Format: int32 - * @description 기수 - * @example 34 - */ - generation: number; - }; - /** @description 어드민 메인정보 파일 업로드 확인 */ - AddAdminConfirmResponseDto: { - /** - * @description 성공 메세지 - * @example success - */ - message: string; - }; - SemestersListResponse: { - /** - * Format: int32 - * @description 페이지네이션 조회 조건 페이지 수 - */ - page?: number; - /** - * Format: int32 - * @description 페이지네이션 조회로 기수 정보 가져올 갯수 - */ - limit?: number; - /** - * Format: int64 - * @description 조회한 기수 리스트 수 - */ - total?: number; - /** @description 기수 대표 정보 */ - semesters?: components['schemas']['SemestersResponse'][] | null; - }; - /** @description 기수 대표 정보 */ - SemestersResponse: { - /** - * Format: int32 - * @description 역대 기수 - */ - id?: number; - /** @description 기수에 사용했던 컬러 */ - color?: string | null; - /** @description 기수에 사용했던 로고 */ - logo?: string; - /** @description 기수에 사용했던 백그라운드 이미지 */ - background?: string | null; - /** @description 기수에 사용했던 테마명 */ - name?: string | null; - /** @description 기수 활동 기간 */ - year?: string; - } | null; - /** @description 프로젝트의 카테고리 */ - Category: { - /** @enum {string} */ - project: - | 'APPJAM' - | 'SOPKATHON' - | 'SOPTERM' - | 'STUDY' - | 'JOINTSEMINAR' - | 'ETC'; - }; - /** @description 프로젝트 링크 */ - Link: { - /** - * @description 웹사이트, 구글 플레이스토어, 앱스토어, Github, 발표영상 등 프로젝트에 관련된 링크의 종류 - * @example website - * @enum {string} - */ - title: - | 'website' - | 'googlePlay' - | 'appStore' - | 'github' - | 'media' - | 'instagram'; - /** - * @description 링크의 url 주소 - * @example https://example.com - */ - url: string; - }; - PaginateResponseProjectResponse: { - data?: components['schemas']['ProjectResponse'][]; - /** @description 다음 페이지가 있는지 여부를 나타냄. */ - hasNextPage: boolean; - /** @description 이전 페이지가 있는지 여부를 나타냄. */ - hasPrevPage: boolean; - /** - * Format: int32 - * @description 총 data 들의 갯수 - */ - totalCount: number; - /** - * Format: int32 - * @description 총 페이지 카운트 - */ - totalPage: number; - /** - * Format: int32 - * @description 현재 페이지 - */ - currentPage: number; - /** - * Format: int32 - * @description item을 몇개까지 가져올지에 대한 카운트 - */ - limit: number; - }; - ProjectResponse: { - /** - * Format: int64 - * @description 프로젝트의 Id - */ - id: number; - /** @description 프로젝트의 이름 */ - name: string; - /** - * Format: int32 - * @description 프로젝트가 진행된 기수 - */ - generation: number; - category: components['schemas']['Category']; - /** @description 서비스 형태 */ - serviceType: ('WEB' | 'APP')[]; - /** @description 프로젝트 한줄소개 */ - summary: string; - /** @description 프로젝트 설명 */ - detail: string; - /** @description 프로젝트 로고 이미지 URL */ - logoImage: string; - /** @description 프로젝트 썸네일 이미지 URL */ - thumbnailImage: string; - /** @description 서비스 이용 가능 여부 */ - isAvailable: boolean; - /** @description 창업중인지 여부 */ - isFounding: boolean; - /** @description 프로젝트 링크 */ - links: components['schemas']['Link'][]; - }; - GetNotificationListResponseDto: { - /** - * Format: int32 - * @description 기수 - * @example 34 - */ - generation: number; - /** - * @description 모집알림 신청한 이메일 리스트 - * @example [ - * "example@naver.com", - * "example2@naver.com", - * "example3@naver.com" - * ] - */ - emailList: string[]; - }; - /** @description 브랜딩 컬러 정보 */ - GetMainBrandingColorResponseRecordDto: { - /** - * @description 메인 컬러 - * @example #FF0000 - */ - main: string; - /** - * @description 로우 톤 컬러 - * @example #CC0000 - */ - low: string; - /** - * @description 하이 톤 컬러 - * @example #FF3333 - */ - high: string; - /** - * @description 포인트 컬러 - * @example #FF9999 - */ - point: string; - }; - /** @description 최신소식 */ - GetMainLatestNewsResponseRecordDto: { - /** - * Format: int32 - * @description 최신소식 ID - * @example 1 - */ - id: number; - /** - * @description 최신소식 제목 - * @example Mind 23 - */ - title: string; - /** - * @description 최신소식 이미지 링크 - * @example https://image.url - */ - image: string; - /** - * @description 최신소식 링크 - * @example https://news.url - */ - link: string; - }; - /** @description 메인 버튼 스타일 */ - GetMainMainButtonResponseRecordDto: { - /** - * @description 버튼 텍스트 - * @example 지원하기 - */ - text: string; - /** - * @description 주요 컬러 - * @example #FF0000 - */ - keyColor: string; - /** - * @description 보조 컬러 - * @example #CC0000 - */ - subColor: string; - }; - /** @description 메인 페이지 데이터 조회하기 */ - GetMainPageResponseDto: { - /** - * Format: int32 - * @description 기수 - * @example 34 - */ - generation: number; - /** - * @description 기수명 - * @example SOPT - */ - name: string; - brandingColor?: components['schemas']['GetMainBrandingColorResponseRecordDto']; - mainButton?: components['schemas']['GetMainMainButtonResponseRecordDto']; - partIntroduction?: components['schemas']['GetMainPartIntroductionResponseRecordDto'][]; - latestNews?: components['schemas']['GetMainLatestNewsResponseRecordDto'][]; - }; - /** @description 파트 소개 정보 */ - GetMainPartIntroductionResponseRecordDto: { - /** - * @description 파트명 - * @example 안드로이드 - */ - part: string; - /** - * @description 파트 설명 - * @example Android 앱 개발 - */ - description: string; - }; - /** @description 소개글 정보 */ - GetMainIntroductionResponseRecordDto: { - /** - * @description 내용 - * @example Android 앱 개발 - */ - content: string; - /** - * @description 우대사항 - * @example Kotlin 개발 경험 - */ - preference: string; - }; - /** @description 질문과 답변 정보 */ - GetMainQuestionResponseRecordDto: { - /** - * @description 질문 - * @example 몇명 뽑나요? - */ - question: string; - /** - * @description 답변 - * @example 10명 뽑아요. - */ - answer: string; - }; - /** @description 모집 파트 커리큘럼 정보 */ - GetMainRecruitPartCurriculumResponseRecordDto: { - /** - * @description 파트명 - * @example 안드로이드 - */ - part: string; - introduction: components['schemas']['GetMainIntroductionResponseRecordDto']; - }; - /** @description 모집 질문 정보 */ - GetMainRecruitQuestionResponseRecordDto: { - /** - * @description 파트명 - * @example 안드로이드 - */ - part: string; - /** @description 질문 리스트 */ - questions: components['schemas']['GetMainQuestionResponseRecordDto'][]; - }; - /** @description 모집 일정 정보 */ - GetMainRecruitScheduleResponseRecordDto: { - /** - * @description 타입 - * @example OB - * @enum {string} - */ - type: 'OB' | 'YB'; - schedule: components['schemas']['GetMainScheduleResponseRecordDto']; - }; - /** @description 상세 일정 정보 */ - GetMainScheduleResponseRecordDto: { - /** - * @description 지원 시작 시간 - * @example 2024-01-01 09:00:00 - */ - applicationStartTime: string; - /** - * @description 지원 종료 시간 - * @example 2024-01-31 18:00:00 - */ - applicationEndTime: string; - /** - * @description 지원 결과 발표 시간 - * @example 2024-02-01 12:00:00 - */ - applicationResultTime: string; - /** - * @description 면접 시작 시간 - * @example 2024-02-05 09:00:00 - */ - interviewStartTime: string; - /** - * @description 면접 종료 시간 - * @example 2024-02-05 18:00:00 - */ - interviewEndTime: string; - /** - * @description 최종 결과 발표 시간 - * @example 2024-02-10 12:00:00 - */ - finalResultTime: string; - }; - /** @description 지원하기 페이지 데이터 조회하기 */ - GetRecruitingPageResponseDto: { - /** - * Format: int32 - * @description 기수 - * @example 34 - */ - generation: number; - /** - * @description 기수명 - * @example SOPT - */ - name: string; - /** - * @description 지원하기 헤더 이미지 링크 - * @example https://recruit_header.png - */ - recruitHeaderImage: string; - brandingColor?: components['schemas']['GetMainBrandingColorResponseRecordDto']; - recruitSchedule?: components['schemas']['GetMainRecruitScheduleResponseRecordDto'][]; - recruitPartCurriculum?: components['schemas']['GetMainRecruitPartCurriculumResponseRecordDto'][]; - recruitQuestion?: components['schemas']['GetMainRecruitQuestionResponseRecordDto'][]; - }; - /** @description 소개 페이지 데이터 조회하기 */ - GetAboutPageResponseDto: { - /** - * Format: int32 - * @description 기수 - * @example 34 - */ - generation: number; - /** - * @description 기수명 - * @example SOPT - */ - name: string; - /** - * @description 헤더 이미지 링크 - * @example https://header.png - */ - headerImage: string; - brandingColor?: components['schemas']['GetMainBrandingColorResponseRecordDto']; - coreValue?: components['schemas']['GetMainCoreValueResponseRecordDto'][]; - partCurriculum?: components['schemas']['GetMainPartCurriculumResponseRecordDto'][]; - member?: components['schemas']['GetMainMemberResponseRecordDto'][]; - }; - /** @description 핵심 가치 정보 */ - GetMainCoreValueResponseRecordDto: { - /** - * @description 핵심 가치 - * @example 용기 - */ - value: string; - /** - * @description 핵심 가치 설명 - * @example 새로운 도전을 위해 과감히 용기내는 사람 - */ - description: string; - /** - * @description 핵심 가치 이미지 링크 - * @example https://corevalue.png - */ - image: string; - }; - /** @description 멤버 정보 */ - GetMainMemberResponseRecordDto: { - /** - * @description 역할 - * @example 회장 - */ - role: string; - /** - * @description 이름 - * @example 홍길동 - */ - name: string; - /** - * @description 소속 - * @example SOPT - */ - affiliation: string; - /** - * @description 한줄 소개 - * @example 안녕하세요! - */ - introduction: string; - /** - * @description 프로필 이미지 링크 - * @example https://profile.png - */ - profileImage: string; - sns: components['schemas']['GetMainSnsLinksResponseRecordDto']; - }; - /** @description 파트별 커리큘럼 정보 */ - GetMainPartCurriculumResponseRecordDto: { - /** - * @description 파트명 - * @example 안드로이드 - */ - part: string; - /** @description 주차별 커리큘럼 */ - curriculums: string[]; - }; - /** @description SNS 링크 정보 */ - GetMainSnsLinksResponseRecordDto: { - /** - * @description 이메일 - * @example example@sopt.org - */ - email?: string; - /** - * @description 링크드인 URL - * @example https://www.linkedin.com/in/example - */ - linkedin?: string; - /** - * @description 깃허브 URL - * @example https://github.com/example - */ - github?: string; - /** - * @description 비핸스 URL - * @example https://www.behance.net/example - */ - behance?: string; - }; - /** @description 브랜딩 컬러 정보 */ - GetAdminBrandingColorResponseRecordDto: { - /** - * @description 메인 컬러 - * @example #FF0000 - */ - main: string; - /** - * @description 로우 톤 컬러 - * @example #CC0000 - */ - low: string; - /** - * @description 하이 톤 컬러 - * @example #FF3333 - */ - high: string; - /** - * @description 포인트 컬러 - * @example #FF9999 - */ - point: string; - }; - /** @description 핵심 가치 정보 */ - GetAdminCoreValueResponseRecordDto: { - /** - * @description 핵심 가치 - * @example 용기 - */ - value: string; - /** - * @description 핵심 가치 설명 - * @example 새로운 도전을 위해 과감히 용기내는 사람 - */ - description: string; - /** - * @description 핵심 가치 이미지 링크 - * @example https://corevalue.png - */ - image: string; - }; - /** @description 소개글 정보 */ - GetAdminIntroductionResponseRecordDto: { - /** - * @description 내용 - * @example Android 앱 개발 - */ - content: string; - /** - * @description 우대사항 - * @example Kotlin 개발 경험 - */ - preference: string; - }; - /** @description 최신소식 */ - GetAdminLatestNewsResponseRecordDto: { - /** - * Format: int32 - * @description 최신소식 ID - * @example 1 - */ - id: number; - /** - * @description 최신소식 제목 - * @example Mind 23 - */ - title: string; - }; - /** @description 메인 버튼 스타일 */ - GetAdminMainButtonResponseRecordDto: { - /** - * @description 버튼 텍스트 - * @example 지원하기 - */ - text: string; - /** - * @description 주요 컬러 - * @example #FF0000 - */ - keyColor: string; - /** - * @description 보조 컬러 - * @example #CC0000 - */ - subColor: string; - }; - /** @description 멤버 정보 */ - GetAdminMemberResponseRecordDto: { - /** - * @description 역할 - * @example 회장 - */ - role: string; - /** - * @description 이름 - * @example 홍길동 - */ - name: string; - /** - * @description 소속 - * @example SOPT - */ - affiliation: string; - /** - * @description 한줄 소개 - * @example 안녕하세요! - */ - introduction: string; - /** - * @description 프로필 이미지 링크 - * @example https://profile.png - */ - profileImage: string; - sns: components['schemas']['GetAdminSnsLinksResponseRecordDto']; - }; - /** @description 파트별 커리큘럼 정보 */ - GetAdminPartCurriculumResponseRecordDto: { - /** - * @description 파트명 - * @example 안드로이드 - */ - part: string; - /** @description 주차별 커리큘럼 */ - curriculums: string[]; - }; - /** @description 파트 소개 정보 */ - GetAdminPartIntroductionResponseRecordDto: { - /** - * @description 파트명 - * @example 안드로이드 - */ - part: string; - /** - * @description 파트 설명 - * @example Android 앱 개발 - */ - description: string; - }; - /** @description 질문과 답변 정보 */ - GetAdminQuestionResponseRecordDto: { - /** - * @description 질문 - * @example 몇명 뽑나요? - */ - question: string; - /** - * @description 답변 - * @example 10명 뽑아요. - */ - answer: string; - }; - /** @description 모집 파트 커리큘럼 정보 */ - GetAdminRecruitPartCurriculumResponseRecordDto: { - /** - * @description 파트명 - * @example 안드로이드 - */ - part: string; - introduction: components['schemas']['GetAdminIntroductionResponseRecordDto']; - }; - /** @description 모집 질문 정보 */ - GetAdminRecruitQuestionResponseRecordDto: { - /** - * @description 파트명 - * @example 안드로이드 - */ - part: string; - /** @description 질문 리스트 */ - questions: components['schemas']['GetAdminQuestionResponseRecordDto'][]; - }; - /** @description 모집 일정 정보 */ - GetAdminRecruitScheduleResponseRecordDto: { - /** - * @description 타입 - * @example OB - * @enum {string} - */ - type: 'OB' | 'YB'; - schedule: components['schemas']['GetAdminScheduleResponseRecordDto']; - }; - /** @description 어드민 데이터 조회하기 */ - GetAdminResponseDto: { - /** - * Format: int32 - * @description 기수 - * @example 34 - */ - generation: number; - /** - * @description 기수명 - * @example SOPT - */ - name: string; - recruitSchedule?: components['schemas']['GetAdminRecruitScheduleResponseRecordDto'][]; - brandingColor?: components['schemas']['GetAdminBrandingColorResponseRecordDto']; - mainButton?: components['schemas']['GetAdminMainButtonResponseRecordDto']; - partIntroduction?: components['schemas']['GetAdminPartIntroductionResponseRecordDto'][]; - latestNews?: components['schemas']['GetAdminLatestNewsResponseRecordDto'][]; - /** - * @description 헤더 이미지 링크 - * @example https://header.png - */ - headerImage: string; - coreValue?: components['schemas']['GetAdminCoreValueResponseRecordDto'][]; - partCurriculum?: components['schemas']['GetAdminPartCurriculumResponseRecordDto'][]; - member?: components['schemas']['GetAdminMemberResponseRecordDto'][]; - /** - * @description 지원하기 헤더 이미지 링크 - * @example https://recruit_header.png - */ - recruitHeaderImage: string; - recruitPartCurriculum?: components['schemas']['GetAdminRecruitPartCurriculumResponseRecordDto'][]; - recruitQuestion?: components['schemas']['GetAdminRecruitQuestionResponseRecordDto'][]; - }; - /** @description 상세 일정 정보 */ - GetAdminScheduleResponseRecordDto: { - /** - * @description 지원 시작 시간 - * @example 2024-01-01 09:00:00 - */ - applicationStartTime: string; - /** - * @description 지원 종료 시간 - * @example 2024-01-31 18:00:00 - */ - applicationEndTime: string; - /** - * @description 지원 결과 발표 시간 - * @example 2024-02-01 12:00:00 - */ - applicationResultTime: string; - /** - * @description 면접 시작 시간 - * @example 2024-02-05 09:00:00 - */ - interviewStartTime: string; - /** - * @description 면접 종료 시간 - * @example 2024-02-05 18:00:00 - */ - interviewEndTime: string; - /** - * @description 최종 결과 발표 시간 - * @example 2024-02-10 12:00:00 - */ - finalResultTime: string; - }; - /** @description SNS 링크 정보 */ - GetAdminSnsLinksResponseRecordDto: { - /** - * @description 이메일 - * @example example@sopt.org - */ - email?: string; - /** - * @description 링크드인 URL - * @example https://www.linkedin.com/in/example - */ - linkedin?: string; - /** - * @description 깃허브 URL - * @example https://github.com/example - */ - github?: string; - /** - * @description 비핸스 URL - * @example https://www.behance.net/example - */ - behance?: string; - }; - /** @description 최신소식 조회하기 */ - GetAdminNewsResponseDto: { - /** - * Format: int32 - * @description 이미지 ID - * @example 1 - */ - id: number; - /** - * @description 이미지 링크 - * @example https://image.url - */ - image: string; - /** - * @description 제목 - * @example MIND 23 - */ - title: string; - /** - * @description 링크 - * @example https://disquiet.io/product/mind-23-%EC%98%A4%EB%8A%98%EB%8F%84-%EB%A9%88%EC%B6%94%EC%A7%80-%EC%95%8A%EB%8A%94-it%EC%9D%B8%EB%93%A4 - */ - link: string; - }; - }; - responses: never; - parameters: never; - requestBodies: never; - headers: never; - pathItems: never; -} -export type $defs = Record; -export interface operations { - registerNotification: { - parameters: { - query: { + "/notification/register": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["registerNotification"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/admin": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; /** - * @description 활동 기수 - * @example 34 + * 어드민 메인 데이터 조회 + * @description 어드민 메인 데이터를 조회합니다 */ - generation: string; + get: operations["getMain"]; + put?: never; /** - * @description 이메일 - * @example example@naver.com + * 어드민 메인 데이터 배포 + * @description 어드민 메인 데이터를 배포합니다 */ - email: string; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; + post: operations["addMain"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/admin/news": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * 최신소식 조회 + * @description 최신소식을 조회합니다 + */ + get: operations["getMainNews"]; + put?: never; + /** + * 최신소식 추가 + * @description 최신소식을 추가합니다 + */ + post: operations["addMainNews"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/admin/news/delete": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; }; - content: { - '*/*': components['schemas']['RegisterNotificationResponseDto']; + get?: never; + put?: never; + /** + * 최신소식 삭제 + * @description 최신소식을 삭제합니다 + */ + post: operations["deleteMainNews"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/admin/confirm": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; }; - }; - }; - }; - getMain: { - parameters: { - query: { + get?: never; + put?: never; /** - * @description 기수 - * @example 35 + * 어드민 메인 데이터 배포 확인 + * @description 어드민 메인 데이터 배포를 확인합니다 */ - generation: string; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; + post: operations["addMainConfirm"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/semesters": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; }; - content: { - '*/*': components['schemas']['GetAdminResponseDto']; + get: operations["getSemesters"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/projects": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; }; - }; - }; - }; - addMain: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - 'application/json': components['schemas']['AddAdminRequestDto']; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; + get: operations["getAllProject"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/notification/list": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; }; - content: { - '*/*': components['schemas']['AddAdminResponseDto']; + get: operations["getAllProject_1"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/homepage": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; }; - }; - }; - }; - getMainNews: { - parameters: { - query: { - /** @description 최신소식 ID */ - id: string; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; + /** + * 메인 페이지 조회 + * @description 메인 페이지 데이터를 조회합니다 + */ + get: operations["getMainPage"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/homepage/recruit": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; }; - content: { - '*/*': components['schemas']['GetAdminNewsResponseDto']; + /** + * 지원하기 페이지 조회 + * @description 지원하기 페이지 데이터를 조회합니다 + */ + get: operations["get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/homepage/about": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; }; - }; - }; - }; - addMainNews: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: { - content: { - 'multipart/form-data': components['schemas']['AddAdminNewsRequestDto']; - }; + /** + * 소개 페이지 조회 + * @description 소개 페이지 데이터를 조회합니다 + */ + get: operations["getAboutPage"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/health": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["healthCheck"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; +} +export type webhooks = Record; +export interface components { + schemas: { + RegisterNotificationResponseDto: { + /** + * Format: int32 + * @description Notification ID + */ + id: number; + /** + * Format: int32 + * @description 기수 (Generation) + */ + generation: number; + /** @description 이메일 (Email) */ + email: string; + /** + * Format: date-time + * @description 생성일자 (Creation Date) + */ + createdAt: string; }; - content: { - '*/*': components['schemas']['AddAdminNewsResponseDto']; + /** @description 브랜딩 컬러 */ + AddAdminBrandingColorRequestDto: { + /** + * @description 메인 컬러 + * @example #FF0000 + */ + main: string; + /** + * @description 로우 톤 컬러 + * @example #CC0000 + */ + low: string; + /** + * @description 하이 톤 컬러 + * @example #FF3333 + */ + high: string; + /** + * @description 포인트 컬러 + * @example #FF9999 + */ + point: string; }; - }; - }; - }; - deleteMainNews: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - 'application/json': components['schemas']['DeleteAdminNewsRequestDto']; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; + /** @description 핵심 가치 */ + AddAdminCoreValueRequestDto: { + /** + * @description 핵심 가치 + * @example 용기 + */ + value: string; + /** + * @description 핵심 가치 설명 + * @example 새로운 도전을 위해 과감히 용기내는 사람 + */ + description: string; + /** + * @description 핵심 가치 이미지 파일명 + * @example image.png + */ + imageFileName: string; }; - content: { - '*/*': components['schemas']['DeleteAdminNewsResponseDto']; + /** @description 소개글 정보 */ + AddAdminIntroductionRequestDto: { + /** + * @description 내용 + * @example Android 앱 개발 + */ + content: string; + /** + * @description 우대사항 + * @example Kotlin 개발 경험 + */ + preference: string; }; - }; - }; - }; - addMainConfirm: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - 'application/json': components['schemas']['AddAdminConfirmRequestDto']; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; + /** @description 메인 버튼 스타일 */ + AddAdminMainButtonRequestDto: { + /** + * @description 버튼 텍스트 + * @example 지원하기 + */ + text: string; + /** + * @description 주요 컬러 + * @example #FF0000 + */ + keyColor: string; + /** + * @description 보조 컬러 + * @example #CC0000 + */ + subColor: string; + }; + /** @description 멤버 정보 */ + AddAdminMemberRequestDto: { + /** + * @description 역할 + * @example 회장 + */ + role: string; + /** + * @description 이름 + * @example 홍길동 + */ + name: string; + /** + * @description 소속 + * @example SOPT + */ + affiliation: string; + /** + * @description 한줄 소개 + * @example 안녕하세요! + */ + introduction: string; + sns: components["schemas"]["AddAdminSnsLinksRequestDto"]; + /** + * @description 프로필 이미지 파일명 + * @example image.png + */ + profileImageFileName: string; + }; + /** @description 파트별 커리큘럼 */ + AddAdminPartCurriculumRequestDto: { + /** + * @description 파트명 + * @example 안드로이드 + */ + part: string; + /** @description 주차별 커리큘럼 (배열 순서 = 주차 순서) */ + curriculums: string[]; + }; + /** @description 파트 소개 */ + AddAdminPartIntroductionRequestDto: { + /** + * @description 파트명 + * @example 안드로이드 + */ + part: string; + /** + * @description 파트 설명 + * @example Android 앱 개발 + */ + description: string; + }; + /** @description 질문과 답변 */ + AddAdminQuestionRequestDto: { + /** + * @description 질문 + * @example 몇명 뽑나요? + */ + question: string; + /** + * @description 답변 + * @example 10명 뽑아요. + */ + answer: string; + }; + /** @description 모집 파트 커리큘럼 */ + AddAdminRecruitPartCurriculumRequestDto: { + /** + * @description 파트명 + * @example 안드로이드 + */ + part: string; + introduction: components["schemas"]["AddAdminIntroductionRequestDto"]; + }; + /** @description 모집 질문 */ + AddAdminRecruitQuestionRequestDto: { + /** + * @description 파트명 + * @example 안드로이드 + */ + part: string; + /** @description 질문 리스트 */ + questions: components["schemas"]["AddAdminQuestionRequestDto"][]; + }; + /** @description 모집 일정 */ + AddAdminRecruitScheduleRequestDto: { + /** + * @description 타입 + * @example OB + * @enum {string} + */ + type: "OB" | "YB"; + schedule: components["schemas"]["AddAdminScheduleRequestDto"]; + }; + /** @description 어드민 배포하기 */ + AddAdminRequestDto: { + /** + * Format: int32 + * @description 기수 + * @example 34 + */ + generation: number; + /** + * @description 기수명 + * @example SOPT + */ + name: string; + recruitSchedule?: components["schemas"]["AddAdminRecruitScheduleRequestDto"][]; + brandingColor?: components["schemas"]["AddAdminBrandingColorRequestDto"]; + mainButton?: components["schemas"]["AddAdminMainButtonRequestDto"]; + partIntroduction?: components["schemas"]["AddAdminPartIntroductionRequestDto"][]; + /** + * @description 헤더 이미지 파일명 + * @example header.png + */ + headerImageFileName: string; + coreValue?: components["schemas"]["AddAdminCoreValueRequestDto"][]; + partCurriculum?: components["schemas"]["AddAdminPartCurriculumRequestDto"][]; + member?: components["schemas"]["AddAdminMemberRequestDto"][]; + /** + * @description 지원하기 헤더 이미지 파일명 + * @example recruit_header.png + */ + recruitHeaderImageFileName: string; + recruitPartCurriculum?: components["schemas"]["AddAdminRecruitPartCurriculumRequestDto"][]; + recruitQuestion?: components["schemas"]["AddAdminRecruitQuestionRequestDto"][]; + }; + /** @description 상세 일정 */ + AddAdminScheduleRequestDto: { + /** + * @description 지원 시작 시간 + * @example 2024-01-01 09:00:00 + */ + applicationStartTime: string; + /** + * @description 지원 종료 시간 + * @example 2024-01-31 18:00:00 + */ + applicationEndTime: string; + /** + * @description 지원 결과 발표 시간 + * @example 2024-02-01 12:00:00 + */ + applicationResultTime: string; + /** + * @description 면접 시작 시간 + * @example 2024-02-05 09:00:00 + */ + interviewStartTime: string; + /** + * @description 면접 종료 시간 + * @example 2024-02-05 18:00:00 + */ + interviewEndTime: string; + /** + * @description 최종 결과 발표 시간 + * @example 2024-02-10 12:00:00 + */ + finalResultTime: string; + }; + /** @description SNS 링크 정보 */ + AddAdminSnsLinksRequestDto: { + /** + * @description 이메일 + * @example example@sopt.org + */ + email?: string; + /** + * @description 링크드인 URL + * @example https://www.linkedin.com/in/example + */ + linkedin?: string; + /** + * @description 깃허브 URL + * @example https://github.com/example + */ + github?: string; + /** + * @description 비핸스 URL + * @example https://www.behance.net/example + */ + behance?: string; + }; + /** @description 핵심가치 이미지 S3 PresigneUrl 정보 */ + AddAdminCoreValueResponseRecordDto: { + /** + * @description 핵심 가치 + * @example 용기 + */ + value: string; + /** @description 핵심가치 이미지 PresgiendUrl */ + image: string; + }; + /** @description 멤버 프로필 이미지 S3 PresigneUrl 정보 */ + AddAdminMemberResponseRecordDto: { + /** + * @description 역할 + * @example 회장 + */ + role: string; + /** + * @description 이름 + * @example 홍길동 + */ + name: string; + /** @description 프로필 이미지 PresgiendUrl */ + profileImage: string; + }; + /** @description 어드민 메인정보 추가 */ + AddAdminResponseDto: { + /** + * Format: int32 + * @description 기수 + * @example 34 + */ + generation: number; + /** + * @description 헤더 이미지 S3 PresignedUrl + * @example https://image.url + */ + headerImage: string; + /** @description 핵심가치 이미지 S3 PresigneUrl 정보 */ + coreValues: components["schemas"]["AddAdminCoreValueResponseRecordDto"][]; + /** @description 멤버 프로필 이미지 S3 PresigneUrl 정보 */ + members: components["schemas"]["AddAdminMemberResponseRecordDto"][]; + /** + * @description 지원하기 헤더 이미지 S3 PresignedUrl + * @example https://image.url + */ + recruitHeaderImage: string; + }; + /** @description 최신소식 추가하기 */ + AddAdminNewsRequestDto: { + /** Format: binary */ + image: string; + /** + * @description 제목 + * @example MIND 23 + */ + title: string; + /** + * @description 링크 + * @example https://disquiet.io/product/mind-23-%EC%98%A4%EB%8A%98%EB%8F%84-%EB%A9%88%EC%B6%94%EC%A7%80-%EC%95%8A%EB%8A%94-it%EC%9D%B8%EB%93%A4 + */ + link: string; + }; + /** @description 최신 소식 추가 */ + AddAdminNewsResponseDto: { + /** + * @description 성공 메세지 + * @example success + */ + message: string; + }; + /** @description 최신소식 삭제하기 */ + DeleteAdminNewsRequestDto: { + /** + * Format: int32 + * @description 최신소식 ID + */ + id: number; + }; + /** @description 최신소식 삭제 */ + DeleteAdminNewsResponseDto: { + /** + * @description 성공 메세지 + * @example success + */ + message: string; + }; + /** @description 어드민 배포 확인 */ + AddAdminConfirmRequestDto: { + /** + * Format: int32 + * @description 기수 + * @example 34 + */ + generation: number; + }; + /** @description 어드민 메인정보 파일 업로드 확인 */ + AddAdminConfirmResponseDto: { + /** + * @description 성공 메세지 + * @example success + */ + message: string; + }; + SemestersListResponse: { + /** + * Format: int32 + * @description 페이지네이션 조회 조건 페이지 수 + */ + page?: number; + /** + * Format: int32 + * @description 페이지네이션 조회로 기수 정보 가져올 갯수 + */ + limit?: number; + /** + * Format: int64 + * @description 조회한 기수 리스트 수 + */ + total?: number; + /** @description 기수 대표 정보 */ + semesters?: components["schemas"]["SemestersResponse"][] | null; + }; + /** @description 기수 대표 정보 */ + SemestersResponse: { + /** + * Format: int32 + * @description 역대 기수 + */ + id?: number; + /** @description 기수에 사용했던 컬러 */ + color?: string | null; + /** @description 기수에 사용했던 로고 */ + logo?: string; + /** @description 기수에 사용했던 백그라운드 이미지 */ + background?: string | null; + /** @description 기수에 사용했던 테마명 */ + name?: string | null; + /** @description 기수 활동 기간 */ + year?: string; + } | null; + /** @description 프로젝트의 카테고리 */ + Category: { + /** @enum {string} */ + project: "APPJAM" | "SOPKATHON" | "SOPTERM" | "STUDY" | "JOINTSEMINAR" | "ETC"; + }; + /** @description 프로젝트 링크 */ + Link: { + /** + * @description 웹사이트, 구글 플레이스토어, 앱스토어, Github, 발표영상 등 프로젝트에 관련된 링크의 종류 + * @example website + * @enum {string} + */ + title: "website" | "googlePlay" | "appStore" | "github" | "media" | "instagram"; + /** + * @description 링크의 url 주소 + * @example https://example.com + */ + url: string; + }; + PaginateResponseProjectResponse: { + data?: components["schemas"]["ProjectResponse"][]; + /** @description 다음 페이지가 있는지 여부를 나타냄. */ + hasNextPage: boolean; + /** @description 이전 페이지가 있는지 여부를 나타냄. */ + hasPrevPage: boolean; + /** + * Format: int32 + * @description 총 data 들의 갯수 + */ + totalCount: number; + /** + * Format: int32 + * @description 총 페이지 카운트 + */ + totalPage: number; + /** + * Format: int32 + * @description 현재 페이지 + */ + currentPage: number; + /** + * Format: int32 + * @description item을 몇개까지 가져올지에 대한 카운트 + */ + limit: number; + }; + ProjectResponse: { + /** + * Format: int64 + * @description 프로젝트의 Id + */ + id: number; + /** @description 프로젝트의 이름 */ + name: string; + /** + * Format: int32 + * @description 프로젝트가 진행된 기수 + */ + generation: number; + category: components["schemas"]["Category"]; + /** @description 서비스 형태 */ + serviceType: ("WEB" | "APP")[]; + /** @description 프로젝트 한줄소개 */ + summary: string; + /** @description 프로젝트 설명 */ + detail: string; + /** @description 프로젝트 로고 이미지 URL */ + logoImage: string; + /** @description 프로젝트 썸네일 이미지 URL */ + thumbnailImage: string; + /** @description 서비스 이용 가능 여부 */ + isAvailable: boolean; + /** @description 창업중인지 여부 */ + isFounding: boolean; + /** @description 프로젝트 링크 */ + links: components["schemas"]["Link"][]; + }; + GetNotificationListResponseDto: { + /** + * Format: int32 + * @description 기수 + * @example 34 + */ + generation: number; + /** + * @description 모집알림 신청한 이메일 리스트 + * @example [ + * "example@naver.com", + * "example2@naver.com", + * "example3@naver.com" + * ] + */ + emailList: string[]; + }; + /** @description 브랜딩 컬러 정보 */ + GetMainBrandingColorResponseRecordDto: { + /** + * @description 메인 컬러 + * @example #FF0000 + */ + main: string; + /** + * @description 로우 톤 컬러 + * @example #CC0000 + */ + low: string; + /** + * @description 하이 톤 컬러 + * @example #FF3333 + */ + high: string; + /** + * @description 포인트 컬러 + * @example #FF9999 + */ + point: string; + }; + /** @description 최신소식 */ + GetMainLatestNewsResponseRecordDto: { + /** + * Format: int32 + * @description 최신소식 ID + * @example 1 + */ + id: number; + /** + * @description 최신소식 제목 + * @example Mind 23 + */ + title: string; + /** + * @description 최신소식 이미지 링크 + * @example https://image.url + */ + image: string; + /** + * @description 최신소식 링크 + * @example https://news.url + */ + link: string; + }; + /** @description 메인 버튼 스타일 */ + GetMainMainButtonResponseRecordDto: { + /** + * @description 버튼 텍스트 + * @example 지원하기 + */ + text: string; + /** + * @description 주요 컬러 + * @example #FF0000 + */ + keyColor: string; + /** + * @description 보조 컬러 + * @example #CC0000 + */ + subColor: string; + }; + /** @description 메인 페이지 데이터 조회하기 */ + GetMainPageResponseDto: { + /** + * Format: int32 + * @description 기수 + * @example 34 + */ + generation: number; + /** + * @description 기수명 + * @example SOPT + */ + name: string; + brandingColor?: components["schemas"]["GetMainBrandingColorResponseRecordDto"]; + mainButton?: components["schemas"]["GetMainMainButtonResponseRecordDto"]; + partIntroduction?: components["schemas"]["GetMainPartIntroductionResponseRecordDto"][]; + latestNews?: components["schemas"]["GetMainLatestNewsResponseRecordDto"][]; + }; + /** @description 파트 소개 정보 */ + GetMainPartIntroductionResponseRecordDto: { + /** + * @description 파트명 + * @example 안드로이드 + */ + part: string; + /** + * @description 파트 설명 + * @example Android 앱 개발 + */ + description: string; + }; + /** @description 소개글 정보 */ + GetMainIntroductionResponseRecordDto: { + /** + * @description 내용 + * @example Android 앱 개발 + */ + content: string; + /** + * @description 우대사항 + * @example Kotlin 개발 경험 + */ + preference: string; + }; + /** @description 질문과 답변 정보 */ + GetMainQuestionResponseRecordDto: { + /** + * @description 질문 + * @example 몇명 뽑나요? + */ + question: string; + /** + * @description 답변 + * @example 10명 뽑아요. + */ + answer: string; + }; + /** @description 모집 파트 커리큘럼 정보 */ + GetMainRecruitPartCurriculumResponseRecordDto: { + /** + * @description 파트명 + * @example 안드로이드 + */ + part: string; + introduction: components["schemas"]["GetMainIntroductionResponseRecordDto"]; }; - content: { - '*/*': components['schemas']['AddAdminConfirmResponseDto']; + /** @description 모집 질문 정보 */ + GetMainRecruitQuestionResponseRecordDto: { + /** + * @description 파트명 + * @example 안드로이드 + */ + part: string; + /** @description 질문 리스트 */ + questions: components["schemas"]["GetMainQuestionResponseRecordDto"][]; + }; + /** @description 모집 일정 정보 */ + GetMainRecruitScheduleResponseRecordDto: { + /** + * @description 타입 + * @example OB + * @enum {string} + */ + type: "OB" | "YB"; + schedule: components["schemas"]["GetMainScheduleResponseRecordDto"]; + }; + /** @description 상세 일정 정보 */ + GetMainScheduleResponseRecordDto: { + /** + * @description 지원 시작 시간 + * @example 2024-01-01 09:00:00 + */ + applicationStartTime: string; + /** + * @description 지원 종료 시간 + * @example 2024-01-31 18:00:00 + */ + applicationEndTime: string; + /** + * @description 지원 결과 발표 시간 + * @example 2024-02-01 12:00:00 + */ + applicationResultTime: string; + /** + * @description 면접 시작 시간 + * @example 2024-02-05 09:00:00 + */ + interviewStartTime: string; + /** + * @description 면접 종료 시간 + * @example 2024-02-05 18:00:00 + */ + interviewEndTime: string; + /** + * @description 최종 결과 발표 시간 + * @example 2024-02-10 12:00:00 + */ + finalResultTime: string; + }; + /** @description 지원하기 페이지 데이터 조회하기 */ + GetRecruitingPageResponseDto: { + /** + * Format: int32 + * @description 기수 + * @example 34 + */ + generation: number; + /** + * @description 기수명 + * @example SOPT + */ + name: string; + /** + * @description 지원하기 헤더 이미지 링크 + * @example https://recruit_header.png + */ + recruitHeaderImage: string; + brandingColor?: components["schemas"]["GetMainBrandingColorResponseRecordDto"]; + recruitSchedule?: components["schemas"]["GetMainRecruitScheduleResponseRecordDto"][]; + recruitPartCurriculum?: components["schemas"]["GetMainRecruitPartCurriculumResponseRecordDto"][]; + recruitQuestion?: components["schemas"]["GetMainRecruitQuestionResponseRecordDto"][]; + }; + /** @description 소개 페이지 데이터 조회하기 */ + GetAboutPageResponseDto: { + /** + * Format: int32 + * @description 기수 + * @example 34 + */ + generation: number; + /** + * @description 기수명 + * @example SOPT + */ + name: string; + /** + * @description 헤더 이미지 링크 + * @example https://header.png + */ + headerImage: string; + brandingColor?: components["schemas"]["GetMainBrandingColorResponseRecordDto"]; + coreValue?: components["schemas"]["GetMainCoreValueResponseRecordDto"][]; + partCurriculum?: components["schemas"]["GetMainPartCurriculumResponseRecordDto"][]; + member?: components["schemas"]["GetMainMemberResponseRecordDto"][]; + }; + /** @description 핵심 가치 정보 */ + GetMainCoreValueResponseRecordDto: { + /** + * @description 핵심 가치 + * @example 용기 + */ + value: string; + /** + * @description 핵심 가치 설명 + * @example 새로운 도전을 위해 과감히 용기내는 사람 + */ + description: string; + /** + * @description 핵심 가치 이미지 링크 + * @example https://corevalue.png + */ + image: string; + }; + /** @description 멤버 정보 */ + GetMainMemberResponseRecordDto: { + /** + * @description 역할 + * @example 회장 + */ + role: string; + /** + * @description 이름 + * @example 홍길동 + */ + name: string; + /** + * @description 소속 + * @example SOPT + */ + affiliation: string; + /** + * @description 한줄 소개 + * @example 안녕하세요! + */ + introduction: string; + /** + * @description 프로필 이미지 링크 + * @example https://profile.png + */ + profileImage: string; + sns: components["schemas"]["GetMainSnsLinksResponseRecordDto"]; + }; + /** @description 파트별 커리큘럼 정보 */ + GetMainPartCurriculumResponseRecordDto: { + /** + * @description 파트명 + * @example 안드로이드 + */ + part: string; + /** @description 주차별 커리큘럼 */ + curriculums: string[]; + }; + /** @description SNS 링크 정보 */ + GetMainSnsLinksResponseRecordDto: { + /** + * @description 이메일 + * @example example@sopt.org + */ + email?: string; + /** + * @description 링크드인 URL + * @example https://www.linkedin.com/in/example + */ + linkedin?: string; + /** + * @description 깃허브 URL + * @example https://github.com/example + */ + github?: string; + /** + * @description 비핸스 URL + * @example https://www.behance.net/example + */ + behance?: string; + }; + /** @description 브랜딩 컬러 정보 */ + GetAdminBrandingColorResponseRecordDto: { + /** + * @description 메인 컬러 + * @example #FF0000 + */ + main: string; + /** + * @description 로우 톤 컬러 + * @example #CC0000 + */ + low: string; + /** + * @description 하이 톤 컬러 + * @example #FF3333 + */ + high: string; + /** + * @description 포인트 컬러 + * @example #FF9999 + */ + point: string; + }; + /** @description 핵심 가치 정보 */ + GetAdminCoreValueResponseRecordDto: { + /** + * @description 핵심 가치 + * @example 용기 + */ + value: string; + /** + * @description 핵심 가치 설명 + * @example 새로운 도전을 위해 과감히 용기내는 사람 + */ + description: string; + /** + * @description 핵심 가치 이미지 링크 + * @example https://corevalue.png + */ + image: string; + }; + /** @description 소개글 정보 */ + GetAdminIntroductionResponseRecordDto: { + /** + * @description 내용 + * @example Android 앱 개발 + */ + content: string; + /** + * @description 우대사항 + * @example Kotlin 개발 경험 + */ + preference: string; + }; + /** @description 최신소식 */ + GetAdminLatestNewsResponseRecordDto: { + /** + * Format: int32 + * @description 최신소식 ID + * @example 1 + */ + id: number; + /** + * @description 최신소식 제목 + * @example Mind 23 + */ + title: string; + }; + /** @description 메인 버튼 스타일 */ + GetAdminMainButtonResponseRecordDto: { + /** + * @description 버튼 텍스트 + * @example 지원하기 + */ + text: string; + /** + * @description 주요 컬러 + * @example #FF0000 + */ + keyColor: string; + /** + * @description 보조 컬러 + * @example #CC0000 + */ + subColor: string; + }; + /** @description 멤버 정보 */ + GetAdminMemberResponseRecordDto: { + /** + * @description 역할 + * @example 회장 + */ + role: string; + /** + * @description 이름 + * @example 홍길동 + */ + name: string; + /** + * @description 소속 + * @example SOPT + */ + affiliation: string; + /** + * @description 한줄 소개 + * @example 안녕하세요! + */ + introduction: string; + /** + * @description 프로필 이미지 링크 + * @example https://profile.png + */ + profileImage: string; + sns: components["schemas"]["GetAdminSnsLinksResponseRecordDto"]; + }; + /** @description 파트별 커리큘럼 정보 */ + GetAdminPartCurriculumResponseRecordDto: { + /** + * @description 파트명 + * @example 안드로이드 + */ + part: string; + /** @description 주차별 커리큘럼 */ + curriculums: string[]; + }; + /** @description 파트 소개 정보 */ + GetAdminPartIntroductionResponseRecordDto: { + /** + * @description 파트명 + * @example 안드로이드 + */ + part: string; + /** + * @description 파트 설명 + * @example Android 앱 개발 + */ + description: string; + }; + /** @description 질문과 답변 정보 */ + GetAdminQuestionResponseRecordDto: { + /** + * @description 질문 + * @example 몇명 뽑나요? + */ + question: string; + /** + * @description 답변 + * @example 10명 뽑아요. + */ + answer: string; + }; + /** @description 모집 파트 커리큘럼 정보 */ + GetAdminRecruitPartCurriculumResponseRecordDto: { + /** + * @description 파트명 + * @example 안드로이드 + */ + part: string; + introduction: components["schemas"]["GetAdminIntroductionResponseRecordDto"]; + }; + /** @description 모집 질문 정보 */ + GetAdminRecruitQuestionResponseRecordDto: { + /** + * @description 파트명 + * @example 안드로이드 + */ + part: string; + /** @description 질문 리스트 */ + questions: components["schemas"]["GetAdminQuestionResponseRecordDto"][]; + }; + /** @description 모집 일정 정보 */ + GetAdminRecruitScheduleResponseRecordDto: { + /** + * @description 타입 + * @example OB + * @enum {string} + */ + type: "OB" | "YB"; + schedule: components["schemas"]["GetAdminScheduleResponseRecordDto"]; + }; + /** @description 어드민 데이터 조회하기 */ + GetAdminResponseDto: { + /** + * Format: int32 + * @description 기수 + * @example 34 + */ + generation: number; + /** + * @description 기수명 + * @example SOPT + */ + name: string; + recruitSchedule?: components["schemas"]["GetAdminRecruitScheduleResponseRecordDto"][]; + brandingColor?: components["schemas"]["GetAdminBrandingColorResponseRecordDto"]; + mainButton?: components["schemas"]["GetAdminMainButtonResponseRecordDto"]; + partIntroduction?: components["schemas"]["GetAdminPartIntroductionResponseRecordDto"][]; + latestNews?: components["schemas"]["GetAdminLatestNewsResponseRecordDto"][]; + /** + * @description 헤더 이미지 링크 + * @example https://header.png + */ + headerImage: string; + coreValue?: components["schemas"]["GetAdminCoreValueResponseRecordDto"][]; + partCurriculum?: components["schemas"]["GetAdminPartCurriculumResponseRecordDto"][]; + member?: components["schemas"]["GetAdminMemberResponseRecordDto"][]; + /** + * @description 지원하기 헤더 이미지 링크 + * @example https://recruit_header.png + */ + recruitHeaderImage: string; + recruitPartCurriculum?: components["schemas"]["GetAdminRecruitPartCurriculumResponseRecordDto"][]; + recruitQuestion?: components["schemas"]["GetAdminRecruitQuestionResponseRecordDto"][]; + }; + /** @description 상세 일정 정보 */ + GetAdminScheduleResponseRecordDto: { + /** + * @description 지원 시작 시간 + * @example 2024-01-01 09:00:00 + */ + applicationStartTime: string; + /** + * @description 지원 종료 시간 + * @example 2024-01-31 18:00:00 + */ + applicationEndTime: string; + /** + * @description 지원 결과 발표 시간 + * @example 2024-02-01 12:00:00 + */ + applicationResultTime: string; + /** + * @description 면접 시작 시간 + * @example 2024-02-05 09:00:00 + */ + interviewStartTime: string; + /** + * @description 면접 종료 시간 + * @example 2024-02-05 18:00:00 + */ + interviewEndTime: string; + /** + * @description 최종 결과 발표 시간 + * @example 2024-02-10 12:00:00 + */ + finalResultTime: string; + }; + /** @description SNS 링크 정보 */ + GetAdminSnsLinksResponseRecordDto: { + /** + * @description 이메일 + * @example example@sopt.org + */ + email?: string; + /** + * @description 링크드인 URL + * @example https://www.linkedin.com/in/example + */ + linkedin?: string; + /** + * @description 깃허브 URL + * @example https://github.com/example + */ + github?: string; + /** + * @description 비핸스 URL + * @example https://www.behance.net/example + */ + behance?: string; + }; + /** @description 최신소식 조회하기 */ + GetAdminNewsResponseDto: { + /** + * Format: int32 + * @description 이미지 ID + * @example 1 + */ + id: number; + /** + * @description 이미지 링크 + * @example https://image.url + */ + image: string; + /** + * @description 제목 + * @example MIND 23 + */ + title: string; + /** + * @description 링크 + * @example https://disquiet.io/product/mind-23-%EC%98%A4%EB%8A%98%EB%8F%84-%EB%A9%88%EC%B6%94%EC%A7%80-%EC%95%8A%EB%8A%94-it%EC%9D%B8%EB%93%A4 + */ + link: string; }; - }; }; - }; - getSemesters: { - parameters: { - query: { - limit: number; - page?: number; - }; - header?: never; - path?: never; - cookie?: never; + responses: never; + parameters: never; + requestBodies: never; + headers: never; + pathItems: never; +} +export type $defs = Record; +export interface operations { + registerNotification: { + parameters: { + query: { + /** + * @description 활동 기수 + * @example 34 + */ + generation: string; + /** + * @description 이메일 + * @example example@naver.com + */ + email: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["RegisterNotificationResponseDto"]; + }; + }; + }; }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; + getMain: { + parameters: { + query: { + /** + * @description 기수 + * @example 35 + */ + generation: string; + }; + header?: never; + path?: never; + cookie?: never; }; - content: { - '*/*': components['schemas']['SemestersListResponse']; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["GetAdminResponseDto"]; + }; + }; }; - }; }; - }; - getAllProject: { - parameters: { - query?: { - /** @description 프로젝트 타입 */ - filter?: - | 'APPJAM' - | 'SOPKATHON' - | 'SOPTERM' - | 'STUDY' - | 'JOINTSEMINAR' - | 'ETC'; - /** @description 서비스 플랫폼 */ - platform?: 'WEB' | 'APP'; - /** - * @description 페이지 - * @example 1 - */ - pageNo?: number; - /** - * @description 페이지별 데이터 개수 - * @example 10 - */ - limit?: number; - }; - header?: never; - path?: never; - cookie?: never; + addMain: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["AddAdminRequestDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["AddAdminResponseDto"]; + }; + }; + }; }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; + getMainNews: { + parameters: { + query: { + /** @description 최신소식 ID */ + id: string; + }; + header?: never; + path?: never; + cookie?: never; }; - content: { - '*/*': components['schemas']['PaginateResponseProjectResponse']; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["GetAdminNewsResponseDto"]; + }; + }; }; - }; }; - }; - getAllProject_1: { - parameters: { - query?: { - /** @description 기수 */ - generation?: number; - }; - header?: never; - path?: never; - cookie?: never; + addMainNews: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": components["schemas"]["AddAdminNewsRequestDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["AddAdminNewsResponseDto"]; + }; + }; + }; }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; + deleteMainNews: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["DeleteAdminNewsRequestDto"]; + }; }; - content: { - '*/*': components['schemas']['GetNotificationListResponseDto']; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["DeleteAdminNewsResponseDto"]; + }; + }; }; - }; }; - }; - getMainPage: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; + addMainConfirm: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["AddAdminConfirmRequestDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["AddAdminConfirmResponseDto"]; + }; + }; + }; }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; + getSemesters: { + parameters: { + query: { + limit: number; + page?: number; + }; + header?: never; + path?: never; + cookie?: never; }; - content: { - '*/*': components['schemas']['GetMainPageResponseDto']; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["SemestersListResponse"]; + }; + }; }; - }; }; - }; - get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; + getAllProject: { + parameters: { + query?: { + /** @description 프로젝트 타입 */ + filter?: "APPJAM" | "SOPKATHON" | "SOPTERM" | "STUDY" | "JOINTSEMINAR" | "ETC"; + /** @description 서비스 플랫폼 */ + platform?: "WEB" | "APP"; + /** + * @description 페이지 + * @example 1 + */ + pageNo?: number; + /** + * @description 페이지별 데이터 개수 + * @example 10 + */ + limit?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["PaginateResponseProjectResponse"]; + }; + }; + }; }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; + getAllProject_1: { + parameters: { + query?: { + /** @description 기수 */ + generation?: number; + }; + header?: never; + path?: never; + cookie?: never; }; - content: { - '*/*': components['schemas']['GetRecruitingPageResponseDto']; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["GetNotificationListResponseDto"]; + }; + }; }; - }; }; - }; - getAboutPage: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; + getMainPage: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["GetMainPageResponseDto"]; + }; + }; + }; }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; }; - content: { - '*/*': components['schemas']['GetAboutPageResponseDto']; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["GetRecruitingPageResponseDto"]; + }; + }; }; - }; }; - }; - healthCheck: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; + getAboutPage: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["GetAboutPageResponseDto"]; + }; + }; + }; }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; + healthCheck: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; }; - content: { - '*/*': string; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": string; + }; + }; }; - }; }; - }; } diff --git a/src/components/org/OrgAdmin/AboutSection/CoreValue/index.tsx b/src/components/org/OrgAdmin/AboutSection/CoreValue/index.tsx index 2cd63d5..31796b9 100644 --- a/src/components/org/OrgAdmin/AboutSection/CoreValue/index.tsx +++ b/src/components/org/OrgAdmin/AboutSection/CoreValue/index.tsx @@ -27,26 +27,32 @@ const CoreValue = () => { { { { 0{idx + 1} { 사진은 1:1 비율로 올려주세요. SNS diff --git a/src/components/org/OrgAdmin/MyDropzone/index.tsx b/src/components/org/OrgAdmin/MyDropzone/index.tsx index 240548b..548df54 100644 --- a/src/components/org/OrgAdmin/MyDropzone/index.tsx +++ b/src/components/org/OrgAdmin/MyDropzone/index.tsx @@ -40,10 +40,18 @@ const MyDropzone = ({ (acceptedFiles: File[]) => { const file = acceptedFiles[0]; if (file) { + const sanitizedFileName = file.name + .trim() // 앞뒤 공백 제거 + .replace(/\s+/g, '_'); // 띄어쓰기를 언더스코어로 변경 + const reader = new FileReader(); - reader.onloadend = () => { + reader.onloadend = async () => { setPreviewUrl(reader.result as string); - setValue(label, reader.result, { shouldValidate: true }); + setValue( + label, + { fileName: sanitizedFileName, file }, + { shouldValidate: true }, + ); }; reader.readAsDataURL(file); } @@ -81,7 +89,7 @@ const MyDropzone = ({ {...getInputProps()} /> {previewUrl ? ( - + ) : isDragActive ? (

이미지를 드래그 해주세요...

) : ( diff --git a/src/components/org/OrgAdmin/RecruitSection/Header.tsx b/src/components/org/OrgAdmin/RecruitSection/Header.tsx index 50a6bba..56d6257 100644 --- a/src/components/org/OrgAdmin/RecruitSection/Header.tsx +++ b/src/components/org/OrgAdmin/RecruitSection/Header.tsx @@ -26,7 +26,7 @@ const Header = () => { 이미지는 1920*580 크기로 올려주세요. ‘지원하기’탭 가장 상단에 보여지는 이미지예요. - + ); diff --git a/src/components/org/OrgAdmin/api.ts b/src/components/org/OrgAdmin/api.ts new file mode 100644 index 0000000..3b04cc4 --- /dev/null +++ b/src/components/org/OrgAdmin/api.ts @@ -0,0 +1,36 @@ +import createFetch from 'openapi-fetch'; + +import { paths } from '@/__generated__/api'; +import { getToken } from '@/utils/auth'; + +export const fetcher = createFetch({ + baseUrl: process.env.NEXT_PUBLIC_ORG_API, + headers: { + Authorization: getToken('ACCESS'), + }, +}); + +export const sendData = async (data: any) => { + const res = await fetcher.POST('/admin', { + body: data, + }); + + return res; +}; + +export const sendPresignedURL = async (url: string, data: any) => { + const res = await fetch(url, { + method: 'POST', + body: data, + }); + + return res; +}; + +export const sendDataConfirm = async (data: any) => { + const res = await fetcher.POST('/admin/confirm', { + body: data, + }); + + return res; +}; diff --git a/src/components/org/OrgAdmin/home/api.ts b/src/components/org/OrgAdmin/home/api.ts index e79dacf..4c8f556 100644 --- a/src/components/org/OrgAdmin/home/api.ts +++ b/src/components/org/OrgAdmin/home/api.ts @@ -1,10 +1,11 @@ import axios from 'axios'; -import { fetch } from '@/components/org/api'; import { getToken } from '@/utils/auth'; +import { fetcher } from '../api'; + export const getAdminInfo = async () => { - const { data } = await fetch.GET('/admin', { + const { data } = await fetcher.GET('/admin', { params: { query: { generation: '34', @@ -16,7 +17,7 @@ export const getAdminInfo = async () => { }; export const postNews = async (formData: any) => { - const res = await fetch.POST('/admin/news', formData); + const res = await fetcher.POST('/admin/news', formData); return res; }; diff --git a/src/components/org/OrgAdmin/hooks.ts b/src/components/org/OrgAdmin/hooks.ts new file mode 100644 index 0000000..6789050 --- /dev/null +++ b/src/components/org/OrgAdmin/hooks.ts @@ -0,0 +1,171 @@ +import { useMutation } from 'react-query'; + +import { sendData, sendDataConfirm, sendPresignedURL } from './api'; + +interface UseMutateSendDataProps { + headerImageFile: File; + coreValueImageFile1: File; + coreValueImageFile2: File; + coreValueImageFile3: File; + memberImageFile1: File; + memberImageFile2: File; + memberImageFile3: File; + memberImageFile4: File; + memberImageFile5: File; + memberImageFile6: File; + memberImageFile7: File; + memberImageFile8: File; + memberImageFile9: File; + memberImageFile10: File; + memberImageFile11: File; + memberImageFile12: File; + recruitHeaderImageFile: File; +} + +const useMutateSendData = ({ + headerImageFile, + coreValueImageFile1, + coreValueImageFile2, + coreValueImageFile3, + memberImageFile1, + memberImageFile2, + memberImageFile3, + memberImageFile4, + memberImageFile5, + memberImageFile6, + memberImageFile7, + memberImageFile8, + memberImageFile9, + memberImageFile10, + memberImageFile11, + memberImageFile12, + recruitHeaderImageFile, +}: UseMutateSendDataProps) => { + const { mutate: sendMutate, isLoading: sendIsLoading } = useMutation({ + mutationFn: (data) => sendData(data), + onSuccess: async (res: any) => { + const { + generation, + coreValues, + headerImage: headerImageURL, + members, + recruitHeaderImage: recruitHeaderImageURL, + } = res.data; + + try { + await Promise.all([ + sendPresignedURL(headerImageURL, headerImageFile).catch((err) => { + console.error('소개 헤더 이미지 업로드 실패: ', err); + throw err; + }), + sendPresignedURL(coreValues[0].image, coreValueImageFile1).catch( + (err) => { + console.error('코어 밸류 1 이미지 업로드 실패: ', err); + throw err; + }, + ), + sendPresignedURL(coreValues[1].image, coreValueImageFile2).catch( + (err) => { + console.error('코어 밸류 2 이미지 업로드 실패: ', err); + throw err; + }, + ), + sendPresignedURL(coreValues[2].image, coreValueImageFile3).catch( + (err) => { + console.error('코어 밸류 3 이미지 업로드 실패: ', err); + throw err; + }, + ), + sendPresignedURL(members[0].profileImage, memberImageFile1).catch( + (err) => { + console.error('회장 이미지 업로드 실패: ', err); + throw err; + }, + ), + sendPresignedURL(members[1].profileImage, memberImageFile2).catch( + (err) => { + console.error('부회장 이미지 업로드 실패: ', err); + throw err; + }, + ), + sendPresignedURL(members[2].profileImage, memberImageFile3).catch( + (err) => { + console.error('총무 이미지 업로드 실패: ', err); + throw err; + }, + ), + sendPresignedURL(members[3].profileImage, memberImageFile4).catch( + (err) => { + console.error('운영 팀장 이미지 업로드 실패: ', err); + throw err; + }, + ), + sendPresignedURL(members[4].profileImage, memberImageFile5).catch( + (err) => { + console.error('미디어 팀장 이미지 업로드 실패: ', err); + throw err; + }, + ), + sendPresignedURL(members[5].profileImage, memberImageFile6).catch( + (err) => { + console.error('메이커스 팀장 이미지 업로드 실패: ', err); + throw err; + }, + ), + sendPresignedURL(members[6].profileImage, memberImageFile7).catch( + (err) => { + console.error('기획 파트장 이미지 업로드 실패: ', err); + throw err; + }, + ), + sendPresignedURL(members[7].profileImage, memberImageFile8).catch( + (err) => { + console.error('디자인 파트장 이미지 업로드 실패: ', err); + throw err; + }, + ), + sendPresignedURL(members[8].profileImage, memberImageFile9).catch( + (err) => { + console.error('안드로이드 파트장 이미지 업로드 실패: ', err); + throw err; + }, + ), + sendPresignedURL(members[9].profileImage, memberImageFile10).catch( + (err) => { + console.error('iOS 파트장 이미지 업로드 실패: ', err); + throw err; + }, + ), + sendPresignedURL(members[10].profileImage, memberImageFile11).catch( + (err) => { + console.error('웹 파트장 이미지 업로드 실패: ', err); + throw err; + }, + ), + sendPresignedURL(members[11].profileImage, memberImageFile12).catch( + (err) => { + console.error('서버 파트장 이미지 업로드 실패: ', err); + throw err; + }, + ), + sendPresignedURL(recruitHeaderImageURL, recruitHeaderImageFile).catch( + (err) => { + console.error('지원하기 헤더 이미지 업로드 실패: ', err); + throw err; + }, + ), + ]); + + const finalResponse = await sendDataConfirm({ generation }); + + return finalResponse; + } catch (err) { + console.error('최종 배포 실패: ', err); + } + }, + }); + + return { sendMutate, sendIsLoading }; +}; + +export default useMutateSendData; diff --git a/src/components/org/OrgAdmin/index.tsx b/src/components/org/OrgAdmin/index.tsx index 09a0aa9..faf3b55 100644 --- a/src/components/org/OrgAdmin/index.tsx +++ b/src/components/org/OrgAdmin/index.tsx @@ -8,12 +8,14 @@ import { PART_KO, PART_LIST, SCHEDULE_FIELDS, + 임원진_LIST, } from '@/utils/org'; import AboutSection from './AboutSection'; import SubmitIcon from './assets/SubmitIcon'; import CommonSection from './CommonSection'; import HomeSection from './home/HomeSection'; +import useMutateSendData from './hooks'; import RecruitSection from './RecruitSection'; import { StSubmitButton, StSubmitText } from './style'; import { Group } from './types'; @@ -24,9 +26,30 @@ function OrgAdmin() { const [curriculumPart, setCurriculumPart] = useState('기획'); const [fnaPart, setFnaPart] = useState('기획'); - const methods = useForm({ mode: 'onBlur' }); + const methods = useForm>({ mode: 'onBlur' }); const { handleSubmit, getValues } = methods; + const { sendMutate, sendIsLoading } = useMutateSendData({ + headerImageFile: getValues('headerImageFileName')?.file, + coreValueImageFile1: getValues('coreValue1.imageFileName')?.file, + coreValueImageFile2: getValues('coreValue2.imageFileName')?.file, + coreValueImageFile3: getValues('coreValue3.imageFileName')?.file, + memberImageFile1: getValues('member.회장.profileImageFileName')?.file, + memberImageFile2: getValues('member.부회장.profileImageFileName')?.file, + memberImageFile3: getValues('member.총무.profileImageFileName')?.file, + memberImageFile4: getValues('member.운영팀장.profileImageFileName')?.file, + memberImageFile5: getValues('member.미디어팀장.profileImageFileName')?.file, + memberImageFile6: getValues('member.메이커스팀장.profileImageFileName') + ?.file, + memberImageFile7: getValues('member.기획.profileImageFileName')?.file, + memberImageFile8: getValues('member.디자인.profileImageFileName')?.file, + memberImageFile9: getValues('member.안드로이드.profileImageFileName')?.file, + memberImageFile10: getValues('member.iOS.profileImageFileName')?.file, + memberImageFile11: getValues('member.웹.profileImageFileName')?.file, + memberImageFile12: getValues('member.서버.profileImageFileName')?.file, + recruitHeaderImageFile: getValues('recruitHeaderImage')?.file, + }); + const onChangePart = (part: ORG_ADMIN): void => { setSelectedPart(part); }; @@ -98,7 +121,327 @@ function OrgAdmin() { const isFnaValid = validateFna(); if (isScheduleValid && isCurriculumValid && isFnaValid) { - console.log(data); + const { + brandingColor_high, + brandingColor_low, + brandingColor_main, + brandingColor_point, + generation, + name, + recruitHeaderImage: { fileName: recruitHeaderImageFileName }, + recruitPartCurriculum_iOS_content, + recruitPartCurriculum_iOS_preference, + recruitPartCurriculum_기획_content, + recruitPartCurriculum_기획_preference, + recruitPartCurriculum_디자인_content, + recruitPartCurriculum_디자인_preference, + recruitPartCurriculum_서버_content, + recruitPartCurriculum_서버_preference, + recruitPartCurriculum_안드로이드_content, + recruitPartCurriculum_안드로이드_preference, + recruitPartCurriculum_웹_content, + recruitPartCurriculum_웹_preference, + recruitQuestion_iOS_questions_0_answer, + recruitQuestion_iOS_questions_0_question, + recruitQuestion_iOS_questions_1_answer, + recruitQuestion_iOS_questions_1_question, + recruitQuestion_iOS_questions_2_answer, + recruitQuestion_iOS_questions_2_question, + recruitQuestion_기획_questions_0_answer, + recruitQuestion_기획_questions_0_question, + recruitQuestion_기획_questions_1_answer, + recruitQuestion_기획_questions_1_question, + recruitQuestion_기획_questions_2_answer, + recruitQuestion_기획_questions_2_question, + recruitQuestion_디자인_questions_0_answer, + recruitQuestion_디자인_questions_0_question, + recruitQuestion_디자인_questions_1_answer, + recruitQuestion_디자인_questions_1_question, + recruitQuestion_디자인_questions_2_answer, + recruitQuestion_디자인_questions_2_question, + recruitQuestion_서버_questions_0_answer, + recruitQuestion_서버_questions_0_question, + recruitQuestion_서버_questions_1_answer, + recruitQuestion_서버_questions_1_question, + recruitQuestion_서버_questions_2_answer, + recruitQuestion_서버_questions_2_question, + recruitQuestion_안드로이드_questions_0_answer, + recruitQuestion_안드로이드_questions_0_question, + recruitQuestion_안드로이드_questions_1_answer, + recruitQuestion_안드로이드_questions_1_question, + recruitQuestion_안드로이드_questions_2_answer, + recruitQuestion_안드로이드_questions_2_question, + recruitQuestion_웹_questions_0_answer, + recruitQuestion_웹_questions_0_question, + recruitQuestion_웹_questions_1_answer, + recruitQuestion_웹_questions_1_question, + recruitQuestion_웹_questions_2_answer, + recruitQuestion_웹_questions_2_question, + recruitSchedule_OB_schedule_applicationEndTime, + recruitSchedule_OB_schedule_applicationResultTime, + recruitSchedule_OB_schedule_applicationStartTime, + recruitSchedule_OB_schedule_finalResultTime, + recruitSchedule_OB_schedule_interviewEndTime, + recruitSchedule_OB_schedule_interviewStartTime, + recruitSchedule_YB_schedule_applicationEndTime, + recruitSchedule_YB_schedule_applicationResultTime, + recruitSchedule_YB_schedule_applicationStartTime, + recruitSchedule_YB_schedule_finalResultTime, + recruitSchedule_YB_schedule_interviewEndTime, + recruitSchedule_YB_schedule_interviewStartTime, + headerImageFileName, + coreValue1, + coreValue2, + coreValue3, + partCurriculum, + member, + } = data; + + const 임원진 = [...임원진_LIST, ...PART_LIST]; + const sendingData = { + generation, + name, + recruitSchedule: [ + { + type: 'OB', + schedule: { + applicationStartTime: + recruitSchedule_OB_schedule_applicationStartTime, + applicationEndTime: + recruitSchedule_OB_schedule_applicationEndTime, + applicationResultTime: + recruitSchedule_OB_schedule_applicationResultTime, + interviewStartTime: + recruitSchedule_OB_schedule_interviewStartTime, + interviewEndTime: recruitSchedule_OB_schedule_interviewEndTime, + finalResultTime: recruitSchedule_OB_schedule_finalResultTime, + }, + }, + { + type: 'YB', + schedule: { + applicationStartTime: + recruitSchedule_YB_schedule_applicationStartTime, + applicationEndTime: + recruitSchedule_YB_schedule_applicationEndTime, + applicationResultTime: + recruitSchedule_YB_schedule_applicationResultTime, + interviewStartTime: + recruitSchedule_YB_schedule_interviewStartTime, + interviewEndTime: recruitSchedule_YB_schedule_interviewEndTime, + finalResultTime: recruitSchedule_YB_schedule_finalResultTime, + }, + }, + ], + brandingColor: { + main: brandingColor_main, + low: brandingColor_low, + high: brandingColor_high, + point: brandingColor_point, + }, + mainButton: { + text: '지원하기', + keyColor: '#FF0000', + subColor: '#CC0000', + }, + partIntroduction: [ + { + part: '기획', + description: '기획 앱 개발', + }, + { + part: '디자인', + description: '디자인 앱 개발', + }, + { + part: '안드로이드', + description: '안드로이드 앱 개발', + }, + { + part: 'iOS', + description: 'iOS 앱 개발', + }, + { + part: '웹', + description: '웹 앱 개발', + }, + { + part: '서버', + description: '서버 앱 개발', + }, + ], + headerImageFileName: headerImageFileName?.fileName, + coreValue: [ + { ...coreValue1, imageFileName: coreValue1.imageFileName?.fileName }, + { ...coreValue2, imageFileName: coreValue2.imageFileName?.fileName }, + { ...coreValue3, imageFileName: coreValue3.imageFileName?.fileName }, + ], + partCurriculum: PART_LIST.map((v) => { + return { + part: v, + curriculums: partCurriculum[v], + }; + }), + member: 임원진.map((v) => { + return { + ...member[v], + role: v, + profileImageFileName: member[v]?.profileImageFileName?.fileName, + }; + }), + recruitHeaderImageFileName, + recruitPartCurriculum: [ + { + part: '기획', + introduction: { + content: recruitPartCurriculum_기획_content, + preference: recruitPartCurriculum_기획_preference, + }, + }, + { + part: '디자인', + introduction: { + content: recruitPartCurriculum_디자인_content, + preference: recruitPartCurriculum_디자인_preference, + }, + }, + { + part: '안드로이드', + introduction: { + content: recruitPartCurriculum_안드로이드_content, + preference: recruitPartCurriculum_안드로이드_preference, + }, + }, + { + part: 'iOS', + introduction: { + content: recruitPartCurriculum_iOS_content, + preference: recruitPartCurriculum_iOS_preference, + }, + }, + { + part: '웹', + introduction: { + content: recruitPartCurriculum_웹_content, + preference: recruitPartCurriculum_웹_preference, + }, + }, + { + part: '서버', + introduction: { + content: recruitPartCurriculum_서버_content, + preference: recruitPartCurriculum_서버_preference, + }, + }, + ], + recruitQuestion: [ + { + part: '기획', + questions: [ + { + question: recruitQuestion_기획_questions_0_question, + answer: recruitQuestion_기획_questions_0_answer, + }, + { + question: recruitQuestion_기획_questions_1_question, + answer: recruitQuestion_기획_questions_1_answer, + }, + { + question: recruitQuestion_기획_questions_2_question, + answer: recruitQuestion_기획_questions_2_answer, + }, + ], + }, + { + part: '디자인', + questions: [ + { + question: recruitQuestion_디자인_questions_0_question, + answer: recruitQuestion_디자인_questions_0_answer, + }, + { + question: recruitQuestion_디자인_questions_1_question, + answer: recruitQuestion_디자인_questions_1_answer, + }, + { + question: recruitQuestion_디자인_questions_2_question, + answer: recruitQuestion_디자인_questions_2_answer, + }, + ], + }, + { + part: '안드로이드', + questions: [ + { + question: recruitQuestion_안드로이드_questions_0_question, + answer: recruitQuestion_안드로이드_questions_0_answer, + }, + { + question: recruitQuestion_안드로이드_questions_1_question, + answer: recruitQuestion_안드로이드_questions_1_answer, + }, + { + question: recruitQuestion_안드로이드_questions_2_question, + answer: recruitQuestion_안드로이드_questions_2_answer, + }, + ], + }, + { + part: 'iOS', + questions: [ + { + question: recruitQuestion_iOS_questions_0_question, + answer: recruitQuestion_iOS_questions_0_answer, + }, + { + question: recruitQuestion_iOS_questions_1_question, + answer: recruitQuestion_iOS_questions_1_answer, + }, + { + question: recruitQuestion_iOS_questions_2_question, + answer: recruitQuestion_iOS_questions_2_answer, + }, + ], + }, + { + part: '웹', + questions: [ + { + question: recruitQuestion_웹_questions_0_question, + answer: recruitQuestion_웹_questions_0_answer, + }, + { + question: recruitQuestion_웹_questions_1_question, + answer: recruitQuestion_웹_questions_1_answer, + }, + { + question: recruitQuestion_웹_questions_2_question, + answer: recruitQuestion_웹_questions_2_answer, + }, + ], + }, + { + part: '서버', + questions: [ + { + question: recruitQuestion_서버_questions_0_question, + answer: recruitQuestion_서버_questions_0_answer, + }, + { + question: recruitQuestion_서버_questions_1_question, + answer: recruitQuestion_서버_questions_1_answer, + }, + { + question: recruitQuestion_서버_questions_2_question, + answer: recruitQuestion_서버_questions_2_answer, + }, + ], + }, + ], + }; + + console.log('>>sendingData', sendingData); + sendMutate(sendingData as any); } }; @@ -137,7 +480,7 @@ function OrgAdmin() { )} - 배포 + {sendIsLoading ? '배포 중...' : '배포'} diff --git a/src/components/org/api.ts b/src/components/org/api.ts deleted file mode 100644 index ac14613..0000000 --- a/src/components/org/api.ts +++ /dev/null @@ -1,11 +0,0 @@ -import createFetch from 'openapi-fetch'; - -import { paths } from '@/__generated__/api'; -import { getToken } from '@/utils/auth'; - -export const fetch = createFetch({ - baseUrl: process.env.NEXT_PUBLIC_ORG_API, - headers: { - Authorization: getToken('ACCESS'), - }, -});