From 4052de5d362d593fa32fa115874b5d6a5497800d Mon Sep 17 00:00:00 2001 From: KingNono1030 Date: Sat, 30 Nov 2024 10:34:55 +0900 Subject: [PATCH 01/14] =?UTF-8?q?[#60]=20=E2=9C=A8=20update=20apiSchema=20?= =?UTF-8?q?alongto=20backend=20update?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/types/api/apiSchema.types.d.ts | 91 ++++++++++++++++++++++-------- 1 file changed, 68 insertions(+), 23 deletions(-) diff --git a/src/types/api/apiSchema.types.d.ts b/src/types/api/apiSchema.types.d.ts index 4ebf277..2fe5b09 100644 --- a/src/types/api/apiSchema.types.d.ts +++ b/src/types/api/apiSchema.types.d.ts @@ -57,6 +57,23 @@ export interface paths { patch?: never trace?: never } + '/v1/my-page/check-nickname': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + /** 닉네임 중복 체크 */ + post: operations['checkNicknameDuplicate'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } '/v1/likes': { parameters: { query?: never @@ -797,12 +814,6 @@ export interface components { * "태그4" * ] */ tags: string[] - /** - * @description 포트폴리오 이미지 url - * @default default_image_url - * @example 이미지url - */ - portImageUrl: string /** @description 포트폴리오 링크 리스트 */ links?: components['schemas']['LinkRequest'][] /** @description 포트폴리오 학력 리스트 */ @@ -1062,6 +1073,19 @@ export interface components { /** @description 경력 리스트 */ careers?: components['schemas']['CareerResponse'][] } + checkNicknameRequest: { + /** + * @description 회원 닉네임 + * @example new_nickname + */ + nickname: string + } + ApiResponseBoolean: { + isSuccess?: boolean + code?: string + message?: string + result?: boolean + } LikeRequest: { /** * Format: int64 @@ -1293,12 +1317,6 @@ export interface components { */ email: string } - ApiResponseBoolean: { - isSuccess?: boolean - code?: string - message?: string - result?: boolean - } ApiResponseString: { isSuccess?: boolean code?: string @@ -1317,11 +1335,6 @@ export interface components { * @example 뽀꼬 */ nickname?: string - /** - * @description 프로필 사진 url - * @example aaa.com - */ - imageUrl?: string /** * @description 소개문구 * @example 간단한 소개글을 작성해보세요! @@ -2131,6 +2144,34 @@ export interface operations { } } createPortfolio: { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + requestBody?: { + content: { + 'multipart/form-data': { + request: components['schemas']['PortfolioCreateRequest'] + /** Format: binary */ + portImage?: string + } + } + } + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['ApiResponsePortCreateResponse'] + } + } + } + } + checkNicknameDuplicate: { parameters: { query?: never header?: never @@ -2139,7 +2180,7 @@ export interface operations { } requestBody: { content: { - 'application/json': components['schemas']['PortfolioCreateRequest'] + 'application/json': components['schemas']['checkNicknameRequest'] } } responses: { @@ -2149,7 +2190,7 @@ export interface operations { [name: string]: unknown } content: { - '*/*': components['schemas']['ApiResponsePortCreateResponse'] + '*/*': components['schemas']['ApiResponseBoolean'] } } } @@ -2457,9 +2498,13 @@ export interface operations { path?: never cookie?: never } - requestBody: { + requestBody?: { content: { - 'application/json': components['schemas']['ProfileUpdateRequest'] + 'multipart/form-data': { + request: components['schemas']['ProfileUpdateRequest'] + /** Format: binary */ + profileImage?: string + } } } responses: { @@ -2469,7 +2514,7 @@ export interface operations { [name: string]: unknown } content: { - '*/*': components['schemas']['ApiResponseProfileUpdateResponse'] + 'application/json': components['schemas']['ApiResponseProfileUpdateResponse'] } } } @@ -2483,7 +2528,7 @@ export interface operations { } requestBody: { content: { - 'application/json': components['schemas']['PasswordUpdateRequest'] + 'multipart/form-data': components['schemas']['PasswordUpdateRequest'] } } responses: { From bb2adaddcfe3bcb6127798240bc86c9389d352e1 Mon Sep 17 00:00:00 2001 From: KingNono1030 Date: Sat, 30 Nov 2024 10:36:28 +0900 Subject: [PATCH 02/14] =?UTF-8?q?[#60]=20=F0=9F=9A=9A=20move=20my=20page?= =?UTF-8?q?=20related=20types=20from=20auth=20to=20profile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/types/api/auth.types.d.ts | 17 ----------------- src/types/api/profile.types.d.ts | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/types/api/auth.types.d.ts b/src/types/api/auth.types.d.ts index ec8235c..bcc7cc2 100644 --- a/src/types/api/auth.types.d.ts +++ b/src/types/api/auth.types.d.ts @@ -52,20 +52,3 @@ export interface CheckEmailRequest { email: Email // 검사하고자 하는 이메일 } export type CheckEmailResponse = boolean - -/* -path: '/v1/my-page/password' -PATCH: 마이 페이지 비밀번호 수정 -*/ -export interface PasswordUpdateRequest { - password: Password // 새 비밀번호 -} - -/* -PasswordUpdateResponse -{ - "isSuccess": true, - "code": "COMMON200", - "message": "비밀번호 수정이 완료되었습니다." -} -*/ diff --git a/src/types/api/profile.types.d.ts b/src/types/api/profile.types.d.ts index 78ffddc..f845446 100644 --- a/src/types/api/profile.types.d.ts +++ b/src/types/api/profile.types.d.ts @@ -28,3 +28,20 @@ export type ProfileUpdateRequest = ProfileBase export interface ProfileUpdateResponse extends ProfileBase { completionRate?: number // 포트폴리오 완성률 (%) } + +/* +path: '/v1/my-page/password' +PATCH: 마이 페이지 비밀번호 수정 +*/ +export interface PasswordUpdateRequest { + password: Password // 새 비밀번호 +} + +/* +PasswordUpdateResponse +{ + "isSuccess": true, + "code": "COMMON200", + "message": "비밀번호 수정이 완료되었습니다." +} +*/ From 4e00eeb959299565b23a17a461ed65cb24dda451 Mon Sep 17 00:00:00 2001 From: KingNono1030 Date: Sat, 30 Nov 2024 10:37:04 +0900 Subject: [PATCH 03/14] =?UTF-8?q?[#60]=20=F0=9F=9A=9A=20rename=20profile?= =?UTF-8?q?=20types=20to=20myPage=20types?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/types/api/{profile.types.d.ts => MyPage.types.d.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/types/api/{profile.types.d.ts => MyPage.types.d.ts} (100%) diff --git a/src/types/api/profile.types.d.ts b/src/types/api/MyPage.types.d.ts similarity index 100% rename from src/types/api/profile.types.d.ts rename to src/types/api/MyPage.types.d.ts From 00c9e1204cfce3ca1d42b9eb970002558323f8fb Mon Sep 17 00:00:00 2001 From: KingNono1030 Date: Sat, 30 Nov 2024 10:39:36 +0900 Subject: [PATCH 04/14] =?UTF-8?q?[#60]=20=E2=9C=A8=20add=20check=20nicknam?= =?UTF-8?q?e=20interface=20in=20mypage=20types?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/types/api/MyPage.types.d.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/types/api/MyPage.types.d.ts b/src/types/api/MyPage.types.d.ts index f845446..34f174e 100644 --- a/src/types/api/MyPage.types.d.ts +++ b/src/types/api/MyPage.types.d.ts @@ -29,6 +29,25 @@ export interface ProfileUpdateResponse extends ProfileBase { completionRate?: number // 포트폴리오 완성률 (%) } +/* +path: '/v1/my-page/check-nickname' +POST: 닉네임 중복 체크 +*/ +export interface CheckNicknameRequest { + nickname: Nickname // 닉네임 중복 검사 대상 +} + +export type CheckNicknameResponse = boolean + +/* +PasswordUpdateResponse +{ + "isSuccess": true, + "code": "COMMON200", + "message": "비밀번호 수정이 완료되었습니다." +} +*/ + /* path: '/v1/my-page/password' PATCH: 마이 페이지 비밀번호 수정 From 3402b32743e1c39768b71cab4df01d3e0402ff07 Mon Sep 17 00:00:00 2001 From: KingNono1030 Date: Sat, 30 Nov 2024 10:48:38 +0900 Subject: [PATCH 05/14] =?UTF-8?q?[#60]=20=E2=9C=A8=20add=20multipart=20for?= =?UTF-8?q?mdata=20generic=20type?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/types/api/global.types.d.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/types/api/global.types.d.ts b/src/types/api/global.types.d.ts index a723f39..b22cd1d 100644 --- a/src/types/api/global.types.d.ts +++ b/src/types/api/global.types.d.ts @@ -31,3 +31,9 @@ interface User { // MemberInfo: 일부 사용자 정보를 제외한 타입 type MemberInfo = Omit + +interface MultipartFormData { + request: T + /** Format: binary */ + file?: File +} From e82228951c680292d707610a446e350678fbb4e3 Mon Sep 17 00:00:00 2001 From: KingNono1030 Date: Sat, 30 Nov 2024 10:54:07 +0900 Subject: [PATCH 06/14] =?UTF-8?q?[#60]=20=E2=9C=A8=20apply=20multipart=20f?= =?UTF-8?q?ormdata=20interface=20on=20file=20upload=20requiring=20types?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/types/api/MyPage.types.d.ts | 2 +- src/types/api/portfolio.types.d.ts | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/types/api/MyPage.types.d.ts b/src/types/api/MyPage.types.d.ts index 34f174e..f3c3e0b 100644 --- a/src/types/api/MyPage.types.d.ts +++ b/src/types/api/MyPage.types.d.ts @@ -23,7 +23,7 @@ export interface GetProfileResponse extends ProfileBase, User { /* PATCH: 마이페이지 프로필 저장 */ -export type ProfileUpdateRequest = ProfileBase +export type ProfileUpdateRequest = MultipartFormData export interface ProfileUpdateResponse extends ProfileBase { completionRate?: number // 포트폴리오 완성률 (%) diff --git a/src/types/api/portfolio.types.d.ts b/src/types/api/portfolio.types.d.ts index 81f71b5..d0e7b6f 100644 --- a/src/types/api/portfolio.types.d.ts +++ b/src/types/api/portfolio.types.d.ts @@ -96,8 +96,8 @@ export interface LanguageAwardRequest extends AwardRequestBase, LanguageAward { // 포트폴리오 리스트 조회 export type PortfolioListItem = PortfolioBase & PostBaseBody -// 포트폴리오 생성 요청 타입 -export interface PortfolioCreateRequest extends PortfolioBase { +// 포트폴리오 리스트 조회 +export interface PortfolioDetail extends PortfolioBase { portContent: string // 상세 내용 techStacks: TechStack[] // 사용 기술 스택 links?: PortfolioLink[] // 외부 링크 @@ -111,5 +111,8 @@ export interface PortfolioCreateRequest extends PortfolioBase { careers?: PortfolioCareer[] // 경력 리스트 } +// 포트폴리오 생성 요청 타입 +export type PortfolioCreateRequest = MultipartFormData + // 포트폴리오 생성 응답 타입 export type PortfolioCreateResponse = PortfolioCreateRequest & PostBaseBody From 8a920774001cfec75b0fe053f598e8281143843f Mon Sep 17 00:00:00 2001 From: KingNono1030 Date: Sat, 30 Nov 2024 10:54:40 +0900 Subject: [PATCH 07/14] =?UTF-8?q?[#60]=20=F0=9F=9A=9A=20move=20svg=20types?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/types/api/svg.d.ts | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 src/types/api/svg.d.ts diff --git a/src/types/api/svg.d.ts b/src/types/api/svg.d.ts deleted file mode 100644 index c0b8ec0..0000000 --- a/src/types/api/svg.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module '*.svg' { - const ReactComponent: React.FunctionComponent> - export default ReactComponent -} From eb66e0ca12fd8ade070d3da25da209d42f97f38d Mon Sep 17 00:00:00 2001 From: KingNono1030 Date: Sat, 30 Nov 2024 12:09:50 +0900 Subject: [PATCH 08/14] =?UTF-8?q?[#60]=20=F0=9F=9A=9A=20turn=20type=20file?= =?UTF-8?q?s=20to=20uppercase?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/(pages)/sign-in/page.tsx | 2 +- src/app/(pages)/sign-up/page.tsx | 2 +- src/app/api/auth/sign-in/route.ts | 2 +- src/services/auth/auth.ts | 2 +- .../api/{apiResponse.types.d.ts => ApiResponse.types.d.ts} | 0 src/types/api/{apiSchema.types.d.ts => ApiSchema.types.d.ts} | 0 src/types/api/{auth.types.d.ts => Auth.types.d.ts} | 0 src/types/api/{community.types.d.ts => Community.types.d.ts} | 0 src/types/api/{global.types.d.ts => Global.types.d.ts} | 0 src/types/api/{portfolio.types.d.ts => Portfolio.types.d.ts} | 0 src/types/api/{post.types.d.ts => Post.types.d.ts} | 0 src/types/api/{team.types.d.ts => Team.types.d.ts} | 0 src/types/svg.d.ts | 4 ++++ 13 files changed, 8 insertions(+), 4 deletions(-) rename src/types/api/{apiResponse.types.d.ts => ApiResponse.types.d.ts} (100%) rename src/types/api/{apiSchema.types.d.ts => ApiSchema.types.d.ts} (100%) rename src/types/api/{auth.types.d.ts => Auth.types.d.ts} (100%) rename src/types/api/{community.types.d.ts => Community.types.d.ts} (100%) rename src/types/api/{global.types.d.ts => Global.types.d.ts} (100%) rename src/types/api/{portfolio.types.d.ts => Portfolio.types.d.ts} (100%) rename src/types/api/{post.types.d.ts => Post.types.d.ts} (100%) rename src/types/api/{team.types.d.ts => Team.types.d.ts} (100%) create mode 100644 src/types/svg.d.ts diff --git a/src/app/(pages)/sign-in/page.tsx b/src/app/(pages)/sign-in/page.tsx index f242f55..8330233 100644 --- a/src/app/(pages)/sign-in/page.tsx +++ b/src/app/(pages)/sign-in/page.tsx @@ -2,7 +2,7 @@ import { SubmitHandler, useForm } from 'react-hook-form' -import { SignInRequest } from '@/types/api/auth.types' +import { SignInRequest } from '@/types/api/Auth.types' import { useSignInMutation } from 'queries/useSignIn' export default function LoginPage(): JSX.Element { diff --git a/src/app/(pages)/sign-up/page.tsx b/src/app/(pages)/sign-up/page.tsx index 779a4ea..284746d 100644 --- a/src/app/(pages)/sign-up/page.tsx +++ b/src/app/(pages)/sign-up/page.tsx @@ -3,7 +3,7 @@ // import { useRouter } from 'next/navigation' import { SubmitHandler, useForm } from 'react-hook-form' -import { SignUpRequest } from '@/types/api/auth.types' +import { SignUpRequest } from '@/types/api/Auth.types' import { useSignUpMutation } from 'queries/useSignUp' export default function SignUpPage(): JSX.Element { diff --git a/src/app/api/auth/sign-in/route.ts b/src/app/api/auth/sign-in/route.ts index d31d11b..a2df5dd 100644 --- a/src/app/api/auth/sign-in/route.ts +++ b/src/app/api/auth/sign-in/route.ts @@ -1,6 +1,6 @@ import { NextResponse } from 'next/server' -import { SignInRequest, SignInResponse } from '@/types/api/auth.types' +import { SignInRequest, SignInResponse } from '@/types/api/Auth.types' import { HTTPError } from 'ky' import { backendApi } from '@/services/api' diff --git a/src/services/auth/auth.ts b/src/services/auth/auth.ts index 5b90719..3f347f6 100644 --- a/src/services/auth/auth.ts +++ b/src/services/auth/auth.ts @@ -1,4 +1,4 @@ -import { SignInRequest, SignUpRequest } from '@/types/api/auth.types' +import { SignInRequest, SignUpRequest } from '@/types/api/Auth.types' import { backendApi, proxyApi } from '@/services/api' diff --git a/src/types/api/apiResponse.types.d.ts b/src/types/api/ApiResponse.types.d.ts similarity index 100% rename from src/types/api/apiResponse.types.d.ts rename to src/types/api/ApiResponse.types.d.ts diff --git a/src/types/api/apiSchema.types.d.ts b/src/types/api/ApiSchema.types.d.ts similarity index 100% rename from src/types/api/apiSchema.types.d.ts rename to src/types/api/ApiSchema.types.d.ts diff --git a/src/types/api/auth.types.d.ts b/src/types/api/Auth.types.d.ts similarity index 100% rename from src/types/api/auth.types.d.ts rename to src/types/api/Auth.types.d.ts diff --git a/src/types/api/community.types.d.ts b/src/types/api/Community.types.d.ts similarity index 100% rename from src/types/api/community.types.d.ts rename to src/types/api/Community.types.d.ts diff --git a/src/types/api/global.types.d.ts b/src/types/api/Global.types.d.ts similarity index 100% rename from src/types/api/global.types.d.ts rename to src/types/api/Global.types.d.ts diff --git a/src/types/api/portfolio.types.d.ts b/src/types/api/Portfolio.types.d.ts similarity index 100% rename from src/types/api/portfolio.types.d.ts rename to src/types/api/Portfolio.types.d.ts diff --git a/src/types/api/post.types.d.ts b/src/types/api/Post.types.d.ts similarity index 100% rename from src/types/api/post.types.d.ts rename to src/types/api/Post.types.d.ts diff --git a/src/types/api/team.types.d.ts b/src/types/api/Team.types.d.ts similarity index 100% rename from src/types/api/team.types.d.ts rename to src/types/api/Team.types.d.ts diff --git a/src/types/svg.d.ts b/src/types/svg.d.ts new file mode 100644 index 0000000..c0b8ec0 --- /dev/null +++ b/src/types/svg.d.ts @@ -0,0 +1,4 @@ +declare module '*.svg' { + const ReactComponent: React.FunctionComponent> + export default ReactComponent +} From 2f34f5305327e1bbc4a7960e124ebc64ad6a49b5 Mon Sep 17 00:00:00 2001 From: KingNono1030 Date: Tue, 3 Dec 2024 17:05:43 +0900 Subject: [PATCH 09/14] =?UTF-8?q?[#60]=20=E2=99=BB=EF=B8=8F=20rewrite=20ty?= =?UTF-8?q?pe=20names=20in=20more=20semantic=20way=20of=20naming?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/types/api/Team.types.d.ts | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/types/api/Team.types.d.ts b/src/types/api/Team.types.d.ts index 631a0a4..07d2bf4 100644 --- a/src/types/api/Team.types.d.ts +++ b/src/types/api/Team.types.d.ts @@ -5,7 +5,7 @@ export type TeamRecruitmentLabelType = '모집 중' | '모집 완료' // 모집 export type TeamPosition = string // 역할 (예: 프론트엔드, 백엔드 등) // 팀 모집글 공통 속성 -type TeamBase = { +type TeamRecruitmentBase = { teamTitle: string // 팀 모집글 제목 teamContent: string // 팀 모집글 내용 teamType: TeamType // 팀 모집글 유형 @@ -16,7 +16,9 @@ type TeamBase = { } // 팀 모집글 리스트 아이템 -export interface TeamListItem extends PostBaseBody, TeamBase { +export interface TeamRecruitmentListItem + extends PostBaseBody, + TeamRecruitmentBase { teamIsActive: boolean // 모집 활성 상태 } @@ -24,13 +26,15 @@ export interface TeamListItem extends PostBaseBody, TeamBase { path: '/v1/team' GET: 팀 모집글 모집급 전체 조회 */ -export type GetTeamListResponse = TeamListItem[] +export type GetTeamRecruitmentListResponse = TeamRecruitmentListItem[] /* POST: 팀 모집글 등록 */ -export type TeamCreateRequest = TeamBase -export interface TeamCreateResponse extends TimeStamps, TeamBase { +export type CreateTeamRecruitmentRequest = TeamRecruitmentBase +export interface CreateTeamRecruitmentResponse + extends TimeStamps, + TeamRecruitmentBase { id: Id // 팀 모집글 ID } @@ -38,7 +42,7 @@ export interface TeamCreateResponse extends TimeStamps, TeamBase { path: '/v1/team/{teamId}' GET: 팀 모집글 상세 조회 */ -export type GetTeamDetailResponse = TeamListItem +export type GetTeamRecruitmentResponse = TeamRecruitmentListItem /* DELETE: 팀 모집글 삭제 @@ -55,10 +59,10 @@ path: '/v1/team/{teamId}/add' POST: 팀 모집글 멤버 추가 */ -export interface TeamAddMemberRequest { +export interface AddTeamMemberRequest { memberId: Id // 추가할 멤버 ID } -export interface TeamAddMemberResponse { +export interface AddTeamMemberResponse { id: Id // 추가 작업 ID teamId: Id // 팀 모집글 ID memberId: Id // 멤버 ID From b921f9808b6a082683a7749438d0b4b070439949 Mon Sep 17 00:00:00 2001 From: KingNono1030 Date: Tue, 3 Dec 2024 17:06:20 +0900 Subject: [PATCH 10/14] =?UTF-8?q?[#60]=20=F0=9F=93=9D=20add=20comment=20on?= =?UTF-8?q?=20like=20request=20interface?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/types/api/Post.types.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/types/api/Post.types.d.ts b/src/types/api/Post.types.d.ts index d98c5d7..7ecff53 100644 --- a/src/types/api/Post.types.d.ts +++ b/src/types/api/Post.types.d.ts @@ -12,6 +12,6 @@ interface PostBaseBody extends TimeStamps { // 좋아요 요청 타입 interface LikeRequest { - likeId: Id // 좋아요 대상 ID + likeId: Id // 좋아요 대상 게시글 ID likeType: PostCategory // 대상 유형 (PostCategory) } From 0d3e8908479645d64dfcb3e5c698de2b9244755e Mon Sep 17 00:00:00 2001 From: KingNono1030 Date: Tue, 3 Dec 2024 17:28:22 +0900 Subject: [PATCH 11/14] =?UTF-8?q?[#60]=20=F0=9F=9A=9A=20rename=20types=20n?= =?UTF-8?q?ame=20in=20portfolio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/types/api/Portfolio.types.d.ts | 51 ++++++++++++++++-------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/src/types/api/Portfolio.types.d.ts b/src/types/api/Portfolio.types.d.ts index d0e7b6f..1108088 100644 --- a/src/types/api/Portfolio.types.d.ts +++ b/src/types/api/Portfolio.types.d.ts @@ -3,7 +3,7 @@ export type CommunityCategory = 'SKILL' | 'CAREER' | 'OTHER' export type CommunityLabelCategory = '기술' | '커리어' | '기타' // 기본 포트폴리오 타입 -export interface PortfolioBase { +interface PortfolioBase { portTitle: string // 포트폴리오 제목 portPosition: string // 역할 또는 직무 tags: string[] // 태그 리스트 @@ -11,24 +11,24 @@ export interface PortfolioBase { } // 수상 타입 (Award) -export type AwardType = 'COMPETITION' | 'CERTIFICATE' | 'LANGUAGE' | 'ACTIVITY' +type AwardType = 'COMPETITION' | 'CERTIFICATE' | 'LANGUAGE' | 'ACTIVITY' // 활동 상세 타입 -export interface ActivityAward { +interface ActivityAward { activityName?: string // 활동명 startDate?: string // 활동 시작일 (YYYY-MM-DD) endDate?: string // 활동 종료일 (YYYY-MM-DD) } // 자격증 상세 타입 -export interface CertificateAward { +interface CertificateAward { certificateName?: string // 자격증명 issuer?: string // 발행처 passingDate?: string // 합격 년월 (YYYY-MM-DD) } // 언어 능력 상세 타입 -export interface LanguageAward { +interface LanguageAward { language?: string // 언어 이름 testName?: string // 시험명 score?: string // 점수 @@ -36,20 +36,20 @@ export interface LanguageAward { } // 공모전 상세 타입 -export interface CompetitionAward { +interface CompetitionAward { competitionName?: string // 공모전명 hostingInstitution?: string // 주최기관 competitionDate?: string // 공모일 (YYYY-MM-DD) } // 링크 타입 -export interface PortfolioLink { +interface PortfolioLink { type?: string // 링크 유형 (예: github, blog) url?: string // URL } // 학력 상세 타입 -export interface PortfolioEducation { +interface PortfolioEducation { level?: string // 학력 구분 (예: 대학, 고등학교) institutionName?: string // 학교명 major?: string // 전공 @@ -62,7 +62,7 @@ export interface PortfolioEducation { } // 경력 상세 타입 -export interface PortfolioCareer { +interface PortfolioCareer { companyName?: string // 회사명 position?: string // 직무 startDate?: string // 입사일 (YYYY-MM-DD) @@ -73,30 +73,26 @@ export interface PortfolioCareer { } // 상장 요청 타입 -export interface AwardRequestBase { +interface AwardRequestBase { awardType?: AwardType } -export interface ActivityAwardRequest extends AwardRequestBase, ActivityAward { +interface ActivityAwardRequest extends AwardRequestBase, ActivityAward { awardType: 'ACTIVITY' } -export interface CertificateAwardRequest - extends AwardRequestBase, - CertificateAward { +interface CertificateAwardRequest extends AwardRequestBase, CertificateAward { awardType: 'CERTIFICATE' } -export interface CompetitionAwardRequest - extends AwardRequestBase, - CompetitionAward { +interface CompetitionAwardRequest extends AwardRequestBase, CompetitionAward { awardType: 'COMPETITION' } -export interface LanguageAwardRequest extends AwardRequestBase, LanguageAward { +interface LanguageAwardRequest extends AwardRequestBase, LanguageAward { awardType: 'LANGUAGE' } -// 포트폴리오 리스트 조회 +// 포트폴리오 리스트 아이템 export type PortfolioListItem = PortfolioBase & PostBaseBody -// 포트폴리오 리스트 조회 +// 포트폴리오 상세글 export interface PortfolioDetail extends PortfolioBase { portContent: string // 상세 내용 techStacks: TechStack[] // 사용 기술 스택 @@ -111,8 +107,15 @@ export interface PortfolioDetail extends PortfolioBase { careers?: PortfolioCareer[] // 경력 리스트 } -// 포트폴리오 생성 요청 타입 -export type PortfolioCreateRequest = MultipartFormData +/** +path: '/v1/portfolio' +GET: 포트폴리오 전체 리스트 조회 +*/ +export type GetPortfolioListResponse = PortfolioListItem[] -// 포트폴리오 생성 응답 타입 -export type PortfolioCreateResponse = PortfolioCreateRequest & PostBaseBody +/** +path: '/v1/portfolio' +POST: 포트폴리오 글 등록 +*/ +export type CreatePortfolioRequest = MultipartFormData +export type CreatePortfolioResponse = CreatePortfolioRequest & PostBaseBody From 76cf761e8b315ab2acba232d999f305d3e49d13f Mon Sep 17 00:00:00 2001 From: KingNono1030 Date: Tue, 3 Dec 2024 17:30:02 +0900 Subject: [PATCH 12/14] =?UTF-8?q?[#60]=20=F0=9F=9A=9A=20rename=20types=20n?= =?UTF-8?q?ame=20in=20mypage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/types/api/MyPage.types.d.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/types/api/MyPage.types.d.ts b/src/types/api/MyPage.types.d.ts index f3c3e0b..5a357d9 100644 --- a/src/types/api/MyPage.types.d.ts +++ b/src/types/api/MyPage.types.d.ts @@ -23,9 +23,9 @@ export interface GetProfileResponse extends ProfileBase, User { /* PATCH: 마이페이지 프로필 저장 */ -export type ProfileUpdateRequest = MultipartFormData +export type UpdateProfileRequest = MultipartFormData -export interface ProfileUpdateResponse extends ProfileBase { +export interface UpdateProfileResponse extends ProfileBase { completionRate?: number // 포트폴리오 완성률 (%) } @@ -40,7 +40,7 @@ export interface CheckNicknameRequest { export type CheckNicknameResponse = boolean /* -PasswordUpdateResponse +UpdatePasswordResponse { "isSuccess": true, "code": "COMMON200", @@ -52,12 +52,12 @@ PasswordUpdateResponse path: '/v1/my-page/password' PATCH: 마이 페이지 비밀번호 수정 */ -export interface PasswordUpdateRequest { +export interface UpdatePasswordRequest { password: Password // 새 비밀번호 } /* -PasswordUpdateResponse +UpdatePasswordResponse { "isSuccess": true, "code": "COMMON200", From 72273b1c0c8e02af4250ba1b61bcbc9eca0d055b Mon Sep 17 00:00:00 2001 From: KingNono1030 Date: Tue, 3 Dec 2024 17:32:11 +0900 Subject: [PATCH 13/14] =?UTF-8?q?[#60]=20=F0=9F=9A=9A=20rename=20types=20n?= =?UTF-8?q?ame=20in=20community?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/types/api/Community.types.d.ts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/types/api/Community.types.d.ts b/src/types/api/Community.types.d.ts index 7803cb1..d673113 100644 --- a/src/types/api/Community.types.d.ts +++ b/src/types/api/Community.types.d.ts @@ -22,36 +22,36 @@ interface CommunityDetail extends CommunityListItem { isComment: boolean // 댓글 허용 여부 } -/* +/** path: '/v1/community' GET: 커뮤니티 글 전체 조회 */ export type GetCommunityListResponse = CommunityListItem[] -/* +/** POST: 커뮤니티 글 등록 */ -export interface CommunityCreateRequest extends CommunityBase { +export interface CreateCommunityRequest extends CommunityBase { isComment?: boolean // 댓글 허용 여부 } -export interface CommunityCreateResponse extends CommunityBase, TimeStamps { +export interface CreateCommunityResponse extends CommunityBase, TimeStamps { id: Id // 생성된 커뮤니티 글 ID member: Id // 작성자 Id isComment: boolean // 댓글 허용 여부 } -/* +/** path: '/v1/community/{id}' GET: 커뮤니티 글 상세 조회 */ export type GetCommunityDetailResponse = CommunityDetail -/* +/** PATCH: 커뮤니티 글 수정 */ -export type CommunityUpdateRequest = CommunityBase -export type CommunityUpdateResponse = CommunityCreateResponse +export type UpdateCommunityRequest = CommunityBase +export type UpdateCommunityResponse = CreateCommunityResponse -/* +/** DELETE: 커뮤니티 글 삭제 반환 값: 기본 ApiResponse 구조 사용 { @@ -61,7 +61,7 @@ DELETE: 커뮤니티 글 삭제 } */ -/* +/** path: '/v1/community/top5' GET: 좋아요 순으로 인기 커뮤니티 Top 5 유저 조회 */ From 850f7db5a63412f18762644e9d1b88f905d700b8 Mon Sep 17 00:00:00 2001 From: KingNono1030 Date: Tue, 3 Dec 2024 17:52:53 +0900 Subject: [PATCH 14/14] =?UTF-8?q?[#60]=20=F0=9F=93=9D=20update=20comments?= =?UTF-8?q?=20in=20type=20files?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/types/api/ApiResponse.types.d.ts | 14 +++-- src/types/api/Auth.types.d.ts | 30 +++++----- src/types/api/Community.types.d.ts | 20 +++---- src/types/api/Global.types.d.ts | 84 +++++++++++++++++++++------- src/types/api/MyPage.types.d.ts | 30 +++++----- src/types/api/Portfolio.types.d.ts | 8 +-- src/types/api/Post.types.d.ts | 36 ++++++++---- src/types/api/Team.types.d.ts | 55 +++++++++--------- 8 files changed, 171 insertions(+), 106 deletions(-) diff --git a/src/types/api/ApiResponse.types.d.ts b/src/types/api/ApiResponse.types.d.ts index e795d1e..1fc656b 100644 --- a/src/types/api/ApiResponse.types.d.ts +++ b/src/types/api/ApiResponse.types.d.ts @@ -1,6 +1,12 @@ +/** +- isSuccess: 요청 성공 여부 +- code: 응답 코드 (예: TEAM004) +- message: 응답 메시지 (예: "This is a deleted post.") +- result?: 응답 데이터 (제네릭 타입) +*/ interface ApiResponse { - isSuccess: boolean // 요청 성공 여부 - code: string // 응답 코드 (예: TEAM004) - message: string // 응답 메시지 (예: "This is a deleted post.") - result?: T // 응답 데이터 (제네릭 타입) + isSuccess: boolean + code: string + message: string + result?: T } diff --git a/src/types/api/Auth.types.d.ts b/src/types/api/Auth.types.d.ts index bcc7cc2..e7660ba 100644 --- a/src/types/api/Auth.types.d.ts +++ b/src/types/api/Auth.types.d.ts @@ -1,12 +1,12 @@ -/* -path: '/v1/auth' -GET: 로그인한 유저 조회 +/** +- path: '/v1/auth' +- GET: 로그인한 유저 조회 */ export type GetLoggedInUserResponse = User -/* -path: '/v1/auth/sign-up' -POST: 회원가입 +/** +- path: '/v1/auth/sign-up' +- POST: 회원가입 */ export interface SignUpRequest { email: Email // 이메일 @@ -18,9 +18,9 @@ export interface SignUpResponse extends User { gitHub: GitHub // GitHub 계정 URL } -/* -path: '/v1/auth/sign-in' -POST: 로그인 +/** +- path: '/v1/auth/sign-in' +- POST: 로그인 */ export interface SignInRequest { email: Email // 이메일 @@ -32,9 +32,9 @@ export interface SignInResponse extends User { refreshToken: Token // 리프레시 토큰 } -/* -path: '/v1/auth/new-token' -POST: 액세스 토큰 재발급 +/** +- path: '/v1/auth/new-token' +- POST: 액세스 토큰 재발급 */ export interface RefreshTokenRequest { oldAccessToken: Token // 기존의 access token @@ -44,9 +44,9 @@ export interface AccessTokenResponse { accessToken: Token // 신규 access token } -/* -path: '/v1/auth/check-email' -POST: 이메일 중복 체크 +/** +- path: '/v1/auth/check-email' +- POST: 이메일 중복 체크 */ export interface CheckEmailRequest { email: Email // 검사하고자 하는 이메일 diff --git a/src/types/api/Community.types.d.ts b/src/types/api/Community.types.d.ts index d673113..79b2d8e 100644 --- a/src/types/api/Community.types.d.ts +++ b/src/types/api/Community.types.d.ts @@ -23,12 +23,12 @@ interface CommunityDetail extends CommunityListItem { } /** -path: '/v1/community' -GET: 커뮤니티 글 전체 조회 +- path: '/v1/community' +- GET: 커뮤니티 글 전체 조회 */ export type GetCommunityListResponse = CommunityListItem[] /** -POST: 커뮤니티 글 등록 +- POST: 커뮤니티 글 등록 */ export interface CreateCommunityRequest extends CommunityBase { isComment?: boolean // 댓글 허용 여부 @@ -40,20 +40,20 @@ export interface CreateCommunityResponse extends CommunityBase, TimeStamps { } /** -path: '/v1/community/{id}' -GET: 커뮤니티 글 상세 조회 +- path: '/v1/community/{id}' +- GET: 커뮤니티 글 상세 조회 */ export type GetCommunityDetailResponse = CommunityDetail /** -PATCH: 커뮤니티 글 수정 +- PATCH: 커뮤니티 글 수정 */ export type UpdateCommunityRequest = CommunityBase export type UpdateCommunityResponse = CreateCommunityResponse /** -DELETE: 커뮤니티 글 삭제 -반환 값: 기본 ApiResponse 구조 사용 +- DELETE: 커뮤니티 글 삭제 +- 반환 값: 기본 ApiResponse 구조 사용 { "isSuccess": true, "code": "COMMON200", @@ -62,7 +62,7 @@ DELETE: 커뮤니티 글 삭제 */ /** -path: '/v1/community/top5' -GET: 좋아요 순으로 인기 커뮤니티 Top 5 유저 조회 +- path: '/v1/community/top5' +- GET: 좋아요 순으로 인기 커뮤니티 Top 5 유저 조회 */ export type GetCommunityTop5Response = CommunityTopMember[] diff --git a/src/types/api/Global.types.d.ts b/src/types/api/Global.types.d.ts index b22cd1d..46c0945 100644 --- a/src/types/api/Global.types.d.ts +++ b/src/types/api/Global.types.d.ts @@ -1,37 +1,79 @@ // 기본 타입 정의 -type Id = number // 고유 ID -type URL = string // URL -type Token = string // JWT 또는 인증 토큰 + +/** +고유 ID +*/ +type Id = number +/** +URL +*/ +type URL = string +/** +JWT 또는 인증 토큰 +*/ +type Token = string // 사용자 관련 타입 -type Email = string // 이메일 -type Password = string // 비밀번호 -type Name = string // 사용자 이름 -type Nickname = string // 닉네임 -type GitHub = string // GitHub 프로필 URL -// 공통 속성 타입 -type TechStack = string // 기술 스택 (예: "React", "Node.js") +/** +사용자 이메일 +*/ +type Email = string +/** +사용자 비밀번호 +*/ +type Password = string +/** +사용자 이름 +*/ +type Name = string +/** +사용자 닉네임 +*/ +type Nickname = string +/** +사용자 GitHub 프로필 URL +*/ +type GitHub = string + +/** +기술 스택 (예: "React", "Node.js") +*/ +type TechStack = string -// 타임스탬프 정의 +/** +타임스탬프 정의 (Format: date-time) +- createdAt: 생성 시간 (ISO 8601) +- updatedAt?: 수정 시간 (선택적, ISO 8601) +*/ type TimeStamps = { - // Format: date-time - createdAt: string // 생성 시간 (ISO 8601) - updatedAt?: string // 수정 시간 (선택적, ISO 8601) + createdAt: string + updatedAt?: string } -// 사용자 관련 인터페이스 -interface User { - id: Id // 사용자 고유 ID - email: Email // 이메일 - name: Name // 이름 - nickname: Nickname // 닉네임 - imageUrl: URL // 프로필 이미지 URL +/** +사용자 관련 인터페이스 +- id: 사용자 고유 ID +- email: 이메일 +- name: 이름 +- nickname: 닉네임 +- imageUrl: 프로필 이미지 URL +*/ +type User = { + id: Id + email: Email + name: Name + nickname: Nickname + imageUrl: URL } // MemberInfo: 일부 사용자 정보를 제외한 타입 type MemberInfo = Omit +/** +- request: T +- file?: Format: binary +*/ interface MultipartFormData { request: T /** Format: binary */ diff --git a/src/types/api/MyPage.types.d.ts b/src/types/api/MyPage.types.d.ts index 5a357d9..3601b41 100644 --- a/src/types/api/MyPage.types.d.ts +++ b/src/types/api/MyPage.types.d.ts @@ -12,16 +12,16 @@ export interface ProfileBase { affiliation?: AffiliationType // 소속 } -/* -path: '/v1/my-page/profile' -GET: 마이페이지 프로필 조회 +/** +- path: '/v1/my-page/profile' +- GET: 마이페이지 프로필 조회 */ export interface GetProfileResponse extends ProfileBase, User { completionRate: number // 포트폴리오 완성률 (%) } -/* -PATCH: 마이페이지 프로필 저장 +/** +- PATCH: 마이페이지 프로필 저장 */ export type UpdateProfileRequest = MultipartFormData @@ -29,9 +29,9 @@ export interface UpdateProfileResponse extends ProfileBase { completionRate?: number // 포트폴리오 완성률 (%) } -/* -path: '/v1/my-page/check-nickname' -POST: 닉네임 중복 체크 +/** +- path: '/v1/my-page/check-nickname' +- POST: 닉네임 중복 체크 */ export interface CheckNicknameRequest { nickname: Nickname // 닉네임 중복 검사 대상 @@ -39,8 +39,8 @@ export interface CheckNicknameRequest { export type CheckNicknameResponse = boolean -/* -UpdatePasswordResponse +/** +- UpdatePasswordResponse { "isSuccess": true, "code": "COMMON200", @@ -48,16 +48,16 @@ UpdatePasswordResponse } */ -/* -path: '/v1/my-page/password' -PATCH: 마이 페이지 비밀번호 수정 +/** +- path: '/v1/my-page/password' +- PATCH: 마이 페이지 비밀번호 수정 */ export interface UpdatePasswordRequest { password: Password // 새 비밀번호 } -/* -UpdatePasswordResponse +/** +- UpdatePasswordResponse { "isSuccess": true, "code": "COMMON200", diff --git a/src/types/api/Portfolio.types.d.ts b/src/types/api/Portfolio.types.d.ts index 1108088..93cb177 100644 --- a/src/types/api/Portfolio.types.d.ts +++ b/src/types/api/Portfolio.types.d.ts @@ -108,14 +108,14 @@ export interface PortfolioDetail extends PortfolioBase { } /** -path: '/v1/portfolio' -GET: 포트폴리오 전체 리스트 조회 +- path: '/v1/portfolio' +- GET: 포트폴리오 전체 리스트 조회 */ export type GetPortfolioListResponse = PortfolioListItem[] /** -path: '/v1/portfolio' -POST: 포트폴리오 글 등록 +- path: '/v1/portfolio' +- POST: 포트폴리오 글 등록 */ export type CreatePortfolioRequest = MultipartFormData export type CreatePortfolioResponse = CreatePortfolioRequest & PostBaseBody diff --git a/src/types/api/Post.types.d.ts b/src/types/api/Post.types.d.ts index 7ecff53..5025780 100644 --- a/src/types/api/Post.types.d.ts +++ b/src/types/api/Post.types.d.ts @@ -1,17 +1,31 @@ -// 게시글 유형 +/** +게시글 기본 구조 +*/ type PostCategory = 'COMMUNITY' | 'TEAM' | 'PORTFOLIO' | 'PROJECT' -// 게시글 기본 구조 +/** +게시글 기본 구조 +- id: 게시글 고유 ID +- member: 게시글 작성자 정보 +- views: 조회수 +- answers: 답변 수 +- likes: 좋아요 수 +*/ interface PostBaseBody extends TimeStamps { - id: Id // 게시글 고유 ID - member: MemberInfo // 게시글 작성자 정보 - views: number // 조회수 - answers: number // 답변 수 - likes: number // 좋아요 수 + id: Id + member: MemberInfo + views: number + answers: number + likes: number } -// 좋아요 요청 타입 -interface LikeRequest { - likeId: Id // 좋아요 대상 게시글 ID - likeType: PostCategory // 대상 유형 (PostCategory) +/** +- path: '/v1/likes' +- POST: 좋아요 요청 +- likeId: 좋아요 대상 게시글 ID +- likeType: 대상 유형 (PostCategory) +*/ +type LikeRequest = { + likeId: Id + likeType: PostCategory } diff --git a/src/types/api/Team.types.d.ts b/src/types/api/Team.types.d.ts index 07d2bf4..b9e8d56 100644 --- a/src/types/api/Team.types.d.ts +++ b/src/types/api/Team.types.d.ts @@ -4,7 +4,9 @@ export type TeamLabelType = '스터디' | '프로젝트' | '멘토링' // 팀 export type TeamRecruitmentLabelType = '모집 중' | '모집 완료' // 모집 상태 라벨 export type TeamPosition = string // 역할 (예: 프론트엔드, 백엔드 등) -// 팀 모집글 공통 속성 +/** +팀 모집글 공통 속성 +*/ type TeamRecruitmentBase = { teamTitle: string // 팀 모집글 제목 teamContent: string // 팀 모집글 내용 @@ -15,21 +17,23 @@ type TeamRecruitmentBase = { teamTags?: Tag[] // 태그 } -// 팀 모집글 리스트 아이템 +/** +팀 모집글 리스트 아이템 +*/ export interface TeamRecruitmentListItem extends PostBaseBody, TeamRecruitmentBase { teamIsActive: boolean // 모집 활성 상태 } -/* -path: '/v1/team' -GET: 팀 모집글 모집급 전체 조회 +/** +- path: '/v1/team' +- GET: 팀 모집글 모집급 전체 조회 */ export type GetTeamRecruitmentListResponse = TeamRecruitmentListItem[] -/* -POST: 팀 모집글 등록 +/** +- POST: 팀 모집글 등록 */ export type CreateTeamRecruitmentRequest = TeamRecruitmentBase export interface CreateTeamRecruitmentResponse @@ -38,14 +42,14 @@ export interface CreateTeamRecruitmentResponse id: Id // 팀 모집글 ID } -/* -path: '/v1/team/{teamId}' -GET: 팀 모집글 상세 조회 +/** +- path: '/v1/team/{teamId}' +- GET: 팀 모집글 상세 조회 */ export type GetTeamRecruitmentResponse = TeamRecruitmentListItem -/* -DELETE: 팀 모집글 삭제 +/** +- DELETE: 팀 모집글 삭제 반환 값: 공통 응답 타입 활용 (ApiResponse) { "isSuccess": true, @@ -54,23 +58,22 @@ DELETE: 팀 모집글 삭제 } */ -/* -path: '/v1/team/{teamId}/add' - -POST: 팀 모집글 멤버 추가 +/** +- path: '/v1/team/{teamId}/add' +- POST: 팀 모집글 멤버 추가 */ export interface AddTeamMemberRequest { memberId: Id // 추가할 멤버 ID } -export interface AddTeamMemberResponse { +export type AddTeamMemberResponse = { id: Id // 추가 작업 ID teamId: Id // 팀 모집글 ID memberId: Id // 멤버 ID } -/* -path: '/v1/team/{teamId}/close' -PATCH: 팀 모집글 모집 마감 +/** +- path: '/v1/team/{teamId}/close' +- PATCH: 팀 모집글 모집 마감 반환 값: { @@ -80,15 +83,15 @@ PATCH: 팀 모집글 모집 마감 } */ -/* -path: '/v1/team/{teamId}/search-members' -GET: 멤버 리스트 검색 +/** +- path: '/v1/team/{teamId}/search-members' +- GET: 멤버 리스트 검색 */ export type SearchMembersResponse = MemberInfo[] -/* -path: '/v1/team/{teamId}/members' -GET: 팀 모집글 멤버 전체 조회 +/** +- path: '/v1/team/{teamId}/members' +- GET: 팀 모집글 멤버 전체 조회 */ export type GetTeamMembersResponse = { teamId: Id // 팀 모집글 ID