diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..3654ba1b --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +/src/__generated__/* linguist-generated=true \ No newline at end of file diff --git a/package.json b/package.json index d0dfe78c..856649a0 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,10 @@ "preview": "vite preview", "test": "vitest", "supportedBrowsers": "echo \"export default $(browserslist-useragent-regexp --allowHigherVersions);\" > ./src/views/UnsupportedPage/supportedBrowsers.ts", - "postinstall": "patch-package" + "postinstall": "patch-package", + "openapi-typescript": "npx openapi-typescript ./src/__generated__/api-spec.yml -o ./src/__generated__/api.d.ts", + "swagger-typescript-api": "swagger-typescript-api -p ./src/__generated__/api-spec.yml -r -o ./src/__generated__/api-types --modular -d --extract-request-body --extract-response-body --extract-response-error", + "api-spec": "yarn openapi-typescript && yarn swagger-typescript-api" }, "browserslist": [ "> 0.3%", @@ -44,6 +47,7 @@ "firebase": "^10.12.4", "lottie-react": "^2.4.0", "nanoid": "^5.0.7", + "openapi-fetch": "^0.13.0", "patch-package": "^8.0.0", "postinstall-postinstall": "^2.1.0", "react": "^18.2.0", @@ -52,7 +56,8 @@ "react-helmet-async": "^2.0.5", "react-hook-form": "^7.51.5", "react-responsive": "^10.0.0", - "react-router-dom": "^6.23.1" + "react-router-dom": "^6.23.1", + "swagger-typescript-api": "^13.0.23" }, "devDependencies": { "@hookform/devtools": "^4.3.1", @@ -81,6 +86,7 @@ "eslint-plugin-vitest": "^0.5.4", "jsdom": "^25.0.0", "msw": "^2.4.9", + "openapi-typescript": "^7.4.3", "prettier": "^3.2.5", "rollup-plugin-visualizer": "^5.12.0", "typescript": "^5.2.2", diff --git a/src/__generated__/api-schema.d.ts b/src/__generated__/api-schema.d.ts new file mode 100644 index 00000000..6a70ebcb --- /dev/null +++ b/src/__generated__/api-schema.d.ts @@ -0,0 +1,1147 @@ +/** + * This file was auto-generated by openapi-typescript. + * Do not make direct changes to the file. + */ + +export interface paths { + "/auth/sign-up/email": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Admin Signup */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": Record; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + "X-Powered-By"?: string; + "Access-Control-Allow-Origin"?: string; + "Content-Type"?: string; + Etag?: string; + "Function-Execution-Id"?: string; + "X-Cloud-Trace-Context"?: string; + Date?: string; + Server?: string; + "Content-Length"?: number; + "Alt-Svc"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-season/latest": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** 최신 기수 정보 조회 (From Admin) */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-auth/verify/send": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** 이메일 인증 코드 전송 */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": Record; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + "X-Powered-By"?: string; + "Access-Control-Allow-Origin"?: string; + "Content-Type"?: string; + Etag?: string; + "Function-Execution-Id"?: string; + "X-Cloud-Trace-Context"?: string; + Date?: string; + Server?: string; + "Content-Length"?: number; + "Alt-Svc"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-auth/verify/email": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** 이메일 인증 코드 확인 */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": Record; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-auth/signup": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** 지원자 회원가입 */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": Record; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-auth/check/user": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** 유저 확인 (비밀번호 변경) */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": Record; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-auth/change/password": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** 비밀번호 변경 */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": Record; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-auth/login": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** 로그인 */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": Record; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-question/list": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** 질문 리스트 조회 (From Admin) */ + get: { + parameters: { + query?: { + /** @example 52 */ + season?: number; + /** @example OB */ + group?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-answer/store": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** 임시저장 지원서 조회 */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + "X-Powered-By"?: string; + "Access-Control-Allow-Origin"?: string; + "Content-Type"?: string; + Etag?: string; + "Function-Execution-Id"?: string; + "X-Cloud-Trace-Context"?: string; + Date?: string; + Server?: string; + "Content-Length"?: number; + "Alt-Svc"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + put?: never; + /** 지원서 임시저장 */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": { + /** Format: binary */ + picture?: string; + /** + * @description string + * @example 서버 + */ + part?: string; + /** + * @description string + * @example home1 + */ + address?: string; + /** + * @description string + * @example 2001.01.23 + */ + birthday?: number; + /** + * @description string + * @example 대학 + */ + college?: string; + /** + * @description string + * @example male + */ + gender?: string; + /** + * @description string + * @example 지인 추천 + */ + knownPath?: string; + /** + * @description bool + * @example false + */ + leaveAbsence?: boolean; + /** + * @description string + * @example 통계 + */ + major?: string; + /** + * @description int + * @example 0 + */ + mostRecentSeason?: number; + /** + * @description int + * @example 4 + */ + univYear?: number; + /** + * @description string + * @example 사당역 + */ + nearestStation?: string; + /** + * @description json + * @example [ + * { + * "recruitingQuestionId": 1, + * "answer": "5그릇" + * }, + * { + * "recruitingQuestionId": 2, + * "answer": "4그릇" + * } + * ] + */ + answers?: string; + /** + * @description bool + * @example false + */ + willAppjam?: boolean; + /** Format: binary */ + file_28?: string; + /** Format: binary */ + file_29?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + "X-Powered-By"?: string; + "Access-Control-Allow-Origin"?: string; + "Content-Type"?: string; + Etag?: string; + "Function-Execution-Id"?: string; + "X-Cloud-Trace-Context"?: string; + Date?: string; + Server?: string; + "Content-Length"?: number; + "Alt-Svc"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-answer": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** 지원서 제출 */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": { + /** Format: binary */ + picture?: string; + /** + * @description string + * @example 서버 + */ + part?: string; + /** + * @description string + * @example home1 + */ + address?: string; + /** + * @description string + * @example 2001.01.23 + */ + birthday?: number; + /** + * @description string + * @example 대학 + */ + college?: string; + /** + * @description string + * @example male + */ + gender?: string; + /** + * @description string + * @example 지인 추천 + */ + knownPath?: string; + /** + * @description bool + * @example false + */ + leaveAbsence?: boolean; + /** + * @description string + * @example 통계 + */ + major?: string; + /** + * @description string + * @example 0 + */ + mostRecentSeason?: number; + /** + * @description int + * @example 4 + */ + univYear?: number; + /** + * @description string + * @example 사당역 + */ + nearestStation?: string; + /** + * @description json + * @example [ + * { + * "recruitingQuestionId": 1, + * "answer": "5그릇" + * }, + * { + * "recruitingQuestionId": 2, + * "answer": "4그릇" + * } + * ] + */ + answers?: string; + /** + * @description bool + * @example false + */ + willAppjam?: boolean; + /** @example 1 */ + season?: number; + /** @example OB */ + group?: string; + pictureUrl?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + "X-Powered-By"?: string; + "Access-Control-Allow-Origin"?: string; + "Content-Type"?: string; + Etag?: string; + "Function-Execution-Id"?: string; + "X-Cloud-Trace-Context"?: string; + Date?: string; + Server?: string; + "Content-Length"?: number; + "Alt-Svc"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-applicant/satisfaction": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** 만족도 점수 */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": Record; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-auth/my": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** 마이페이지 */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + "X-Powered-By"?: string; + "Access-Control-Allow-Origin"?: string; + "Content-Type"?: string; + Etag?: string; + "Function-Execution-Id"?: string; + "X-Cloud-Trace-Context"?: string; + Date?: string; + Server?: string; + "Content-Length"?: number; + "Alt-Svc"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-applicant/result/application": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** 마이페이지 서류 합격 확인 */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-applicant/result/final": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** 마이페이지 최종 합격 확인 */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; +} +export type webhooks = Record; +export interface components { + schemas: never; + responses: never; + parameters: never; + requestBodies: never; + headers: never; + pathItems: never; +} +export type $defs = Record; +export type operations = Record; diff --git a/src/__generated__/api-spec.yml b/src/__generated__/api-spec.yml new file mode 100644 index 00000000..7811ff76 --- /dev/null +++ b/src/__generated__/api-spec.yml @@ -0,0 +1,3083 @@ +openapi: 3.0.0 +info: + title: Sopt Recruting + version: 1.0.0 +servers: + - url: http://{{host}} +components: + securitySchemes: + noauthAuth: + type: http + scheme: noauth + bearerAuth: + type: http + scheme: bearer +paths: + /auth/sign-up/email: + post: + tags: + - default + summary: Admin Signup + requestBody: + content: + application/json: + schema: + type: object + example: + email: 35th_makers_recruiting@sopt.org + password: makers!35 + responses: + '200': + description: OK + headers: + X-Powered-By: + schema: + type: string + example: Express + Access-Control-Allow-Origin: + schema: + type: string + example: '*' + Content-Type: + schema: + type: string + example: application/json; charset=utf-8 + Etag: + schema: + type: string + example: W/"573-CTZy6UUHUhSnLVhVYTU7RRE1UKQ" + Function-Execution-Id: + schema: + type: string + example: o8siwlsjt53y + X-Cloud-Trace-Context: + schema: + type: string + example: df8b0658817c64b2f432308c6703eaa5;o=1 + Date: + schema: + type: string + example: Thu, 04 Jul 2024 05:36:55 GMT + Server: + schema: + type: string + example: Google Frontend + Content-Length: + schema: + type: integer + example: '1395' + Alt-Svc: + schema: + type: string + example: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + content: + application/json: + schema: + type: object + example: + err: false + user: + id: 2 + email: makers_test1@sopt.org + isAdmin: true + isDeleted: false + idFirebase: cgAknoZQKwaRh0IBZCJsfZgSADC3 + createdAt: '2024-07-04T05:36:55.637Z' + updatedAt: '2024-07-04T05:36:55.637Z' + idFirebase: cgAknoZQKwaRh0IBZCJsfZgSADC3 + firebaseToken: >- + eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJodHRwczovL2lkZW50aXR5dG9vbGtpdC5nb29nbGVhcGlzLmNvbS9nb29nbGUuaWRlbnRpdHkuaWRlbnRpdHl0b29sa2l0LnYxLklkZW50aXR5VG9vbGtpdCIsImlhdCI6MTcyMDA3MTQxNSwiZXhwIjoxNzIwMDc1MDE1LCJpc3MiOiJmaXJlYmFzZS1hZG1pbnNkay13dGJpNkBzb3B0LXJlY3J1aXRpbmctZGV2LmlhbS5nc2VydmljZWFjY291bnQuY29tIiwic3ViIjoiZmlyZWJhc2UtYWRtaW5zZGstd3RiaTZAc29wdC1yZWNydWl0aW5nLWRldi5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsInVpZCI6ImNnQWtub1pRS3dhUmgwSUJaQ0pzZlpnU0FEQzMiLCJjbGFpbXMiOnsic3RhdHVzIjoiRU1BSUxfU0lHTl9VUCJ9fQ.R3_PScP1h6tmJbO-qclvtAmId90L0VAd91VrVEto5R2DPOr6Rqb5t1tZ123-3kI6svPTJlWP2sfK0R71XwHeDfbjSRJ1hAtYeXdsA1hgipWEMy9ArPyvEzKiX01HWTYOGrSy2NjEU0ED4UFtCUYi8UjKeAmZKWxIsTewm3Drx7d-lPig1gYlAWw3hEp-YRnDSVc8BYwrWJGYhs4gCViSMfBCMVNbRBXLOGUMPV1jKVX6PMUiWMZjOB9Xe4bXA6L5FTjAcb1mS0eODRF4yIEmG63t-Me88rzJLW_m-oxNRJQxqix1Mw8iA9cve7Z6COkt2ikImXqJXnXlNTm4Nrg34g + accesstoken: >- + eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MiwiZW1haWwiOiJtYWtlcnNfdGVzdDFAc29wdC5vcmciLCJmaXJzdE5hbWUiOm51bGwsImxhc3ROYW1lIjpudWxsLCJpYXQiOjE3MjAwNzE0MTUsImV4cCI6MTcyMjY2MzQxNSwiaXNzIjoic29wdCJ9.sPgelg1Z91Ukow6Gq-MliYzpeQnw2uGCdptkYqKWM58 + /recruiting-season/latest: + get: + tags: + - default + summary: 최신 기수 정보 조회 (From Admin) + responses: + '200': + description: OK + headers: + x-powered-by: + schema: + type: string + example: Express + access-control-allow-origin: + schema: + type: string + example: '*' + content-type: + schema: + type: string + example: application/json; charset=utf-8 + content-length: + schema: + type: integer + example: '1196' + etag: + schema: + type: string + example: W/"4ac-S9MX7STKm3GGV7FEsI1d5bF2qRk" + date: + schema: + type: string + example: Mon, 15 Jul 2024 01:33:02 GMT + connection: + schema: + type: string + example: keep-alive + keep-alive: + schema: + type: string + example: timeout=5 + content: + application/json: + schema: + type: object + example: + err: false + season: + id: 1 + season: 1 + ybApplicationStart: '2024-06-20T15:27:45.000Z' + ybApplicationEnd: '2024-06-20T15:27:45.000Z' + ybApplicationConfirmStart: '2024-06-20T15:27:45.000Z' + ybApplicationConfirmEnd: '2024-06-20T15:27:45.000Z' + ybApplicationPassConfirmStart: '2024-06-20T15:27:45.000Z' + ybApplicationPassConfirmEnd: '2024-06-20T15:27:45.000Z' + ybFinalPassConfirmStart: '2024-06-20T15:27:45.000Z' + ybFinalPassConfirmEnd: '2024-06-20T15:27:45.000Z' + obApplicationStart: '2024-06-20T15:27:45.000Z' + obApplicationEnd: '2024-06-20T15:27:45.000Z' + obApplicationConfirmStart: '2024-06-20T15:27:45.000Z' + obApplicationConfirmEnd: '2024-06-20T15:27:45.000Z' + obApplicationPassConfirmStart: '2024-06-20T15:27:45.000Z' + obApplicationPassConfirmEnd: '2024-06-20T15:27:45.000Z' + obFinalPassConfirmStart: '2024-06-20T15:27:45.000Z' + obFinalPassConfirmEnd: '2024-06-20T15:27:45.000Z' + name: MAKERS Test + obInterviewStart: '2024-06-20T15:27:45.000Z' + obInterviewEnd: '2024-06-20T15:27:45.000Z' + ybInterviewStart: '2024-06-20T15:27:45.000Z' + ybInterviewEnd: '2024-06-20T15:27:45.000Z' + isDeleted: false + createdAt: '2024-06-21T00:27:45.564Z' + updatedAt: '2024-06-21T00:27:45.564Z' + group: null + /recruiting-auth/verify/send: + post: + tags: + - default + summary: "\b이메일 인증 코드 전송" + requestBody: + content: + application/json: + schema: + type: object + example: + email: limchangi@naver.com + season: 44 + group: OB + isSignup: true + responses: + '200': + description: OK + headers: + X-Powered-By: + schema: + type: string + example: Express + Access-Control-Allow-Origin: + schema: + type: string + example: '*' + Content-Type: + schema: + type: string + example: application/json; charset=utf-8 + Etag: + schema: + type: string + example: W/"50-6ANWR4XcvY1IAQgNtZ7cm+pHeOU" + Function-Execution-Id: + schema: + type: string + example: 83qon3zaxsob + X-Cloud-Trace-Context: + schema: + type: string + example: c2d32f36afc8c119f93ef8b3399b9518;o=1 + Date: + schema: + type: string + example: Thu, 04 Jul 2024 07:56:06 GMT + Server: + schema: + type: string + example: Google Frontend + Content-Length: + schema: + type: integer + example: '80' + Alt-Svc: + schema: + type: string + example: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + content: + application/json: + schema: + type: object + example: + err: false + message: 성공적으로 인증코드를 전송하였습니다. + /recruiting-auth/verify/email: + post: + tags: + - default + summary: 이메일 인증 코드 확인 + requestBody: + content: + application/json: + schema: + type: object + example: + email: limchangi@naver.com + code: WJPQIX + responses: + '200': + description: OK + headers: + x-powered-by: + schema: + type: string + example: Express + access-control-allow-origin: + schema: + type: string + example: '*' + content-type: + schema: + type: string + example: application/json; charset=utf-8 + content-length: + schema: + type: integer + example: '58' + etag: + schema: + type: string + example: W/"3a-wW2EjdoQVpgJKV0pc6SYA1mK0dM" + date: + schema: + type: string + example: Tue, 02 Jul 2024 05:35:37 GMT + connection: + schema: + type: string + example: keep-alive + keep-alive: + schema: + type: string + example: timeout=5 + content: + application/json: + schema: + type: object + example: + err: false + message: 인증에 성공하였습니다. + '400': + description: Bad Request + headers: + x-powered-by: + schema: + type: string + example: Express + access-control-allow-origin: + schema: + type: string + example: '*' + content-type: + schema: + type: string + example: application/json; charset=utf-8 + content-length: + schema: + type: integer + example: '57' + etag: + schema: + type: string + example: W/"39-64gz37xnsWcNrWL6+eyQZoTN8pQ" + date: + schema: + type: string + example: Tue, 02 Jul 2024 06:58:24 GMT + connection: + schema: + type: string + example: keep-alive + keep-alive: + schema: + type: string + example: timeout=5 + content: + application/json: + schema: + type: object + example: + err: true + message: 인증에 실패하였습니다. + /recruiting-auth/signup: + post: + tags: + - default + summary: 지원자 회원가입 + requestBody: + content: + application/json: + schema: + type: object + example: + email: limchangi@naver.com + password: '1234' + passwordCheck: '1234' + name: 홍길동 + phone: 010-1234-1234 + season: 6 + group: OB + security: + - noauthAuth: [] + responses: + '200': + description: OK + headers: + x-powered-by: + schema: + type: string + example: Express + access-control-allow-origin: + schema: + type: string + example: '*' + content-type: + schema: + type: string + example: application/json; charset=utf-8 + content-length: + schema: + type: integer + example: '274' + etag: + schema: + type: string + example: W/"112-BHf2kWRUqi8pvrpCrOe7Sag4Kmk" + date: + schema: + type: string + example: Tue, 02 Jul 2024 06:02:35 GMT + connection: + schema: + type: string + example: keep-alive + keep-alive: + schema: + type: string + example: timeout=5 + content: + application/json: + schema: + type: object + example: + err: false + email: limchangi@naver.com + token: >- + eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwiZW1haWwiOiJsaW1jaGFuZ2lAbmF2ZXIuY29tIiwibmFtZSI6Iu2Zjeq4uOuPmSIsImlhdCI6MTcxOTkwMDE1NSwiZXhwIjoxNzE5OTg2NTU1LCJpc3MiOiJzb3B0In0.ymIzjsSXa7CKYUsZsDIYXf1rD6PnRKnhnP629EGJep8 + '400': + description: Bad Request + headers: + x-powered-by: + schema: + type: string + example: Express + access-control-allow-origin: + schema: + type: string + example: '*' + content-type: + schema: + type: string + example: application/json; charset=utf-8 + content-length: + schema: + type: integer + example: '61' + etag: + schema: + type: string + example: W/"3d-2yz+4HbRTctrEwSyULZt+RKp6DM" + date: + schema: + type: string + example: Tue, 02 Jul 2024 05:59:26 GMT + connection: + schema: + type: string + example: keep-alive + keep-alive: + schema: + type: string + example: timeout=5 + content: + application/json: + schema: + type: object + example: + err: true + message: 이미 존재하는 계정입니다. + '403': + description: Forbidden + headers: + x-powered-by: + schema: + type: string + example: Express + access-control-allow-origin: + schema: + type: string + example: '*' + content-type: + schema: + type: string + example: application/json; charset=utf-8 + content-length: + schema: + type: integer + example: '74' + etag: + schema: + type: string + example: W/"4a-2Zbb/qhjPO84EHOVVAiYznUXXQQ" + date: + schema: + type: string + example: Tue, 02 Jul 2024 06:01:31 GMT + connection: + schema: + type: string + example: keep-alive + keep-alive: + schema: + type: string + example: timeout=5 + content: + application/json: + schema: + type: object + example: + err: true + message: 비밀번호 확인이 일치하지 않습니다. + /recruiting-auth/check/user: + post: + tags: + - default + summary: 유저 확인 (비밀번호 변경) + requestBody: + content: + application/json: + schema: + type: object + example: + email: limchangi@naver.com + name: 홍길동 + season: 1 + group: OB + security: + - noauthAuth: [] + responses: + '200': + description: OK + headers: + x-powered-by: + schema: + type: string + example: Express + access-control-allow-origin: + schema: + type: string + example: '*' + content-type: + schema: + type: string + example: application/json; charset=utf-8 + content-length: + schema: + type: integer + example: '65' + etag: + schema: + type: string + example: W/"41-y8H1S6dfGUiDNMMOZV3F112tEHQ" + date: + schema: + type: string + example: Tue, 02 Jul 2024 07:11:09 GMT + connection: + schema: + type: string + example: keep-alive + keep-alive: + schema: + type: string + example: timeout=5 + content: + application/json: + schema: + type: object + example: + err: false + message: 계정 조회에 성공하였습니다. + '400': + description: Bad Request + headers: + x-powered-by: + schema: + type: string + example: Express + access-control-allow-origin: + schema: + type: string + example: '*' + content-type: + schema: + type: string + example: application/json; charset=utf-8 + content-length: + schema: + type: integer + example: '62' + etag: + schema: + type: string + example: W/"3e-fSGP6HsD4fqVRLlKUy6XO897i24" + date: + schema: + type: string + example: Tue, 02 Jul 2024 07:12:00 GMT + connection: + schema: + type: string + example: keep-alive + keep-alive: + schema: + type: string + example: timeout=5 + content: + application/json: + schema: + type: object + example: + err: false + message: 존재하지 않는 계정입니다. + /recruiting-auth/change/password: + post: + tags: + - default + summary: 비밀번호 변경 + requestBody: + content: + application/json: + schema: + type: object + example: + email: limchangi@naver.com + season: 35 + group: OB + password: '1234' + passwordCheck: '1234' + security: + - noauthAuth: [] + responses: + '200': + description: OK + headers: + x-powered-by: + schema: + type: string + example: Express + access-control-allow-origin: + schema: + type: string + example: '*' + content-type: + schema: + type: string + example: application/json; charset=utf-8 + content-length: + schema: + type: integer + example: '100' + etag: + schema: + type: string + example: W/"64-u3s+yoqwSyXklp7imkD8TDxkyGk" + date: + schema: + type: string + example: Tue, 02 Jul 2024 07:32:57 GMT + connection: + schema: + type: string + example: keep-alive + keep-alive: + schema: + type: string + example: timeout=5 + content: + application/json: + schema: + type: object + example: + err: false + email: limchangi@naver.com + message: 비밀번호 변경에 성공하였습니다 + '403': + description: Forbidden + headers: + x-powered-by: + schema: + type: string + example: Express + access-control-allow-origin: + schema: + type: string + example: '*' + content-type: + schema: + type: string + example: application/json; charset=utf-8 + content-length: + schema: + type: integer + example: '74' + etag: + schema: + type: string + example: W/"4a-2Zbb/qhjPO84EHOVVAiYznUXXQQ" + date: + schema: + type: string + example: Tue, 02 Jul 2024 07:27:24 GMT + connection: + schema: + type: string + example: keep-alive + keep-alive: + schema: + type: string + example: timeout=5 + content: + application/json: + schema: + type: object + example: + err: true + message: 비밀번호 확인이 일치하지 않습니다. + /recruiting-auth/login: + post: + tags: + - default + summary: 로그인 + requestBody: + content: + application/json: + schema: + type: object + example: + email: limchangi@naver.com + season: 6 + group: OB + password: '1234' + security: + - noauthAuth: [] + responses: + '200': + description: OK + headers: + x-powered-by: + schema: + type: string + example: Express + access-control-allow-origin: + schema: + type: string + example: '*' + content-type: + schema: + type: string + example: application/json; charset=utf-8 + content-length: + schema: + type: integer + example: '244' + etag: + schema: + type: string + example: W/"f4-HAXOkpBDA51LQDqj+1W87xCzIgQ" + date: + schema: + type: string + example: Tue, 02 Jul 2024 07:43:22 GMT + connection: + schema: + type: string + example: keep-alive + keep-alive: + schema: + type: string + example: timeout=5 + content: + application/json: + schema: + type: object + example: + err: false + token: >- + eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwiZW1haWwiOiJsaW1jaGFuZ2lAbmF2ZXIuY29tIiwibmFtZSI6Iu2Zjeq4uOuPmSIsImlhdCI6MTcxOTkwNjIwMiwiZXhwIjoxNzE5OTkyNjAyLCJpc3MiOiJzb3B0In0._jBgV61sjPfCMsjt2X78CuWHzTx2BBjD85pbxhKivvQ + '403': + description: Forbidden + headers: + x-powered-by: + schema: + type: string + example: Express + access-control-allow-origin: + schema: + type: string + example: '*' + content-type: + schema: + type: string + example: application/json; charset=utf-8 + content-length: + schema: + type: integer + example: '76' + etag: + schema: + type: string + example: W/"4c-6x9C3SYn3bWd8SzDyyLnbbs/s8U" + date: + schema: + type: string + example: Tue, 02 Jul 2024 07:46:09 GMT + connection: + schema: + type: string + example: keep-alive + keep-alive: + schema: + type: string + example: timeout=5 + content: + application/json: + schema: + type: object + example: + err: false + message: 잘못된 이메일 혹은 비밀번호 입니다. + /recruiting-question/list: + get: + tags: + - default + summary: 질문 리스트 조회 (From Admin) + parameters: + - name: season + in: query + schema: + type: integer + example: '52' + - name: group + in: query + schema: + type: string + example: OB + responses: + '200': + description: OK + headers: + x-powered-by: + schema: + type: string + example: Express + access-control-allow-origin: + schema: + type: string + example: '*' + content-type: + schema: + type: string + example: application/json; charset=utf-8 + content-length: + schema: + type: integer + example: '26811' + etag: + schema: + type: string + example: W/"68bb-LjDDib1yWRoehxzbYpKkaYShgEE" + date: + schema: + type: string + example: Wed, 25 Sep 2024 15:51:24 GMT + connection: + schema: + type: string + example: keep-alive + keep-alive: + schema: + type: string + example: timeout=5 + content: + application/json: + schema: + type: object + example: + err: false + commonQuestions: + part: 공통 + recruitingQuestionTypeId: 1 + questions: + - id: 310 + question: |- + 1. SOPT에서 어떤 활동을 하셨는지 작성해주세요. + <플레이스홀더>여러 활동을 하신 경우 다 적어주시면 좋아요 :) + - 33기 : 기획파트, 앱잼 OOO Team Leader + - 32기 : iOS파트, 운영팀 + value: 1. SOPT에서 어떤 활동을 하셨는지 작성해주세요. + order: 1 + urls: null + isFile: null + optional: false + placeholder: |- + 여러 활동을 하신 경우 다 적어주시면 좋아요 :) + - 33기 : 기획파트, 앱잼 OOO Team Leader + - 32기 : iOS파트, 운영팀 + charLimit: 100 + - id: 311 + question: 2. makers에 지원하신 동기는 무엇인가요? + value: 2. makers에 지원하신 동기는 무엇인가요? + order: 2 + urls: null + isFile: null + optional: false + placeholder: null + charLimit: 500 + - id: 312 + question: 3. makers에서 본인의 역량을 어떻게 활용해서 기여하고 싶은지 간단하게 서술해주세요. + value: 3. makers에서 본인의 역량을 어떻게 활용해서 기여하고 싶은지 간단하게 서술해주세요. + order: 3 + urls: null + isFile: null + optional: false + placeholder: null + charLimit: 300 + partQuestions: + - part: PM + recruitingQuestionTypeId: 2 + questions: + - id: 313 + question: >- + PM 포지션에 지원해 주셔서 감사해요🙂 + + PM 포지션은 해당 본문에 적힌 한 가지의 과제성 질문과 자유 형식의 포트폴리오를 받고 있어요. + 해당 질문에 대한 답변을 템플릿 양식에 의거하여 첨부해 주세요. + + + SOPT Playground, SOPT 모임 서비스, 공식 홈페이지, SOPT App, + makers Platform 팀의 PM으로 함께하게 되면, 현재 제품에서 개선을 진행하거나 신규 + 기능을 제안하여 제품을 성장시키게 되실 거예요. + + + 각 팀의 PM으로 제품을 성장시킨다고 생각하며, 한 가지 프로덕트를 선택하여 아래 양식에 맞춰서 + 작성해 주세요. + value: >- + PM 포지션에 지원해 주셔서 감사해요🙂 + + PM 포지션은 해당 본문에 적힌 한 가지의 과제성 질문과 자유 형식의 포트폴리오를 받고 있어요. + 해당 질문에 대한 답변을 템플릿 양식에 의거하여 첨부해 주세요. + + + SOPT Playground, SOPT 모임 서비스, 공식 홈페이지, SOPT App, + makers Platform 팀의 PM으로 함께하게 되면, 현재 제품에서 개선을 진행하거나 신규 + 기능을 제안하여 제품을 성장시키게 되실 거예요. + + + 각 팀의 PM으로 제품을 성장시킨다고 생각하며, 한 가지 프로덕트를 선택하여 아래 양식에 맞춰서 + 작성해 주세요. + order: 1 + urls: null + isFile: null + optional: false + placeholder: null + charLimit: null + - id: 314 + question: "1. 프로덕트에 대한 고민이 담긴 각 팀의 과제 3개와 자유 주제 과제 1개를 준비했어요. 4가지 과제 중 1가지를 선택하여 One Pager를 작성해 주세요. 본인이 작성한 과제를 ‘왜’ 해야 하는지가 설득되어야 해요.\n\n[SOPT Playground]\n4기 Playground는 커뮤니티 활성화를 목표로 설정하여 ‘랜덤 프로필, 인기 게시물 알림’ 등 다양한 기능들을 시도했어요. 커뮤니티를 활성화하기 위한 방법에 대해 자유롭게 제안해 주세요. \n\n[SOPT App]\nSOPT App 홈 화면은 많은 시도를 해볼 수 있는 곳으로, 4기에는 ‘HOT 게시글’을 확인할 수 있는 기능을 시도했어요. SOPT의 특수성을 고려하면서, 유저 리텐션을 높이기 위해 어떤 식으로 홈 화면을 개편하면 좋을지 자유롭게 제안해 주세요.\n\n[makers Platform]\n4기 Platform 팀은 makers 제품들의 인증 체계에 대한 부채 해결, 알림 기능의 개선, 디자인 시스템 구축 등 다양한 영역에서의 제품 팀을 위한 프로젝트들을 진행하거나 출석 및 알림 어드민 제품을 개선했어요. 이런 맥락 속 5기 makers 팀이 제품을 보다 빠르게 만들기 위해 Platform 팀에서 진행해 볼 수 있는 프로젝트를 제안해 주세요.\n\n[자유 주제]\nSOPT 활동을 하며 느꼈던 제품의 개선 사항에 대해 자유롭게 제안해 주세요.\n\n[One Pager Template]\n1) 프로젝트의 목표(Objective)\n2) 제안 배경(무엇이 문제이며, 해결책은 무엇이고, 왜 우리가 리소스를 투입하여 이것을 해야하는지)\n3) 가설과 검증 전략(어떤 타겟 유저에게, 어떤 해결책을 제안할 것인지)\n4) 문제를 해결하기 위한 주요 기능 및 액션(해결책을 어떤 기능으로 풀어내고, 각 기능을 어떻게 단계적으로 구현할 것인지에 대한 플랜)\n5) 성공 지표(성공을 측정할 수 있는 지표는 무엇으로 가져갈 것인지, 어떻게 측정할 것인지)\n6) 배포 후 운영 계획(의도한 대로 문제가 잘 해결될 수 있도록 어떻게 운영해볼 것인지)\n\n[템플릿 양식 및 제출 방식]\n- One Pager 내 사진 및 이미지 첨부\_절대 불가\n- WORD 혹은 HWP에 텍스트로 작성 후, PDF로 변환하여 제출\n- 분량 제한 없음<파일>\n<플레이스홀더>파일을 첨부하셨다면, '파일 제출'이라고 기재 후 제출해주세요" + value: "1. 프로덕트에 대한 고민이 담긴 각 팀의 과제 3개와 자유 주제 과제 1개를 준비했어요. 4가지 과제 중 1가지를 선택하여 One Pager를 작성해 주세요. 본인이 작성한 과제를 ‘왜’ 해야 하는지가 설득되어야 해요.\n\n[SOPT Playground]\n4기 Playground는 커뮤니티 활성화를 목표로 설정하여 ‘랜덤 프로필, 인기 게시물 알림’ 등 다양한 기능들을 시도했어요. 커뮤니티를 활성화하기 위한 방법에 대해 자유롭게 제안해 주세요. \n\n[SOPT App]\nSOPT App 홈 화면은 많은 시도를 해볼 수 있는 곳으로, 4기에는 ‘HOT 게시글’을 확인할 수 있는 기능을 시도했어요. SOPT의 특수성을 고려하면서, 유저 리텐션을 높이기 위해 어떤 식으로 홈 화면을 개편하면 좋을지 자유롭게 제안해 주세요.\n\n[makers Platform]\n4기 Platform 팀은 makers 제품들의 인증 체계에 대한 부채 해결, 알림 기능의 개선, 디자인 시스템 구축 등 다양한 영역에서의 제품 팀을 위한 프로젝트들을 진행하거나 출석 및 알림 어드민 제품을 개선했어요. 이런 맥락 속 5기 makers 팀이 제품을 보다 빠르게 만들기 위해 Platform 팀에서 진행해 볼 수 있는 프로젝트를 제안해 주세요.\n\n[자유 주제]\nSOPT 활동을 하며 느꼈던 제품의 개선 사항에 대해 자유롭게 제안해 주세요.\n\n[One Pager Template]\n1) 프로젝트의 목표(Objective)\n2) 제안 배경(무엇이 문제이며, 해결책은 무엇이고, 왜 우리가 리소스를 투입하여 이것을 해야하는지)\n3) 가설과 검증 전략(어떤 타겟 유저에게, 어떤 해결책을 제안할 것인지)\n4) 문제를 해결하기 위한 주요 기능 및 액션(해결책을 어떤 기능으로 풀어내고, 각 기능을 어떻게 단계적으로 구현할 것인지에 대한 플랜)\n5) 성공 지표(성공을 측정할 수 있는 지표는 무엇으로 가져갈 것인지, 어떻게 측정할 것인지)\n6) 배포 후 운영 계획(의도한 대로 문제가 잘 해결될 수 있도록 어떻게 운영해볼 것인지)\n\n[템플릿 양식 및 제출 방식]\n- One Pager 내 사진 및 이미지 첨부\_절대 불가\n- WORD 혹은 HWP에 텍스트로 작성 후, PDF로 변환하여 제출\n- 분량 제한 없음" + order: 2 + urls: null + isFile: true + optional: false + placeholder: 파일을 첨부하셨다면, '파일 제출'이라고 기재 후 제출해주세요 + charLimit: 5 + - id: 315 + question: >- + 2. 자신을 드러낼 수 있는 개인 블로그나 노션 링크, 포트폴리오 등을 자유롭게 + 입력해주세요.<파일> + value: 2. 자신을 드러낼 수 있는 개인 블로그나 노션 링크, 포트폴리오 등을 자유롭게 입력해주세요. + order: 3 + urls: null + isFile: true + optional: false + placeholder: null + charLimit: 500 + - id: 316 + question: >- + 3. 희망하는 팀을 순서대로 적어주세요. + + + makers에서는 예비 maker께서 원하는 가치를 실현하는 걸 돕고자 희망하는 팀을 지원받고 + 있어요. 각 팀이 만들어가는 가치를 다시 한번 확인해주시고 팀을 지원해주세요. + + -Playground팀 + -APP팀 + -공식홈페이지팀 + -Crew팀 + -플랫폼팀 + + <플레이스홀더>ex. 1순위 000팀, 2순위 000팀, 3순위 000팀, 4순위 000팀, + 5순위 000팀 + value: >- + 3. 희망하는 팀을 순서대로 적어주세요. + + + makers에서는 예비 maker께서 원하는 가치를 실현하는 걸 돕고자 희망하는 팀을 지원받고 + 있어요. 각 팀이 만들어가는 가치를 다시 한번 확인해주시고 팀을 지원해주세요. + + -Playground팀 + -APP팀 + -공식홈페이지팀 + -Crew팀 + -플랫폼팀 + order: 4 + urls: null + isFile: null + optional: false + placeholder: ex. 1순위 000팀, 2순위 000팀, 3순위 000팀, 4순위 000팀, 5순위 000팀 + charLimit: 100 + - part: 디자인 + recruitingQuestionTypeId: 3 + questions: + - id: 317 + question: >- + Product & Platform Designer 포지션에 지원해주셔서 감사해요 😊 + + Product & Platform Designer 포지션은 해당 본문에 적힌 세 가지의 질문과 + 자유 형식의 포트폴리오를 받고 있어요. + value: >- + Product & Platform Designer 포지션에 지원해주셔서 감사해요 😊 + + Product & Platform Designer 포지션은 해당 본문에 적힌 세 가지의 질문과 + 자유 형식의 포트폴리오를 받고 있어요. + order: 1 + urls: null + isFile: null + optional: false + placeholder: null + charLimit: null + - id: 318 + question: >- + 1. 프로덕트 디자인으로 문제를 해결한 사례 1가지를 선택하고, 어떤 고민을 했는지 알려주세요. + + <플레이스홀더>프로덕트에 대한 설명, 프로덕트의 사용자, 문제라고 생각한 이유, 해결책 등을 + 포함해서 서술해 주세요. + value: 1. 프로덕트 디자인으로 문제를 해결한 사례 1가지를 선택하고, 어떤 고민을 했는지 알려주세요. + order: 2 + urls: null + isFile: null + optional: false + placeholder: >- + 프로덕트에 대한 설명, 프로덕트의 사용자, 문제라고 생각한 이유, 해결책 등을 포함해서 서술해 + 주세요. + charLimit: 700 + - id: 319 + question: 2. 프로덕트 또는 플랫폼 디자이너로서 본인의 어떤 점이 가장 강점이라고 생각하시나요? + value: 2. 프로덕트 또는 플랫폼 디자이너로서 본인의 어떤 점이 가장 강점이라고 생각하시나요? + order: 3 + urls: null + isFile: null + optional: false + placeholder: null + charLimit: 500 + - id: 320 + question: |- + 3. 자신을 드러낼 수 있는 노션, 포트폴리오 파일 또는 링크를 제출해주세요.<파일> + <플레이스홀더>포트폴리오 구성 TIP + - 사용자 관점에서 문제를 해결한 과정을 담아주세요. + - 문제 해결 과정에 집중해서 포트폴리오를 구성해주세요. + value: 3. 자신을 드러낼 수 있는 노션, 포트폴리오 파일 또는 링크를 제출해주세요. + order: 4 + urls: null + isFile: true + optional: false + placeholder: |- + 포트폴리오 구성 TIP + - 사용자 관점에서 문제를 해결한 과정을 담아주세요. + - 문제 해결 과정에 집중해서 포트폴리오를 구성해주세요. + charLimit: 500 + - id: 321 + question: >- + 4. 포트폴리오를 제출했다면, 프로젝트 순서대로 본인이 했던 역할과 함께 기여 정도를 + 작성해주세요. (포트폴리오 내부에도 함께 작성해주시면 더 좋아요)<선택> + + <플레이스홀더>ex) + + 1번 프로젝트 : 유저 리서치 진행, 30% + + 2번 프로젝트 : UX 개선, 100% + value: >- + 4. 포트폴리오를 제출했다면, 프로젝트 순서대로 본인이 했던 역할과 함께 기여 정도를 + 작성해주세요. (포트폴리오 내부에도 함께 작성해주시면 더 좋아요) + order: 5 + urls: null + isFile: null + optional: true + placeholder: |- + ex) + 1번 프로젝트 : 유저 리서치 진행, 30% + 2번 프로젝트 : UX 개선, 100% + charLimit: 100 + - id: 322 + question: >- + 5. makers 5기 디자인 챕터에 속하게 된다면 어떤 챕터원이 되고싶은지 간단히 작성해 + 주세요. + value: >- + 5. makers 5기 디자인 챕터에 속하게 된다면 어떤 챕터원이 되고싶은지 간단히 작성해 + 주세요. + order: 6 + urls: null + isFile: null + optional: false + placeholder: null + charLimit: 300 + - id: 323 + question: >- + 6. 희망하는 팀을 순서대로 적어주세요. + + + makers에서는 예비 maker께서 원하는 가치를 실현하는 걸 돕고자 희망하는 팀을 지원받고 + 있어요. 각 팀이 만들어가는 가치를 다시 한번 확인해주시고 팀을 지원해주세요. + + -Playground팀 + -APP팀 + -공식홈페이지팀 + -Crew팀 + -플랫폼팀 + + <플레이스홀더>ex. 1순위 000팀, 2순위 000팀, 3순위 000팀, 4순위 000팀, + 5순위 000팀 + value: >- + 6. 희망하는 팀을 순서대로 적어주세요. + + + makers에서는 예비 maker께서 원하는 가치를 실현하는 걸 돕고자 희망하는 팀을 지원받고 + 있어요. 각 팀이 만들어가는 가치를 다시 한번 확인해주시고 팀을 지원해주세요. + + -Playground팀 + -APP팀 + -공식홈페이지팀 + -Crew팀 + -플랫폼팀 + order: 7 + urls: null + isFile: null + optional: false + placeholder: ex. 1순위 000팀, 2순위 000팀, 3순위 000팀, 4순위 000팀, 5순위 000팀 + charLimit: 100 + - part: 서버 + recruitingQuestionTypeId: 7 + questions: + - id: 324 + question: |- + 백엔드 개발자 포지션에 지원해주셔서 감사해요 😄 + 백엔드 개발자 포지션은 두 가지의 질문과 자유 형식의 포트폴리오를 받고 있어요. + value: |- + 백엔드 개발자 포지션에 지원해주셔서 감사해요 😄 + 백엔드 개발자 포지션은 두 가지의 질문과 자유 형식의 포트폴리오를 받고 있어요. + order: 1 + urls: null + isFile: null + optional: false + placeholder: null + charLimit: null + - id: 325 + question: >- + 1. 기술적 도전 과제가 있었던 프로젝트를 예로 들어 설명해주세요. 해당 도전 과제를 어떻게 + 해결했는지, 또는 해결하지 못했는지와 그 이유를 포함하여, 그 과정에서 얻은 교훈이 무엇인지 + 작성해주세요. + value: >- + 1. 기술적 도전 과제가 있었던 프로젝트를 예로 들어 설명해주세요. 해당 도전 과제를 어떻게 + 해결했는지, 또는 해결하지 못했는지와 그 이유를 포함하여, 그 과정에서 얻은 교훈이 무엇인지 + 작성해주세요. + order: 2 + urls: null + isFile: null + optional: false + placeholder: null + charLimit: 1000 + - id: 326 + question: >- + 2. 개발 과정에서의 문제 해결을 위해 다른 파트 혹은 챕터의 팀원와 협력한 경험이 있다면 + 설명해주세요. 협력의 과정과 그 결과, 그리고 협력에서 얻은 교훈을 중심으로 작성해주세요. + value: >- + 2. 개발 과정에서의 문제 해결을 위해 다른 파트 혹은 챕터의 팀원와 협력한 경험이 있다면 + 설명해주세요. 협력의 과정과 그 결과, 그리고 협력에서 얻은 교훈을 중심으로 작성해주세요. + order: 3 + urls: null + isFile: null + optional: false + placeholder: null + charLimit: 700 + - id: 327 + question: 3. 자신을 드러낼 수 있는 개인 블로그나 노션, Github 링크 등을 자유롭게 입력해주세요. + value: 3. 자신을 드러낼 수 있는 개인 블로그나 노션, Github 링크 등을 자유롭게 입력해주세요. + order: 4 + urls: null + isFile: null + optional: false + placeholder: null + charLimit: 500 + - id: 328 + question: >- + 4. 희망하는 팀을 순서대로 적어주세요. + + + makers에서는 예비 maker께서 원하는 가치를 실현하는 걸 돕고자 희망하는 팀을 지원받고 + 있어요. 각 팀이 만들어가는 가치를 다시 한번 확인해주시고 팀을 지원해주세요. + + -Playground팀 + -APP팀 + -공식홈페이지팀 + -Crew팀 + -플랫폼팀 + + <플레이스홀더>ex. 1순위 000팀, 2순위 000팀, 3순위 000팀, 4순위 000팀, + 5순위 000팀 + value: >- + 4. 희망하는 팀을 순서대로 적어주세요. + + + makers에서는 예비 maker께서 원하는 가치를 실현하는 걸 돕고자 희망하는 팀을 지원받고 + 있어요. 각 팀이 만들어가는 가치를 다시 한번 확인해주시고 팀을 지원해주세요. + + -Playground팀 + -APP팀 + -공식홈페이지팀 + -Crew팀 + -플랫폼팀 + order: 5 + urls: null + isFile: null + optional: false + placeholder: ex. 1순위 000팀, 2순위 000팀, 3순위 000팀, 4순위 000팀, 5순위 000팀 + charLimit: 100 + - part: 안드로이드 + recruitingQuestionTypeId: 4 + questions: + - id: 329 + question: |- + 안드로이드 개발자 포지션에 지원해주셔서 감사해요 😄 + 안드로이드 개발자 포지션은 두 가지의 질문과 자유 형식의 포트폴리오를 받고 있어요. + value: |- + 안드로이드 개발자 포지션에 지원해주셔서 감사해요 😄 + 안드로이드 개발자 포지션은 두 가지의 질문과 자유 형식의 포트폴리오를 받고 있어요. + order: 1 + urls: null + isFile: null + optional: false + placeholder: null + charLimit: null + - id: 330 + question: >- + 1. 문제를 해결하실 때 스스로 문제를 해결하시나요, 다른 사람들과 같이 문제를 해결하시나요? + 지원자님이 겪은 문제해결과정을 위의 질문에 기반하여 답해주세요. + value: >- + 1. 문제를 해결하실 때 스스로 문제를 해결하시나요, 다른 사람들과 같이 문제를 해결하시나요? + 지원자님이 겪은 문제해결과정을 위의 질문에 기반하여 답해주세요. + order: 2 + urls: null + isFile: null + optional: false + placeholder: null + charLimit: 600 + - id: 331 + question: >- + 2. 희망하는 팀에 따라, 다음 두 가지 (2-1, 2-2) 질문 중 하나를 선택해서 + 답변해주세요. + + + 2-1. [프로덕트 팀 지원자 전용] 개발에서 품질과 속도는 상충관계에 있습니다. 지원자님은 어느 + 부분에 더 가치를 두시고 계신가요? 경험에 기반하여 서술해주세요. + + 2-2. [플랫폼 팀 지원자 전용] 본인이 개발한 서비스의 기술적인 문제를 정의하고 이를 해결한 + 전 과정과 이를 통해 본인이 생각하는 팀에 기여한 성과에 대해 서술해주세요. + value: >- + 2. 희망하는 팀에 따라, 다음 두 가지 (2-1, 2-2) 질문 중 하나를 선택해서 + 답변해주세요. + + + 2-1. [프로덕트 팀 지원자 전용] 개발에서 품질과 속도는 상충관계에 있습니다. 지원자님은 어느 + 부분에 더 가치를 두시고 계신가요? 경험에 기반하여 서술해주세요. + + 2-2. [플랫폼 팀 지원자 전용] 본인이 개발한 서비스의 기술적인 문제를 정의하고 이를 해결한 + 전 과정과 이를 통해 본인이 생각하는 팀에 기여한 성과에 대해 서술해주세요. + order: 3 + urls: null + isFile: null + optional: false + placeholder: null + charLimit: 700 + - id: 332 + question: >- + 4. 깃허브 프로필 링크를 필수적으로 첨부해주시고 본인을 잘 소개할 수 있는 자료의 링크가 있다면 + 같이 첨부해주세요. + value: >- + 4. 깃허브 프로필 링크를 필수적으로 첨부해주시고 본인을 잘 소개할 수 있는 자료의 링크가 있다면 + 같이 첨부해주세요. + order: 4 + urls: null + isFile: null + optional: false + placeholder: null + charLimit: 500 + - id: 337 + question: >- + 5. 희망하는 팀을 순서대로 적어주세요. + + + makers에서는 예비 maker께서 원하는 가치를 실현하는 걸 돕고자 희망하는 팀을 지원받고 + 있어요. 각 팀이 만들어가는 가치를 다시 한번 확인해주시고 팀을 지원해주세요. + + -APP팀 + -플랫폼팀 + + <플레이스홀더>ex. 1순위 000팀, 2순위 000팀 + value: >- + 5. 희망하는 팀을 순서대로 적어주세요. + + + makers에서는 예비 maker께서 원하는 가치를 실현하는 걸 돕고자 희망하는 팀을 지원받고 + 있어요. 각 팀이 만들어가는 가치를 다시 한번 확인해주시고 팀을 지원해주세요. + + -APP팀 + -플랫폼팀 + order: 5 + urls: null + isFile: null + optional: false + placeholder: ex. 1순위 000팀, 2순위 000팀 + charLimit: 100 + - part: iOS + recruitingQuestionTypeId: 5 + questions: + - id: 333 + question: |- + iOS 개발자 포지션에 지원해주셔서 감사해요 😄 + iOS 개발자 포지션은 자유 양식의 자기소개서를 받고 있어요. + value: |- + iOS 개발자 포지션에 지원해주셔서 감사해요 😄 + iOS 개발자 포지션은 자유 양식의 자기소개서를 받고 있어요. + order: 1 + urls: null + isFile: null + optional: false + placeholder: null + charLimit: null + - id: 334 + question: >- + 1. 본인을 소개할 수 있는 이력서 또는 포트폴리오를 자유로운 양식으로 제출해 주세요. + + (PDF 형식을 권장 드려요)<파일> + + + 준비된 서류가 없다면 SOPT에서 iOS 개발자로 참여한 프로젝트에 대한 간단한 설명, 본인의 + 역할, 기술적 도전 및 고민에 대해 적어서 제출해도 좋아요! + value: >- + 1. 본인을 소개할 수 있는 이력서 또는 포트폴리오를 자유로운 양식으로 제출해 주세요. + + (PDF 형식을 권장 드려요) + + + 준비된 서류가 없다면 SOPT에서 iOS 개발자로 참여한 프로젝트에 대한 간단한 설명, 본인의 + 역할, 기술적 도전 및 고민에 대해 적어서 제출해도 좋아요! + order: 2 + urls: null + isFile: true + optional: false + placeholder: null + charLimit: 1000 + - id: 335 + question: 2. Github 링크를 입력해 주세요. + value: 2. Github 링크를 입력해 주세요. + order: 3 + urls: null + isFile: null + optional: false + placeholder: null + charLimit: 100 + - id: 336 + question: >- + 3. 희망하는 팀을 순서대로 적어주세요. + + + makers에서는 예비 maker께서 원하는 가치를 실현하는 걸 돕고자 희망하는 팀을 지원받고 + 있어요. 각 팀이 만들어가는 가치를 다시 한번 확인해주시고 팀을 지원해주세요. + + -APP팀 + -플랫폼팀 + + <플레이스홀더>ex. 1순위 000팀, 2순위 000팀 + value: >- + 3. 희망하는 팀을 순서대로 적어주세요. + + + makers에서는 예비 maker께서 원하는 가치를 실현하는 걸 돕고자 희망하는 팀을 지원받고 + 있어요. 각 팀이 만들어가는 가치를 다시 한번 확인해주시고 팀을 지원해주세요. + + -APP팀 + -플랫폼팀 + order: 4 + urls: null + isFile: null + optional: false + placeholder: ex. 1순위 000팀, 2순위 000팀 + charLimit: 100 + - part: 웹 + recruitingQuestionTypeId: 6 + questions: + - id: 338 + question: |- + 웹 프론트엔드 개발자 포지션에 지원해주셔서 감사해요 😁 + 웹 프론트엔드 개발자 포지션은 두 가지의 질문과 자유 형식의 포트폴리오를 받고 있어요. + value: |- + 웹 프론트엔드 개발자 포지션에 지원해주셔서 감사해요 😁 + 웹 프론트엔드 개발자 포지션은 두 가지의 질문과 자유 형식의 포트폴리오를 받고 있어요. + order: 1 + urls: null + isFile: null + optional: false + placeholder: null + charLimit: null + - id: 339 + question: >- + 1. 지금까지 개발을 해오면서 만난 문제 중, 해결하기 가장 어려웠던 기술적인 문제는 + 무엇이었나요? 그때의 문제 상황을 설명해 주시고, 만약 해결했다면 어떻게 해결했는지 이야기해 + 주세요. 해결하지 못했더라도, 어떻게 해결하면 좋을 것 같은지에 대해 이야기해 주세요. + value: >- + 1. 지금까지 개발을 해오면서 만난 문제 중, 해결하기 가장 어려웠던 기술적인 문제는 + 무엇이었나요? 그때의 문제 상황을 설명해 주시고, 만약 해결했다면 어떻게 해결했는지 이야기해 + 주세요. 해결하지 못했더라도, 어떻게 해결하면 좋을 것 같은지에 대해 이야기해 주세요. + order: 2 + urls: null + isFile: null + optional: false + placeholder: null + charLimit: 700 + - id: 340 + question: 2. 코드 리뷰 등 타인이 작성한 코드를 파악하고 개선해 본 경험에 대해 이야기해 주세요. + value: 2. 코드 리뷰 등 타인이 작성한 코드를 파악하고 개선해 본 경험에 대해 이야기해 주세요. + order: 3 + urls: null + isFile: null + optional: false + placeholder: null + charLimit: 500 + - id: 341 + question: |- + 3. 자유롭게 깃허브(*필수), 블로그 등의 링크를 첨부해 주세요. + (1, 2번 문항과 관련된 링크를 첨부해주셔도 좋아요.) + value: |- + 3. 자유롭게 깃허브(*필수), 블로그 등의 링크를 첨부해 주세요. + (1, 2번 문항과 관련된 링크를 첨부해주셔도 좋아요.) + order: 4 + urls: null + isFile: null + optional: false + placeholder: null + charLimit: 500 + - id: 351 + question: >- + 4. 희망하는 팀을 순서대로 적어주세요. + + + makers에서는 예비 maker께서 원하는 가치를 실현하는 걸 돕고자 희망하는 팀을 지원받고 + 있어요. 각 팀이 만들어가는 가치를 다시 한번 확인해주시고 팀을 지원해주세요. + + -Playground팀 + -공식홈페이지팀 + -Crew팀 + -플랫폼팀 + + <플레이스홀더>ex. 1순위 000팀, 2순위 000팀, 3순위 000팀, 4순위 000팀 + value: >- + 4. 희망하는 팀을 순서대로 적어주세요. + + + makers에서는 예비 maker께서 원하는 가치를 실현하는 걸 돕고자 희망하는 팀을 지원받고 + 있어요. 각 팀이 만들어가는 가치를 다시 한번 확인해주시고 팀을 지원해주세요. + + -Playground팀 + -공식홈페이지팀 + -Crew팀 + -플랫폼팀 + order: 5 + urls: null + isFile: null + optional: false + placeholder: ex. 1순위 000팀, 2순위 000팀, 3순위 000팀, 4순위 000팀 + charLimit: 100 + questionTypes: + - id: 3 + type: design + typeKr: 디자인 + typeLegacy: null + - id: 4 + type: android + typeKr: 안드로이드 + typeLegacy: null + - id: 5 + type: ios + typeKr: iOS + typeLegacy: null + - id: 6 + type: web + typeKr: 웹 + typeLegacy: null + - id: 7 + type: server + typeKr: 서버 + typeLegacy: null + - id: 2 + type: plan + typeKr: PM + typeLegacy: null + - id: 8 + type: research + typeKr: 리서치 + typeLegacy: null + /recruiting-answer/store: + get: + tags: + - default + summary: 임시저장 지원서 조회 + security: + - bearerAuth: [] + responses: + '200': + description: OK + headers: + x-powered-by: + schema: + type: string + example: Express + access-control-allow-origin: + schema: + type: string + example: '*' + content-type: + schema: + type: string + example: application/json; charset=utf-8 + content-length: + schema: + type: integer + example: '12919' + etag: + schema: + type: string + example: W/"3277-l3WSfGRS8UqMSo1U5HbKpui73zo" + date: + schema: + type: string + example: Wed, 25 Sep 2024 16:05:33 GMT + connection: + schema: + type: string + example: keep-alive + keep-alive: + schema: + type: string + example: timeout=5 + content: + application/json: + schema: + type: object + example: + err: false + isSubmit: true + applicant: + id: 151 + group: OB + season: 35 + mostRecentSeason: 34 + part: 서버 + phone: 010-9977-9012 + email: limchangi@naver.com + name: 최영철 + address: 서울 노원구 석계로13길 11-9 + gender: 남자 + birthday: 1999/10/15 + college: 광운대학교 + major: 전자통신공학과 + univYear: 4 + leaveAbsence: false + willAppjam: false + knownPath: null + pic: >- + https://firebasestorage.googleapis.com/v0/b/sopt-recruiting-dev.appspot.com/o/recruiting%2Fapplicants%2F%C3%A1%C2%84%C2%8B%C3%A1%C2%85%C2%A7%C3%A1%C2%84%C2%80%C3%A1%C2%85%C2%AF%C3%A1%C2%86%C2%AB%C3%A1%C2%84%C2%89%C3%A1%C2%85%C2%A1%C3%A1%C2%84%C2%8C%C3%A1%C2%85%C2%B5%C3%A1%C2%86%C2%AB.jpegqNzzmlm?alt=media + nearestStation: 광운대역, 석계역 + applicationPass: true + finalPass: true + isDeleted: false + isForTest: false + createdAt: '2024-07-31T02:15:15.652Z' + updatedAt: '2024-08-20T10:38:49.377Z' + submit: true + commonQuestions: + - id: 310 + group: OB + season: 35 + recruitingQuestionTypeId: 1 + order: 1 + question: |- + 1. SOPT에서 어떤 활동을 하셨는지 작성해주세요. + <플레이스홀더>여러 활동을 하신 경우 다 적어주시면 좋아요 :) + - 33기 : 기획파트, 앱잼 OOO Team Leader + - 32기 : iOS파트, 운영팀 + charLimit: 100 + ignoreCharLimit: false + isDeleted: false + isForTest: false + createdAt: '2024-07-31T00:55:02.961Z' + updatedAt: '2024-07-31T00:56:41.720Z' + answer: + id: 2485 + recruitingApplicantId: 151 + recruitingQuestionId: 310 + answer: >- + 34기 : Server 파트, 도커 스터디, 디자인패턴 스터디, 앱잼 유니보이스 서버 파트 + (Lead) + isDeleted: false + isForTest: false + createdAt: '2024-07-31T02:31:43.132Z' + updatedAt: '2024-08-07T13:36:52.301Z' + file: null + fileName: null + - id: 311 + group: OB + season: 35 + recruitingQuestionTypeId: 1 + order: 2 + question: 2. makers에 지원하신 동기는 무엇인가요? + charLimit: 500 + ignoreCharLimit: false + isDeleted: false + isForTest: false + createdAt: '2024-07-31T00:55:52.805Z' + updatedAt: '2024-07-31T00:56:39.550Z' + answer: + id: 2486 + recruitingApplicantId: 151 + recruitingQuestionId: 311 + answer: >- + 저는 극 E와 N 성향을 가지고 있어 도와줄 수 있는 일 혹은 알고 있는 정보와 지식을 다른 + 사람들에게 공유할 때 행복을 느끼며 더욱 무언가를 배우고 싶다는 열정에 대한 동기를 얻습니다. + + IT 서비스 개발을 하며 손쉽게 접할 수 있는 하나의 서비스를 통해 많은 사람들에게 긍정적인 영향을 + 줄 수 있다는 점이 너무 매력적이었고 꼭 실사용자를 가진 서비스를 운영해 보고 싶다는 꿈을 + 꾸었습니다. + + + 그런 와중 서버 파트 1차 세미나 시간에 Makers 팀장님께서 실시간으로 발생한 버그를 수정하고 + 해결하는 모습을 보았습니다. 저의 꿈을 직접 눈으로 보니 가슴이 쿵쿵 뛰었고 이후로 Makers에 + 대해 더욱 관심을 가지게 되었고 같은 목표를 향해 같이 고민하며 열정적으로 다 같이 달려가며 + 성장하는 모습들이 너무 부러웠습니다. + + 그래서 저 또한 뜨거운 열정과 책임감을 가진 Makers분들과 함께 지식을 공유하며 성장하고 싶어 + 지원을 하게 되었습니다. + isDeleted: false + isForTest: false + createdAt: '2024-07-31T02:31:43.136Z' + updatedAt: '2024-08-07T13:36:52.306Z' + file: null + fileName: null + - id: 312 + group: OB + season: 35 + recruitingQuestionTypeId: 1 + order: 3 + question: 3. makers에서 본인의 역량을 어떻게 활용해서 기여하고 싶은지 간단하게 서술해주세요. + charLimit: 300 + ignoreCharLimit: false + isDeleted: false + isForTest: false + createdAt: '2024-07-31T00:56:23.258Z' + updatedAt: '2024-07-31T00:56:40.202Z' + answer: + id: 2487 + recruitingApplicantId: 151 + recruitingQuestionId: 312 + answer: >- + 저는 2년간 여러 창업 동아리에서 Node 계열 프레임워크를 사용하여 풀스택 개발을 한 경험이 + 있습니다. + + 주로 NestJS를 사용하여 백엔드 개발을 하였고 짧은 시간이지만 3개의 실사용자를 가진 서비스를 + 운영해 보았습니다. 또한 선착순 이벤트를 진행하는 과정에서 발생한 동시성 이슈를 깊이 고민하고 해결한 + 경험이 있습니다. + + 위와 같은 저의 NestJS 개발 역량을 활용하여, 현재 유일하게 NestJS로 개발되어 운영 중인 + ‘공식 홈페이지 팀’을 Spring으로 마이그레이션 하는데 기여하고 싶습니다. + isDeleted: false + isForTest: false + createdAt: '2024-07-31T02:31:43.141Z' + updatedAt: '2024-08-07T13:36:52.310Z' + file: null + fileName: null + partQuestions: + - id: 324 + group: OB + season: 35 + recruitingQuestionTypeId: 7 + order: 1 + question: |- + 백엔드 개발자 포지션에 지원해주셔서 감사해요 😄 + 백엔드 개발자 포지션은 두 가지의 질문과 자유 형식의 포트폴리오를 받고 있어요. + charLimit: null + ignoreCharLimit: false + isDeleted: false + isForTest: false + createdAt: '2024-07-31T01:13:20.923Z' + updatedAt: '2024-07-31T01:34:03.592Z' + answer: + id: 6853 + recruitingApplicantId: 151 + recruitingQuestionId: 324 + answer: null + isDeleted: false + isForTest: false + createdAt: '2024-08-07T13:36:52.314Z' + updatedAt: '2024-08-07T13:36:52.314Z' + file: null + fileName: null + - id: 325 + group: OB + season: 35 + recruitingQuestionTypeId: 7 + order: 2 + question: >- + 1. 기술적 도전 과제가 있었던 프로젝트를 예로 들어 설명해주세요. 해당 도전 과제를 어떻게 해결했는지, + 또는 해결하지 못했는지와 그 이유를 포함하여, 그 과정에서 얻은 교훈이 무엇인지 작성해주세요. + charLimit: 1000 + ignoreCharLimit: false + isDeleted: false + isForTest: false + createdAt: '2024-07-31T01:13:53.441Z' + updatedAt: '2024-07-31T01:15:33.475Z' + answer: + id: 2488 + recruitingApplicantId: 151 + recruitingQuestionId: 325 + answer: >- + 저는 마감 시간대에 떨이 상품을 판매하는 점주들과 마감 할인 상품 정보를 필요로 하는 고객들을 위한 + 유통 서비스 플랫폼을 개발하며 기술적 도전을 경험했습니다. + + + 당시 인천대학교와 협약을 맺어 해당 플랫폼을 운영하기 위해 저는 1000명 이상의 동시 사용자들의 + 주문 요청에 대한 동시성을 제어하는 역할을 맡았습니다. 푸시 알림을 통해 고객들에게 마감 할인 상품에 + 대한 정보가 주어지면 특정 시간대, 특정 메뉴에 많은 사용자의 트래픽이 몰려 DB의 count 값에 + 자주 접근하며 조회/수정이 되는 상황이었습니다. 동시성 제어를 하지 않고 일반적인 비즈니스 로직을 + 수행하게 되면 데이터 무결성이 보장되지 않아 사용자들이 유효하지 않은 재고를 기반으로 서비스를 + 이용하게 되는 문제가 발생할 수 있었습니다. + + + 우선 여러 명의 요청을 동시에 받는 상황을 시뮬레이션 하기 위해 Jemter라는 부하 테스트 툴을 + 사용했으며 처음에는 재고가 부족한 상황에 요청이 들어올 경우 단순히 트랜잭션의 Rollback을 통해 + 무결성이 지켜질 것이라고 생각했지만 10명의 동시 요청조차 제어가 되지 않았습니다. + + 또한 DB 접근 시 다양한 Lock과 격리 수준을 적용하여 테스트해 보았지만 각각의 장단점이 명확해서 + 서버의 안전성, 데이터 무결성 보장, 준수한 응답속도, 선착순 요청 순서 보장을 모두 만족하지 + 못했습니다. + + + 그로 인해 Redis, RabbitMQ, Kafka와 같은 외부 인프라를 활용하여 문제를 해결하고자 + 했습니다. + + 하지만 최고의 효율을 가지더라도 과도한 서버 비용 및 정해진 개발 기간과 러닝 커브를 고려하여 + Serverless Redis를 사용해서 분산락을 구현하여 동시성을 제어하였습니다. + + + 특정한 요청에 단순한 응답 값 만을 약속하는 API가 아닌 실사용자들 및 기획 등 다양한 비즈니스적 + 요소를 고려하며 개발하는 과정을 통해 기술 스택 및 이슈 해결에 정해진 최고의 정답이 있는 것이 아닌 + 각 프로젝트의 상황에 맞게 유동적이며 효율적으로 사용해야 함을 배울 수 있었습니다. + isDeleted: false + isForTest: false + createdAt: '2024-07-31T02:31:43.145Z' + updatedAt: '2024-08-07T13:36:52.320Z' + file: null + fileName: null + - id: 326 + group: OB + season: 35 + recruitingQuestionTypeId: 7 + order: 3 + question: >- + 2. 개발 과정에서의 문제 해결을 위해 다른 파트 혹은 챕터의 팀원와 협력한 경험이 있다면 설명해주세요. + 협력의 과정과 그 결과, 그리고 협력에서 얻은 교훈을 중심으로 작성해주세요. + charLimit: 700 + ignoreCharLimit: false + isDeleted: false + isForTest: false + createdAt: '2024-07-31T01:15:33.928Z' + updatedAt: '2024-07-31T01:55:26.866Z' + answer: + id: 2489 + recruitingApplicantId: 151 + recruitingQuestionId: 326 + answer: >- + 저는 실사용자를 가진 서비스를 운영해 보기 위해 주로 플랫폼 서비스의 백엔드 개발을 담당했습니다. + 그런 과정 중, 일주일간 60만 원이라는 예상치 못한 과금 문제로 팀 전체가 긴급 상황에 + 직면했습니다. + + + 이후 회의에서 프론트엔드 파트와 협력하여 문제의 원인을 찾기 위해 노력하였고 근거 있는 원인은 찾지 + 못했지만 개선 사항을 토대로 추측해 본 결과 프론트엔드 파트에서 재귀적인 API 호출로 인해 과도한 + 트래픽이 발생할 수 있다는 사실을 발견했습니다. 또한 백엔드에서는 API 요청을 제한 없이 처리하고 + 있었고, 이는 인프라에 과부하를 초래하고 있었습니다. + + + 이 문제를 해결하기 위해 API 호출 로직을 수정하고, 호출 제한을 설정하여 무분별한 요청을 + 차단했습니다. 또한 확실한 근거 없이 이슈를 해결하며 서비스를 운영한다는 것은 불안하다고 판단하여 + Google analytics 및 Aws와 Slack을 활용해 로그 알람 시스템을 구축했습니다. + + + 이러한 협력 과정에서 팀원들과의 꼼꼼한 코드 리뷰, 커뮤니케이션을 통한 전체 시스템 파악, 로그의 + 중요성을 배웠습니다. 또한 팀워크를 통해 문제를 해결하며 개인의 성장뿐만 아니라 팀 전체의 역량이 + 함께 향상됨을 경험했습니다. 비록 서비스는 결국 중단되었지만, 협력을 통해 얻은 값진 경험은 앞으로 + 어떤 도전과 문제에 직면하더라도 팀과 함께라면 해결할 수 있다는 자신감을 심어주었습니다. + isDeleted: false + isForTest: false + createdAt: '2024-07-31T02:31:43.150Z' + updatedAt: '2024-08-07T13:36:52.324Z' + file: null + fileName: null + - id: 327 + group: OB + season: 35 + recruitingQuestionTypeId: 7 + order: 4 + question: 3. 자신을 드러낼 수 있는 개인 블로그나 노션, Github 링크 등을 자유롭게 입력해주세요. + charLimit: 500 + ignoreCharLimit: false + isDeleted: false + isForTest: false + createdAt: '2024-07-31T01:15:55.217Z' + updatedAt: '2024-07-31T01:27:52.415Z' + answer: + id: 2490 + recruitingApplicantId: 151 + recruitingQuestionId: 327 + answer: >- + https://github.com/softmoca + + → 깃허브 링크입니다.(softmoca) + + + https://moca9012.tistory.com/ + + → 개발 첫 시작 부터 작성을 했던 습작인 개발 블로그입니다. + + + https://softmoca.tistory.com/ + + → 2024년 부터 새롭게 정리하고 현재 운영중인 개발 블로그입니다. + + + https://breezy-way-675.notion.site/Makers-Profolio-511930754cf34e28add40054190f5e35 + + → 메이커스 지원 포토폴리오 노션 링크입니다. + isDeleted: false + isForTest: false + createdAt: '2024-07-31T02:31:43.156Z' + updatedAt: '2024-08-07T13:36:52.328Z' + file: null + fileName: null + - id: 328 + group: OB + season: 35 + recruitingQuestionTypeId: 7 + order: 5 + question: >- + 4. 희망하는 팀을 순서대로 적어주세요. + + + makers에서는 예비 maker께서 원하는 가치를 실현하는 걸 돕고자 희망하는 팀을 지원받고 있어요. + 각 팀이 만들어가는 가치를 다시 한번 확인해주시고 팀을 지원해주세요. + + -Playground팀 + -APP팀 + -공식홈페이지팀 + -Crew팀 + -플랫폼팀 + + <플레이스홀더>ex. 1순위 000팀, 2순위 000팀, 3순위 000팀, 4순위 000팀, 5순위 + 000팀 + charLimit: 100 + ignoreCharLimit: false + isDeleted: false + isForTest: false + createdAt: '2024-07-31T01:16:49.884Z' + updatedAt: '2024-08-06T17:46:20.524Z' + answer: + id: 2491 + recruitingApplicantId: 151 + recruitingQuestionId: 328 + answer: |- + 1순위 - 공식 홈페이지 팀 + 2순위 - Crew팀 + 3순위 - 플랫폼팀 + 4순위 - Playground팀 + 5순위 -APP팀 + isDeleted: false + isForTest: false + createdAt: '2024-07-31T02:31:43.162Z' + updatedAt: '2024-08-07T13:36:52.332Z' + file: null + fileName: null + '401': + description: Unauthorized + headers: + X-Powered-By: + schema: + type: string + example: Express + Access-Control-Allow-Origin: + schema: + type: string + example: '*' + Content-Type: + schema: + type: string + example: application/json; charset=utf-8 + Etag: + schema: + type: string + example: W/"2a-KF3ANmWs7Wh/KFJBeKwSTgv9/EU" + Function-Execution-Id: + schema: + type: string + example: 8pwald4agjzw + X-Cloud-Trace-Context: + schema: + type: string + example: 67efe3e1801549f3b38d9551a2fefc35 + Date: + schema: + type: string + example: Thu, 04 Jul 2024 08:12:27 GMT + Server: + schema: + type: string + example: Google Frontend + Content-Length: + schema: + type: integer + example: '42' + Alt-Svc: + schema: + type: string + example: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + content: + application/json: + schema: + type: object + example: + err: true + userMessage: Invalid token + post: + tags: + - default + summary: 지원서 임시저장 + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + picture: + type: string + format: binary + part: + type: string + description: string + example: 서버 + address: + type: string + description: string + example: home1 + birthday: + type: number + description: string + example: 2001.01.23 + college: + type: string + description: string + example: 대학 + gender: + type: string + description: string + example: male + knownPath: + type: string + description: string + example: 지인 추천 + leaveAbsence: + type: boolean + description: bool + example: 'false' + major: + type: string + description: string + example: 통계 + mostRecentSeason: + type: integer + description: int + example: '0' + univYear: + type: integer + description: int + example: '4' + nearestStation: + type: string + description: string + example: 사당역 + answers: + type: string + description: json + example: |- + [ + { + "recruitingQuestionId": 1, + "answer": "5그릇" + }, + { + "recruitingQuestionId": 2, + "answer": "4그릇" + } + ] + willAppjam: + type: boolean + description: bool + example: 'false' + file_28: + type: string + format: binary + file_29: + type: string + format: binary + security: + - bearerAuth: [] + responses: + '200': + description: OK + headers: + x-powered-by: + schema: + type: string + example: Express + access-control-allow-origin: + schema: + type: string + example: '*' + content-type: + schema: + type: string + example: application/json; charset=utf-8 + content-length: + schema: + type: integer + example: '1695' + etag: + schema: + type: string + example: W/"69f-97WE+qxoha5hC9Fql8QkB271zZ0" + date: + schema: + type: string + example: Thu, 04 Jul 2024 09:04:57 GMT + connection: + schema: + type: string + example: keep-alive + keep-alive: + schema: + type: string + example: timeout=5 + content: + application/json: + schema: + type: object + example: + err: false + applicant: + id: 151 + group: OB + season: 35 + mostRecentSeason: 34 + part: 서버 + phone: 010-9977-9012 + email: limchangi@naver.com + name: 최영철 + address: 서울 노원구 석계로13길 11-9 + gender: 남자 + birthday: 1999/10/15 + college: 광운대학교 + major: 전자통신공학과 + univYear: 4 + leaveAbsence: false + willAppjam: false + knownPath: null + pic: >- + https://firebasestorage.googleapis.com/v0/b/sopt-recruiting-dev.appspot.com/o/recruiting%2Fapplicants%2F%C3%A1%C2%84%C2%8B%C3%A1%C2%85%C2%A7%C3%A1%C2%84%C2%80%C3%A1%C2%85%C2%AF%C3%A1%C2%86%C2%AB%C3%A1%C2%84%C2%89%C3%A1%C2%85%C2%A1%C3%A1%C2%84%C2%8C%C3%A1%C2%85%C2%B5%C3%A1%C2%86%C2%AB.jpegqNzzmlm?alt=media + nearestStation: 광운대역, 석계역 + applicationPass: true + finalPass: true + isDeleted: false + isForTest: false + createdAt: '2024-07-31T02:15:15.652Z' + updatedAt: '2024-08-20T10:38:49.377Z' + submit: true + commonQuestions: + - id: 310 + group: OB + season: 35 + recruitingQuestionTypeId: 1 + order: 1 + question: |- + 1. SOPT에서 어떤 활동을 하셨는지 작성해주세요. + <플레이스홀더>여러 활동을 하신 경우 다 적어주시면 좋아요 :) + - 33기 : 기획파트, 앱잼 OOO Team Leader + - 32기 : iOS파트, 운영팀 + charLimit: 100 + ignoreCharLimit: false + isDeleted: false + isForTest: false + createdAt: '2024-07-31T00:55:02.961Z' + updatedAt: '2024-07-31T00:56:41.720Z' + answer: + id: 2485 + recruitingApplicantId: 151 + recruitingQuestionId: 310 + answer: >- + 34기 : Server 파트, 도커 스터디, 디자인패턴 스터디, 앱잼 유니보이스 서버 파트 + (Lead) + isDeleted: false + isForTest: false + createdAt: '2024-07-31T02:31:43.132Z' + updatedAt: '2024-08-07T13:36:52.301Z' + file: null + fileName: null + - id: 311 + group: OB + season: 35 + recruitingQuestionTypeId: 1 + order: 2 + question: 2. makers에 지원하신 동기는 무엇인가요? + charLimit: 500 + ignoreCharLimit: false + isDeleted: false + isForTest: false + createdAt: '2024-07-31T00:55:52.805Z' + updatedAt: '2024-07-31T00:56:39.550Z' + answer: + id: 2486 + recruitingApplicantId: 151 + recruitingQuestionId: 311 + answer: >- + 저는 극 E와 N 성향을 가지고 있어 도와줄 수 있는 일 혹은 알고 있는 정보와 지식을 다른 + 사람들에게 공유할 때 행복을 느끼며 더욱 무언가를 배우고 싶다는 열정에 대한 동기를 얻습니다. + + IT 서비스 개발을 하며 손쉽게 접할 수 있는 하나의 서비스를 통해 많은 사람들에게 긍정적인 영향을 + 줄 수 있다는 점이 너무 매력적이었고 꼭 실사용자를 가진 서비스를 운영해 보고 싶다는 꿈을 + 꾸었습니다. + + + 그런 와중 서버 파트 1차 세미나 시간에 Makers 팀장님께서 실시간으로 발생한 버그를 수정하고 + 해결하는 모습을 보았습니다. 저의 꿈을 직접 눈으로 보니 가슴이 쿵쿵 뛰었고 이후로 Makers에 + 대해 더욱 관심을 가지게 되었고 같은 목표를 향해 같이 고민하며 열정적으로 다 같이 달려가며 + 성장하는 모습들이 너무 부러웠습니다. + + 그래서 저 또한 뜨거운 열정과 책임감을 가진 Makers분들과 함께 지식을 공유하며 성장하고 싶어 + 지원을 하게 되었습니다. + isDeleted: false + isForTest: false + createdAt: '2024-07-31T02:31:43.136Z' + updatedAt: '2024-08-07T13:36:52.306Z' + file: null + fileName: null + - id: 312 + group: OB + season: 35 + recruitingQuestionTypeId: 1 + order: 3 + question: 3. makers에서 본인의 역량을 어떻게 활용해서 기여하고 싶은지 간단하게 서술해주세요. + charLimit: 300 + ignoreCharLimit: false + isDeleted: false + isForTest: false + createdAt: '2024-07-31T00:56:23.258Z' + updatedAt: '2024-07-31T00:56:40.202Z' + answer: + id: 2487 + recruitingApplicantId: 151 + recruitingQuestionId: 312 + answer: >- + 저는 2년간 여러 창업 동아리에서 Node 계열 프레임워크를 사용하여 풀스택 개발을 한 경험이 + 있습니다. + + 주로 NestJS를 사용하여 백엔드 개발을 하였고 짧은 시간이지만 3개의 실사용자를 가진 서비스를 + 운영해 보았습니다. 또한 선착순 이벤트를 진행하는 과정에서 발생한 동시성 이슈를 깊이 고민하고 해결한 + 경험이 있습니다. + + 위와 같은 저의 NestJS 개발 역량을 활용하여, 현재 유일하게 NestJS로 개발되어 운영 중인 + ‘공식 홈페이지 팀’을 Spring으로 마이그레이션 하는데 기여하고 싶습니다. + isDeleted: false + isForTest: false + createdAt: '2024-07-31T02:31:43.141Z' + updatedAt: '2024-08-07T13:36:52.310Z' + file: null + fileName: null + partQuestions: + - id: 324 + group: OB + season: 35 + recruitingQuestionTypeId: 7 + order: 1 + question: |- + 백엔드 개발자 포지션에 지원해주셔서 감사해요 😄 + 백엔드 개발자 포지션은 두 가지의 질문과 자유 형식의 포트폴리오를 받고 있어요. + charLimit: null + ignoreCharLimit: false + isDeleted: false + isForTest: false + createdAt: '2024-07-31T01:13:20.923Z' + updatedAt: '2024-07-31T01:34:03.592Z' + answer: + id: 6853 + recruitingApplicantId: 151 + recruitingQuestionId: 324 + answer: null + isDeleted: false + isForTest: false + createdAt: '2024-08-07T13:36:52.314Z' + updatedAt: '2024-08-07T13:36:52.314Z' + file: null + fileName: null + - id: 325 + group: OB + season: 35 + recruitingQuestionTypeId: 7 + order: 2 + question: >- + 1. 기술적 도전 과제가 있었던 프로젝트를 예로 들어 설명해주세요. 해당 도전 과제를 어떻게 해결했는지, + 또는 해결하지 못했는지와 그 이유를 포함하여, 그 과정에서 얻은 교훈이 무엇인지 작성해주세요. + charLimit: 1000 + ignoreCharLimit: false + isDeleted: false + isForTest: false + createdAt: '2024-07-31T01:13:53.441Z' + updatedAt: '2024-07-31T01:15:33.475Z' + answer: + id: 2488 + recruitingApplicantId: 151 + recruitingQuestionId: 325 + answer: >- + 저는 마감 시간대에 떨이 상품을 판매하는 점주들과 마감 할인 상품 정보를 필요로 하는 고객들을 위한 + 유통 서비스 플랫폼을 개발하며 기술적 도전을 경험했습니다. + + + 당시 인천대학교와 협약을 맺어 해당 플랫폼을 운영하기 위해 저는 1000명 이상의 동시 사용자들의 + 주문 요청에 대한 동시성을 제어하는 역할을 맡았습니다. 푸시 알림을 통해 고객들에게 마감 할인 상품에 + 대한 정보가 주어지면 특정 시간대, 특정 메뉴에 많은 사용자의 트래픽이 몰려 DB의 count 값에 + 자주 접근하며 조회/수정이 되는 상황이었습니다. 동시성 제어를 하지 않고 일반적인 비즈니스 로직을 + 수행하게 되면 데이터 무결성이 보장되지 않아 사용자들이 유효하지 않은 재고를 기반으로 서비스를 + 이용하게 되는 문제가 발생할 수 있었습니다. + + + 우선 여러 명의 요청을 동시에 받는 상황을 시뮬레이션 하기 위해 Jemter라는 부하 테스트 툴을 + 사용했으며 처음에는 재고가 부족한 상황에 요청이 들어올 경우 단순히 트랜잭션의 Rollback을 통해 + 무결성이 지켜질 것이라고 생각했지만 10명의 동시 요청조차 제어가 되지 않았습니다. + + 또한 DB 접근 시 다양한 Lock과 격리 수준을 적용하여 테스트해 보았지만 각각의 장단점이 명확해서 + 서버의 안전성, 데이터 무결성 보장, 준수한 응답속도, 선착순 요청 순서 보장을 모두 만족하지 + 못했습니다. + + + 그로 인해 Redis, RabbitMQ, Kafka와 같은 외부 인프라를 활용하여 문제를 해결하고자 + 했습니다. + + 하지만 최고의 효율을 가지더라도 과도한 서버 비용 및 정해진 개발 기간과 러닝 커브를 고려하여 + Serverless Redis를 사용해서 분산락을 구현하여 동시성을 제어하였습니다. + + + 특정한 요청에 단순한 응답 값 만을 약속하는 API가 아닌 실사용자들 및 기획 등 다양한 비즈니스적 + 요소를 고려하며 개발하는 과정을 통해 기술 스택 및 이슈 해결에 정해진 최고의 정답이 있는 것이 아닌 + 각 프로젝트의 상황에 맞게 유동적이며 효율적으로 사용해야 함을 배울 수 있었습니다. + isDeleted: false + isForTest: false + createdAt: '2024-07-31T02:31:43.145Z' + updatedAt: '2024-08-07T13:36:52.320Z' + file: null + fileName: null + - id: 326 + group: OB + season: 35 + recruitingQuestionTypeId: 7 + order: 3 + question: >- + 2. 개발 과정에서의 문제 해결을 위해 다른 파트 혹은 챕터의 팀원와 협력한 경험이 있다면 설명해주세요. + 협력의 과정과 그 결과, 그리고 협력에서 얻은 교훈을 중심으로 작성해주세요. + charLimit: 700 + ignoreCharLimit: false + isDeleted: false + isForTest: false + createdAt: '2024-07-31T01:15:33.928Z' + updatedAt: '2024-07-31T01:55:26.866Z' + answer: + id: 2489 + recruitingApplicantId: 151 + recruitingQuestionId: 326 + answer: >- + 저는 실사용자를 가진 서비스를 운영해 보기 위해 주로 플랫폼 서비스의 백엔드 개발을 담당했습니다. + 그런 과정 중, 일주일간 60만 원이라는 예상치 못한 과금 문제로 팀 전체가 긴급 상황에 + 직면했습니다. + + + 이후 회의에서 프론트엔드 파트와 협력하여 문제의 원인을 찾기 위해 노력하였고 근거 있는 원인은 찾지 + 못했지만 개선 사항을 토대로 추측해 본 결과 프론트엔드 파트에서 재귀적인 API 호출로 인해 과도한 + 트래픽이 발생할 수 있다는 사실을 발견했습니다. 또한 백엔드에서는 API 요청을 제한 없이 처리하고 + 있었고, 이는 인프라에 과부하를 초래하고 있었습니다. + + + 이 문제를 해결하기 위해 API 호출 로직을 수정하고, 호출 제한을 설정하여 무분별한 요청을 + 차단했습니다. 또한 확실한 근거 없이 이슈를 해결하며 서비스를 운영한다는 것은 불안하다고 판단하여 + Google analytics 및 Aws와 Slack을 활용해 로그 알람 시스템을 구축했습니다. + + + 이러한 협력 과정에서 팀원들과의 꼼꼼한 코드 리뷰, 커뮤니케이션을 통한 전체 시스템 파악, 로그의 + 중요성을 배웠습니다. 또한 팀워크를 통해 문제를 해결하며 개인의 성장뿐만 아니라 팀 전체의 역량이 + 함께 향상됨을 경험했습니다. 비록 서비스는 결국 중단되었지만, 협력을 통해 얻은 값진 경험은 앞으로 + 어떤 도전과 문제에 직면하더라도 팀과 함께라면 해결할 수 있다는 자신감을 심어주었습니다. + isDeleted: false + isForTest: false + createdAt: '2024-07-31T02:31:43.150Z' + updatedAt: '2024-08-07T13:36:52.324Z' + file: null + fileName: null + - id: 327 + group: OB + season: 35 + recruitingQuestionTypeId: 7 + order: 4 + question: 3. 자신을 드러낼 수 있는 개인 블로그나 노션, Github 링크 등을 자유롭게 입력해주세요. + charLimit: 500 + ignoreCharLimit: false + isDeleted: false + isForTest: false + createdAt: '2024-07-31T01:15:55.217Z' + updatedAt: '2024-07-31T01:27:52.415Z' + answer: + id: 2490 + recruitingApplicantId: 151 + recruitingQuestionId: 327 + answer: >- + https://github.com/softmoca + + → 깃허브 링크입니다.(softmoca) + + + https://moca9012.tistory.com/ + + → 개발 첫 시작 부터 작성을 했던 습작인 개발 블로그입니다. + + + https://softmoca.tistory.com/ + + → 2024년 부터 새롭게 정리하고 현재 운영중인 개발 블로그입니다. + + + https://breezy-way-675.notion.site/Makers-Profolio-511930754cf34e28add40054190f5e35 + + → 메이커스 지원 포토폴리오 노션 링크입니다. + isDeleted: false + isForTest: false + createdAt: '2024-07-31T02:31:43.156Z' + updatedAt: '2024-08-07T13:36:52.328Z' + file: null + fileName: null + - id: 328 + group: OB + season: 35 + recruitingQuestionTypeId: 7 + order: 5 + question: >- + 4. 희망하는 팀을 순서대로 적어주세요. + + + makers에서는 예비 maker께서 원하는 가치를 실현하는 걸 돕고자 희망하는 팀을 지원받고 있어요. + 각 팀이 만들어가는 가치를 다시 한번 확인해주시고 팀을 지원해주세요. + + -Playground팀 + -APP팀 + -공식홈페이지팀 + -Crew팀 + -플랫폼팀 + + <플레이스홀더>ex. 1순위 000팀, 2순위 000팀, 3순위 000팀, 4순위 000팀, 5순위 + 000팀 + charLimit: 100 + ignoreCharLimit: false + isDeleted: false + isForTest: false + createdAt: '2024-07-31T01:16:49.884Z' + updatedAt: '2024-08-06T17:46:20.524Z' + answer: + id: 2491 + recruitingApplicantId: 151 + recruitingQuestionId: 328 + answer: |- + 1순위 - 공식 홈페이지 팀 + 2순위 - Crew팀 + 3순위 - 플랫폼팀 + 4순위 - Playground팀 + 5순위 -APP팀 + isDeleted: false + isForTest: false + createdAt: '2024-07-31T02:31:43.162Z' + updatedAt: '2024-08-07T13:36:52.332Z' + file: null + fileName: null + '401': + description: Unauthorized + headers: + X-Powered-By: + schema: + type: string + example: Express + Access-Control-Allow-Origin: + schema: + type: string + example: '*' + Content-Type: + schema: + type: string + example: application/json; charset=utf-8 + Etag: + schema: + type: string + example: W/"2a-KF3ANmWs7Wh/KFJBeKwSTgv9/EU" + Function-Execution-Id: + schema: + type: string + example: qsvqlkwf15ee + X-Cloud-Trace-Context: + schema: + type: string + example: be3db374f515cfabacd9a8bbd7d14201;o=1 + Date: + schema: + type: string + example: Thu, 04 Jul 2024 09:21:44 GMT + Server: + schema: + type: string + example: Google Frontend + Content-Length: + schema: + type: integer + example: '42' + Alt-Svc: + schema: + type: string + example: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + content: + application/json: + schema: + type: object + example: + err: true + userMessage: Invalid token + /recruiting-answer: + post: + tags: + - default + summary: 지원서 제출 + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + picture: + type: string + format: binary + part: + type: string + description: string + example: 서버 + address: + type: string + description: string + example: home1 + birthday: + type: number + description: string + example: 2001.01.23 + college: + type: string + description: string + example: 대학 + gender: + type: string + description: string + example: male + knownPath: + type: string + description: string + example: 지인 추천 + leaveAbsence: + type: boolean + description: bool + example: 'false' + major: + type: string + description: string + example: 통계 + mostRecentSeason: + type: integer + description: string + example: '0' + univYear: + type: integer + description: int + example: '4' + nearestStation: + type: string + description: string + example: 사당역 + answers: + type: string + description: json + example: |- + [ + { + "recruitingQuestionId": 1, + "answer": "5그릇" + }, + { + "recruitingQuestionId": 2, + "answer": "4그릇" + } + ] + willAppjam: + type: boolean + description: bool + example: 'false' + season: + type: integer + example: '1' + group: + type: string + example: OB + pictureUrl: + type: string + security: + - bearerAuth: [] + responses: + '200': + description: OK + headers: + x-powered-by: + schema: + type: string + example: Express + access-control-allow-origin: + schema: + type: string + example: '*' + content-type: + schema: + type: string + example: application/json; charset=utf-8 + content-length: + schema: + type: integer + example: '1636' + etag: + schema: + type: string + example: W/"664-ymhk8jG6799tlJrlu1IhvpxHNns" + date: + schema: + type: string + example: Thu, 04 Jul 2024 09:18:54 GMT + connection: + schema: + type: string + example: keep-alive + keep-alive: + schema: + type: string + example: timeout=5 + content: + application/json: + schema: + type: object + example: + err: false + applicant: + id: 1 + group: OB + season: 1 + mostRecentSeason: null + part: 서버 + phone: 010-1234-1234 + email: limchangi@naver.com + name: 홍길동 + address: home1 + gender: male + birthday: 2001.01.23 + college: 대학 + major: 통계 + univYear: 4 + leaveAbsence: false + willAppjam: false + knownPath: 지인 추천 + pic: >- + https://firebasestorage.googleapis.com/v0/b/sopt-recruiting-dev.appspot.com/o/recruiting%2Fapplicants%2Fsample_license.pngMDQ88mk?alt=media + nearestStation: 사당역 + applicationPass: false + finalPass: false + isDeleted: false + isForTest: false + createdAt: '2024-07-04T08:10:58.204Z' + updatedAt: '2024-07-04T08:10:58.204Z' + submit: true + commonQuestions: + - id: 1 + group: OB + season: 1 + recruitingQuestionTypeId: 1 + order: 1 + question: 테스트~ + charLimit: 100 + ignoreCharLimit: false + isDeleted: false + isForTest: false + createdAt: '2024-07-04T08:45:45.304Z' + updatedAt: '2024-07-04T08:45:53.528Z' + answer: + id: 1 + recruitingApplicantId: 1 + recruitingQuestionId: 1 + answer: 5그릇 + isDeleted: false + isForTest: false + createdAt: '2024-07-04T09:04:57.197Z' + updatedAt: '2024-07-04T09:18:54.794Z' + partQuestions: + - id: 2 + group: OB + season: 1 + recruitingQuestionTypeId: 7 + order: 1 + question: 테스트~ + charLimit: null + ignoreCharLimit: false + isDeleted: false + isForTest: false + createdAt: '2024-07-04T08:45:55.102Z' + updatedAt: '2024-07-04T08:46:04.972Z' + answer: + id: 2 + recruitingApplicantId: 1 + recruitingQuestionId: 2 + answer: 4그릇 + isDeleted: false + isForTest: false + createdAt: '2024-07-04T09:04:57.208Z' + updatedAt: '2024-07-04T09:18:54.807Z' + '400': + description: Bad Request + headers: + X-Powered-By: + schema: + type: string + example: Express + Access-Control-Allow-Origin: + schema: + type: string + example: '*' + Content-Type: + schema: + type: string + example: application/json; charset=utf-8 + Etag: + schema: + type: string + example: W/"3d-QHnbS9suUIy0DJ9neVgqT8yzARc" + Function-Execution-Id: + schema: + type: string + example: qsvqn6casp63 + X-Cloud-Trace-Context: + schema: + type: string + example: 3beed715ac5e0926dff4876669cb9f98;o=1 + Date: + schema: + type: string + example: Thu, 04 Jul 2024 09:06:35 GMT + Server: + schema: + type: string + example: Google Frontend + Content-Length: + schema: + type: integer + example: '61' + Alt-Svc: + schema: + type: string + example: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + content: + application/json: + schema: + type: object + examples: + example-0: + summary: 지원서 제출 400 누락된 필수정보 + value: + err: true + message: 누락된 정보가 존재합니다. + example-1: + summary: 지원서 제출 401 토큰에러 + value: + err: true + message: 누락된 정보가 존재합니다. + /recruiting-applicant/satisfaction: + post: + tags: + - default + summary: 만족도 점수 + requestBody: + content: + application/json: + schema: + type: object + example: + satisfaction: 5 + security: + - bearerAuth: [] + responses: + '200': + description: OK + headers: + x-powered-by: + schema: + type: string + example: Express + access-control-allow-origin: + schema: + type: string + example: '*' + content-type: + schema: + type: string + example: application/json; charset=utf-8 + content-length: + schema: + type: integer + example: '13' + etag: + schema: + type: string + example: W/"d-jjcNx+nWrD8NVIcgaqLDc/Wqpbg" + date: + schema: + type: string + example: Sat, 03 Aug 2024 07:51:26 GMT + connection: + schema: + type: string + example: keep-alive + keep-alive: + schema: + type: string + example: timeout=5 + content: + application/json: + schema: + type: object + example: + err: false + '401': + description: Unauthorized + headers: + x-powered-by: + schema: + type: string + example: Express + access-control-allow-origin: + schema: + type: string + example: '*' + content-type: + schema: + type: string + example: application/json; charset=utf-8 + content-length: + schema: + type: integer + example: '42' + etag: + schema: + type: string + example: W/"2a-KF3ANmWs7Wh/KFJBeKwSTgv9/EU" + date: + schema: + type: string + example: Sat, 03 Aug 2024 07:53:49 GMT + connection: + schema: + type: string + example: keep-alive + keep-alive: + schema: + type: string + example: timeout=5 + content: + application/json: + schema: + type: object + example: + err: true + userMessage: Invalid token + /recruiting-auth/my: + get: + tags: + - default + summary: 마이페이지 + security: + - bearerAuth: [] + responses: + '200': + description: OK + headers: + x-powered-by: + schema: + type: string + example: Express + access-control-allow-origin: + schema: + type: string + example: '*' + content-type: + schema: + type: string + example: application/json; charset=utf-8 + content-length: + schema: + type: integer + example: '113' + etag: + schema: + type: string + example: W/"71-klnoPX+Bdyzf5c49SIKUypzVygY" + date: + schema: + type: string + example: Wed, 25 Sep 2024 15:50:03 GMT + connection: + schema: + type: string + example: keep-alive + keep-alive: + schema: + type: string + example: timeout=5 + content: + application/json: + schema: + type: object + example: + err: false + season: 35 + name: 임찬기 + part: iOS + submit: true + applicationPass: false + finalPass: false + '401': + description: Unauthorized + headers: + X-Powered-By: + schema: + type: string + example: Express + Access-Control-Allow-Origin: + schema: + type: string + example: '*' + Content-Type: + schema: + type: string + example: application/json; charset=utf-8 + Etag: + schema: + type: string + example: W/"2a-aDef0NyRbIen6G/sQC4A2NmpYyc" + Function-Execution-Id: + schema: + type: string + example: 7ajybwb42nat + X-Cloud-Trace-Context: + schema: + type: string + example: c0b4565e432b7158b318bfba005015ff;o=1 + Date: + schema: + type: string + example: Thu, 11 Jul 2024 13:40:37 GMT + Server: + schema: + type: string + example: Google Frontend + Content-Length: + schema: + type: integer + example: '42' + Alt-Svc: + schema: + type: string + example: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + content: + application/json: + schema: + type: object + example: + err: true + userMessage: Expired token + /recruiting-applicant/result/application: + get: + tags: + - default + summary: 마이페이지 서류 합격 확인 + security: + - bearerAuth: [] + responses: + '200': + description: OK + headers: + x-powered-by: + schema: + type: string + example: Express + access-control-allow-origin: + schema: + type: string + example: '*' + content-type: + schema: + type: string + example: application/json; charset=utf-8 + content-length: + schema: + type: integer + example: '172' + etag: + schema: + type: string + example: W/"ac-mne/ZKBF3y56K8b6ehnE0p39uBA" + date: + schema: + type: string + example: Thu, 11 Jul 2024 13:39:35 GMT + connection: + schema: + type: string + example: keep-alive + keep-alive: + schema: + type: string + example: timeout=5 + content: + application/json: + schema: + type: object + example: + err: false + season: 1 + seasonName: MAKERS Test + group: OB + name: 홍길동 + pass: false + interviewStart: '2024-06-20 15:27:45' + interviewEnd: '2024-06-20 15:27:45' + '401': + description: Unauthorized + headers: + x-powered-by: + schema: + type: string + example: Express + access-control-allow-origin: + schema: + type: string + example: '*' + content-type: + schema: + type: string + example: application/json; charset=utf-8 + content-length: + schema: + type: integer + example: '42' + etag: + schema: + type: string + example: W/"2a-KF3ANmWs7Wh/KFJBeKwSTgv9/EU" + date: + schema: + type: string + example: Thu, 11 Jul 2024 13:41:13 GMT + connection: + schema: + type: string + example: keep-alive + keep-alive: + schema: + type: string + example: timeout=5 + content: + application/json: + schema: + type: object + example: + err: true + userMessage: Invalid token + /recruiting-applicant/result/final: + get: + tags: + - default + summary: 마이페이지 최종 합격 확인 + security: + - bearerAuth: [] + responses: + '200': + description: OK + headers: + x-powered-by: + schema: + type: string + example: Express + access-control-allow-origin: + schema: + type: string + example: '*' + content-type: + schema: + type: string + example: application/json; charset=utf-8 + content-length: + schema: + type: integer + example: '96' + etag: + schema: + type: string + example: W/"60-vv0nSwQjCBywg+Uqd9Xx7pZs73k" + date: + schema: + type: string + example: Thu, 11 Jul 2024 13:42:17 GMT + connection: + schema: + type: string + example: keep-alive + keep-alive: + schema: + type: string + example: timeout=5 + content: + application/json: + schema: + type: object + example: + err: false + season: 1 + seasonName: MAKERS Test + group: OB + name: 홍길동 + pass: false + '401': + description: Unauthorized + headers: + x-powered-by: + schema: + type: string + example: Express + access-control-allow-origin: + schema: + type: string + example: '*' + content-type: + schema: + type: string + example: application/json; charset=utf-8 + content-length: + schema: + type: integer + example: '42' + etag: + schema: + type: string + example: W/"2a-KF3ANmWs7Wh/KFJBeKwSTgv9/EU" + date: + schema: + type: string + example: Thu, 11 Jul 2024 13:41:13 GMT + connection: + schema: + type: string + example: keep-alive + keep-alive: + schema: + type: string + example: timeout=5 + content: + application/json: + schema: + type: object + example: + err: true + userMessage: Invalid token diff --git a/src/__generated__/api-types/Auth.ts b/src/__generated__/api-types/Auth.ts new file mode 100644 index 00000000..900f9cc2 --- /dev/null +++ b/src/__generated__/api-types/Auth.ts @@ -0,0 +1,34 @@ +/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { SignUpEmailCreateData, SignUpEmailCreatePayload } from './data-contracts'; +import { ContentType, HttpClient, RequestParams } from './http-client'; + +export class Auth extends HttpClient { + /** + * No description + * + * @tags default + * @name SignUpEmailCreate + * @summary Admin Signup + * @request POST:/auth/sign-up/email + * @response `200` `SignUpEmailCreateData` OK + */ + signUpEmailCreate = (data: SignUpEmailCreatePayload, params: RequestParams = {}) => + this.request({ + path: `/auth/sign-up/email`, + method: 'POST', + body: data, + type: ContentType.Json, + format: 'json', + ...params, + }); +} diff --git a/src/__generated__/api-types/RecruitingAnswer.ts b/src/__generated__/api-types/RecruitingAnswer.ts new file mode 100644 index 00000000..9ae08e10 --- /dev/null +++ b/src/__generated__/api-types/RecruitingAnswer.ts @@ -0,0 +1,86 @@ +/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { + RecruitingAnswerCreateData, + RecruitingAnswerCreateError, + RecruitingAnswerCreatePayload, + StoreCreateData, + StoreCreateError, + StoreCreatePayload, + StoreListData, + StoreListError, +} from './data-contracts'; +import { ContentType, HttpClient, RequestParams } from './http-client'; + +export class RecruitingAnswer extends HttpClient { + /** + * No description + * + * @tags default + * @name StoreList + * @summary 임시저장 지원서 조회 + * @request GET:/recruiting-answer/store + * @secure + * @response `200` `StoreListData` OK + * @response `401` `object` Unauthorized + */ + storeList = (params: RequestParams = {}) => + this.request({ + path: `/recruiting-answer/store`, + method: 'GET', + secure: true, + format: 'json', + ...params, + }); + /** + * No description + * + * @tags default + * @name StoreCreate + * @summary 지원서 임시저장 + * @request POST:/recruiting-answer/store + * @secure + * @response `200` `StoreCreateData` OK + * @response `401` `object` Unauthorized + */ + storeCreate = (data: StoreCreatePayload, params: RequestParams = {}) => + this.request({ + path: `/recruiting-answer/store`, + method: 'POST', + body: data, + secure: true, + type: ContentType.FormData, + format: 'json', + ...params, + }); + /** + * No description + * + * @tags default + * @name RecruitingAnswerCreate + * @summary 지원서 제출 + * @request POST:/recruiting-answer + * @secure + * @response `200` `RecruitingAnswerCreateData` OK + * @response `400` `object` Bad Request + */ + recruitingAnswerCreate = (data: RecruitingAnswerCreatePayload, params: RequestParams = {}) => + this.request({ + path: `/recruiting-answer`, + method: 'POST', + body: data, + secure: true, + type: ContentType.FormData, + format: 'json', + ...params, + }); +} diff --git a/src/__generated__/api-types/RecruitingApplicant.ts b/src/__generated__/api-types/RecruitingApplicant.ts new file mode 100644 index 00000000..7cff2fd6 --- /dev/null +++ b/src/__generated__/api-types/RecruitingApplicant.ts @@ -0,0 +1,83 @@ +/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { + ResultApplicationListData, + ResultApplicationListError, + ResultFinalListData, + ResultFinalListError, + SatisfactionCreateData, + SatisfactionCreateError, + SatisfactionCreatePayload, +} from './data-contracts'; +import { ContentType, HttpClient, RequestParams } from './http-client'; + +export class RecruitingApplicant extends HttpClient { + /** + * No description + * + * @tags default + * @name SatisfactionCreate + * @summary 만족도 점수 + * @request POST:/recruiting-applicant/satisfaction + * @secure + * @response `200` `SatisfactionCreateData` OK + * @response `401` `object` Unauthorized + */ + satisfactionCreate = (data: SatisfactionCreatePayload, params: RequestParams = {}) => + this.request({ + path: `/recruiting-applicant/satisfaction`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }); + /** + * No description + * + * @tags default + * @name ResultApplicationList + * @summary 마이페이지 서류 합격 확인 + * @request GET:/recruiting-applicant/result/application + * @secure + * @response `200` `ResultApplicationListData` OK + * @response `401` `object` Unauthorized + */ + resultApplicationList = (params: RequestParams = {}) => + this.request({ + path: `/recruiting-applicant/result/application`, + method: 'GET', + secure: true, + format: 'json', + ...params, + }); + /** + * No description + * + * @tags default + * @name ResultFinalList + * @summary 마이페이지 최종 합격 확인 + * @request GET:/recruiting-applicant/result/final + * @secure + * @response `200` `ResultFinalListData` OK + * @response `401` `object` Unauthorized + */ + resultFinalList = (params: RequestParams = {}) => + this.request({ + path: `/recruiting-applicant/result/final`, + method: 'GET', + secure: true, + format: 'json', + ...params, + }); +} diff --git a/src/__generated__/api-types/RecruitingAuth.ts b/src/__generated__/api-types/RecruitingAuth.ts new file mode 100644 index 00000000..e6228edb --- /dev/null +++ b/src/__generated__/api-types/RecruitingAuth.ts @@ -0,0 +1,177 @@ +/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { + ChangePasswordCreateData, + ChangePasswordCreateError, + ChangePasswordCreatePayload, + CheckUserCreateData, + CheckUserCreateError, + CheckUserCreatePayload, + GetRecruitingAuthData, + GetRecruitingAuthError, + LoginCreateData, + LoginCreateError, + LoginCreatePayload, + SignupCreateData, + SignupCreateError, + SignupCreatePayload, + VerifyEmailCreateData, + VerifyEmailCreateError, + VerifyEmailCreatePayload, + VerifySendCreateData, + VerifySendCreatePayload, +} from './data-contracts'; +import { ContentType, HttpClient, RequestParams } from './http-client'; + +export class RecruitingAuth extends HttpClient { + /** + * No description + * + * @tags default + * @name VerifySendCreate + * @summary 이메일 인증 코드 전송 + * @request POST:/recruiting-auth/verify/send + * @response `200` `VerifySendCreateData` OK + */ + verifySendCreate = (data: VerifySendCreatePayload, params: RequestParams = {}) => + this.request({ + path: `/recruiting-auth/verify/send`, + method: 'POST', + body: data, + type: ContentType.Json, + format: 'json', + ...params, + }); + /** + * No description + * + * @tags default + * @name VerifyEmailCreate + * @summary 이메일 인증 코드 확인 + * @request POST:/recruiting-auth/verify/email + * @response `200` `VerifyEmailCreateData` OK + * @response `400` `object` Bad Request + */ + verifyEmailCreate = (data: VerifyEmailCreatePayload, params: RequestParams = {}) => + this.request({ + path: `/recruiting-auth/verify/email`, + method: 'POST', + body: data, + type: ContentType.Json, + format: 'json', + ...params, + }); + /** + * No description + * + * @tags default + * @name SignupCreate + * @summary 지원자 회원가입 + * @request POST:/recruiting-auth/signup + * @secure + * @response `200` `SignupCreateData` OK + * @response `400` `object` Bad Request + * @response `403` `object` Forbidden + */ + signupCreate = (data: SignupCreatePayload, params: RequestParams = {}) => + this.request({ + path: `/recruiting-auth/signup`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }); + /** + * No description + * + * @tags default + * @name CheckUserCreate + * @summary 유저 확인 (비밀번호 변경) + * @request POST:/recruiting-auth/check/user + * @secure + * @response `200` `CheckUserCreateData` OK + * @response `400` `object` Bad Request + */ + checkUserCreate = (data: CheckUserCreatePayload, params: RequestParams = {}) => + this.request({ + path: `/recruiting-auth/check/user`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }); + /** + * No description + * + * @tags default + * @name ChangePasswordCreate + * @summary 비밀번호 변경 + * @request POST:/recruiting-auth/change/password + * @secure + * @response `200` `ChangePasswordCreateData` OK + * @response `403` `object` Forbidden + */ + changePasswordCreate = (data: ChangePasswordCreatePayload, params: RequestParams = {}) => + this.request({ + path: `/recruiting-auth/change/password`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }); + /** + * No description + * + * @tags default + * @name LoginCreate + * @summary 로그인 + * @request POST:/recruiting-auth/login + * @secure + * @response `200` `LoginCreateData` OK + * @response `403` `object` Forbidden + */ + loginCreate = (data: LoginCreatePayload, params: RequestParams = {}) => + this.request({ + path: `/recruiting-auth/login`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }); + /** + * No description + * + * @tags default + * @name GetRecruitingAuth + * @summary 마이페이지 + * @request GET:/recruiting-auth/my + * @secure + * @response `200` `GetRecruitingAuthData` OK + * @response `401` `object` Unauthorized + */ + getRecruitingAuth = (params: RequestParams = {}) => + this.request({ + path: `/recruiting-auth/my`, + method: 'GET', + secure: true, + format: 'json', + ...params, + }); +} diff --git a/src/__generated__/api-types/RecruitingQuestion.ts b/src/__generated__/api-types/RecruitingQuestion.ts new file mode 100644 index 00000000..5b177b81 --- /dev/null +++ b/src/__generated__/api-types/RecruitingQuestion.ts @@ -0,0 +1,41 @@ +/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { ListListData } from './data-contracts'; +import { HttpClient, RequestParams } from './http-client'; + +export class RecruitingQuestion extends HttpClient { + /** + * No description + * + * @tags default + * @name ListList + * @summary 질문 리스트 조회 (From Admin) + * @request GET:/recruiting-question/list + * @response `200` `ListListData` OK + */ + listList = ( + query?: { + /** @example "52" */ + season?: number; + /** @example "OB" */ + group?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: `/recruiting-question/list`, + method: 'GET', + query: query, + format: 'json', + ...params, + }); +} diff --git a/src/__generated__/api-types/RecruitingSeason.ts b/src/__generated__/api-types/RecruitingSeason.ts new file mode 100644 index 00000000..c26eb5d5 --- /dev/null +++ b/src/__generated__/api-types/RecruitingSeason.ts @@ -0,0 +1,32 @@ +/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { LatestListData } from './data-contracts'; +import { HttpClient, RequestParams } from './http-client'; + +export class RecruitingSeason extends HttpClient { + /** + * No description + * + * @tags default + * @name LatestList + * @summary 최신 기수 정보 조회 (From Admin) + * @request GET:/recruiting-season/latest + * @response `200` `LatestListData` OK + */ + latestList = (params: RequestParams = {}) => + this.request({ + path: `/recruiting-season/latest`, + method: 'GET', + format: 'json', + ...params, + }); +} diff --git a/src/__generated__/api-types/data-contracts.ts b/src/__generated__/api-types/data-contracts.ts new file mode 100644 index 00000000..7526a8c0 --- /dev/null +++ b/src/__generated__/api-types/data-contracts.ts @@ -0,0 +1,257 @@ +/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +/** @example {"email":"35th_makers_recruiting@sopt.org","password":"makers!35"} */ +export type SignUpEmailCreatePayload = object; + +export type SignUpEmailCreateData = object; + +export type LatestListData = object; + +/** @example {"email":"limchangi@naver.com","season":44,"group":"OB","isSignup":true} */ +export type VerifySendCreatePayload = object; + +export type VerifySendCreateData = object; + +/** @example {"email":"limchangi@naver.com","code":"WJPQIX"} */ +export type VerifyEmailCreatePayload = object; + +export type VerifyEmailCreateData = object; + +export type VerifyEmailCreateError = object; + +/** @example {"email":"limchangi@naver.com","password":"1234","passwordCheck":"1234","name":"홍길동","phone":"010-1234-1234","season":6,"group":"OB"} */ +export type SignupCreatePayload = object; + +export type SignupCreateData = object; + +export type SignupCreateError = object; + +/** @example {"email":"limchangi@naver.com","name":"홍길동","season":1,"group":"OB"} */ +export type CheckUserCreatePayload = object; + +export type CheckUserCreateData = object; + +export type CheckUserCreateError = object; + +/** @example {"email":"limchangi@naver.com","season":35,"group":"OB","password":"1234","passwordCheck":"1234"} */ +export type ChangePasswordCreatePayload = object; + +export type ChangePasswordCreateData = object; + +export type ChangePasswordCreateError = object; + +/** @example {"email":"limchangi@naver.com","season":6,"group":"OB","password":"1234"} */ +export type LoginCreatePayload = object; + +export type LoginCreateData = object; + +export type LoginCreateError = object; + +export type ListListData = object; + +export type StoreListData = object; + +export type StoreListError = object; + +export interface StoreCreatePayload { + /** @format binary */ + picture?: File; + /** + * string + * @example "서버" + */ + part?: string; + /** + * string + * @example "home1" + */ + address?: string; + /** + * string + * @example "2001.01.23" + */ + birthday?: number; + /** + * string + * @example "대학" + */ + college?: string; + /** + * string + * @example "male" + */ + gender?: string; + /** + * string + * @example "지인 추천" + */ + knownPath?: string; + /** + * bool + * @example "false" + */ + leaveAbsence?: boolean; + /** + * string + * @example "통계" + */ + major?: string; + /** + * int + * @example "0" + */ + mostRecentSeason?: number; + /** + * int + * @example "4" + */ + univYear?: number; + /** + * string + * @example "사당역" + */ + nearestStation?: string; + /** + * json + * @example "[ + * { + * "recruitingQuestionId": 1, + * "answer": "5그릇" + * }, + * { + * "recruitingQuestionId": 2, + * "answer": "4그릇" + * } + * ]" + */ + answers?: string; + /** + * bool + * @example "false" + */ + willAppjam?: boolean; + /** @format binary */ + file_28?: File; + /** @format binary */ + file_29?: File; +} + +export type StoreCreateData = object; + +export type StoreCreateError = object; + +export interface RecruitingAnswerCreatePayload { + /** @format binary */ + picture?: File; + /** + * string + * @example "서버" + */ + part?: string; + /** + * string + * @example "home1" + */ + address?: string; + /** + * string + * @example "2001.01.23" + */ + birthday?: number; + /** + * string + * @example "대학" + */ + college?: string; + /** + * string + * @example "male" + */ + gender?: string; + /** + * string + * @example "지인 추천" + */ + knownPath?: string; + /** + * bool + * @example "false" + */ + leaveAbsence?: boolean; + /** + * string + * @example "통계" + */ + major?: string; + /** + * string + * @example "0" + */ + mostRecentSeason?: number; + /** + * int + * @example "4" + */ + univYear?: number; + /** + * string + * @example "사당역" + */ + nearestStation?: string; + /** + * json + * @example "[ + * { + * "recruitingQuestionId": 1, + * "answer": "5그릇" + * }, + * { + * "recruitingQuestionId": 2, + * "answer": "4그릇" + * } + * ]" + */ + answers?: string; + /** + * bool + * @example "false" + */ + willAppjam?: boolean; + /** @example "1" */ + season?: number; + /** @example "OB" */ + group?: string; + pictureUrl?: string; +} + +export type RecruitingAnswerCreateData = object; + +export type RecruitingAnswerCreateError = object; + +/** @example {"satisfaction":5} */ +export type SatisfactionCreatePayload = object; + +export type SatisfactionCreateData = object; + +export type SatisfactionCreateError = object; + +export type GetRecruitingAuthData = object; + +export type GetRecruitingAuthError = object; + +export type ResultApplicationListData = object; + +export type ResultApplicationListError = object; + +export type ResultFinalListData = object; + +export type ResultFinalListError = object; diff --git a/src/__generated__/api-types/http-client.ts b/src/__generated__/api-types/http-client.ts new file mode 100644 index 00000000..dedb6c45 --- /dev/null +++ b/src/__generated__/api-types/http-client.ts @@ -0,0 +1,220 @@ +/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to `true` for call `securityWorker` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = 'application/json', + FormData = 'multipart/form-data', + UrlEncoded = 'application/x-www-form-urlencoded', + Text = 'text/plain', +} + +export class HttpClient { + public baseUrl: string = 'http://{{host}}'; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig['securityWorker']; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: 'same-origin', + headers: {}, + redirect: 'follow', + referrerPolicy: 'no-referrer', + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return `${encodedKey}=${encodeURIComponent(typeof value === 'number' ? value : `${value}`)}`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join('&'); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => 'undefined' !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join('&'); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? `?${queryString}` : ''; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === 'object' || typeof input === 'string') ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== 'string' ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === 'object' && property !== null + ? JSON.stringify(property) + : `${property}`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === 'boolean' ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(`${baseUrl || this.baseUrl || ''}${path}${queryString ? `?${queryString}` : ''}`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { 'Content-Type': type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === 'undefined' || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} diff --git a/src/__generated__/api.d.ts b/src/__generated__/api.d.ts new file mode 100644 index 00000000..6a70ebcb --- /dev/null +++ b/src/__generated__/api.d.ts @@ -0,0 +1,1147 @@ +/** + * This file was auto-generated by openapi-typescript. + * Do not make direct changes to the file. + */ + +export interface paths { + "/auth/sign-up/email": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Admin Signup */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": Record; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + "X-Powered-By"?: string; + "Access-Control-Allow-Origin"?: string; + "Content-Type"?: string; + Etag?: string; + "Function-Execution-Id"?: string; + "X-Cloud-Trace-Context"?: string; + Date?: string; + Server?: string; + "Content-Length"?: number; + "Alt-Svc"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-season/latest": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** 최신 기수 정보 조회 (From Admin) */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-auth/verify/send": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** 이메일 인증 코드 전송 */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": Record; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + "X-Powered-By"?: string; + "Access-Control-Allow-Origin"?: string; + "Content-Type"?: string; + Etag?: string; + "Function-Execution-Id"?: string; + "X-Cloud-Trace-Context"?: string; + Date?: string; + Server?: string; + "Content-Length"?: number; + "Alt-Svc"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-auth/verify/email": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** 이메일 인증 코드 확인 */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": Record; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-auth/signup": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** 지원자 회원가입 */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": Record; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-auth/check/user": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** 유저 확인 (비밀번호 변경) */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": Record; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-auth/change/password": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** 비밀번호 변경 */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": Record; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-auth/login": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** 로그인 */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": Record; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-question/list": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** 질문 리스트 조회 (From Admin) */ + get: { + parameters: { + query?: { + /** @example 52 */ + season?: number; + /** @example OB */ + group?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-answer/store": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** 임시저장 지원서 조회 */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + "X-Powered-By"?: string; + "Access-Control-Allow-Origin"?: string; + "Content-Type"?: string; + Etag?: string; + "Function-Execution-Id"?: string; + "X-Cloud-Trace-Context"?: string; + Date?: string; + Server?: string; + "Content-Length"?: number; + "Alt-Svc"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + put?: never; + /** 지원서 임시저장 */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": { + /** Format: binary */ + picture?: string; + /** + * @description string + * @example 서버 + */ + part?: string; + /** + * @description string + * @example home1 + */ + address?: string; + /** + * @description string + * @example 2001.01.23 + */ + birthday?: number; + /** + * @description string + * @example 대학 + */ + college?: string; + /** + * @description string + * @example male + */ + gender?: string; + /** + * @description string + * @example 지인 추천 + */ + knownPath?: string; + /** + * @description bool + * @example false + */ + leaveAbsence?: boolean; + /** + * @description string + * @example 통계 + */ + major?: string; + /** + * @description int + * @example 0 + */ + mostRecentSeason?: number; + /** + * @description int + * @example 4 + */ + univYear?: number; + /** + * @description string + * @example 사당역 + */ + nearestStation?: string; + /** + * @description json + * @example [ + * { + * "recruitingQuestionId": 1, + * "answer": "5그릇" + * }, + * { + * "recruitingQuestionId": 2, + * "answer": "4그릇" + * } + * ] + */ + answers?: string; + /** + * @description bool + * @example false + */ + willAppjam?: boolean; + /** Format: binary */ + file_28?: string; + /** Format: binary */ + file_29?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + "X-Powered-By"?: string; + "Access-Control-Allow-Origin"?: string; + "Content-Type"?: string; + Etag?: string; + "Function-Execution-Id"?: string; + "X-Cloud-Trace-Context"?: string; + Date?: string; + Server?: string; + "Content-Length"?: number; + "Alt-Svc"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-answer": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** 지원서 제출 */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": { + /** Format: binary */ + picture?: string; + /** + * @description string + * @example 서버 + */ + part?: string; + /** + * @description string + * @example home1 + */ + address?: string; + /** + * @description string + * @example 2001.01.23 + */ + birthday?: number; + /** + * @description string + * @example 대학 + */ + college?: string; + /** + * @description string + * @example male + */ + gender?: string; + /** + * @description string + * @example 지인 추천 + */ + knownPath?: string; + /** + * @description bool + * @example false + */ + leaveAbsence?: boolean; + /** + * @description string + * @example 통계 + */ + major?: string; + /** + * @description string + * @example 0 + */ + mostRecentSeason?: number; + /** + * @description int + * @example 4 + */ + univYear?: number; + /** + * @description string + * @example 사당역 + */ + nearestStation?: string; + /** + * @description json + * @example [ + * { + * "recruitingQuestionId": 1, + * "answer": "5그릇" + * }, + * { + * "recruitingQuestionId": 2, + * "answer": "4그릇" + * } + * ] + */ + answers?: string; + /** + * @description bool + * @example false + */ + willAppjam?: boolean; + /** @example 1 */ + season?: number; + /** @example OB */ + group?: string; + pictureUrl?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + "X-Powered-By"?: string; + "Access-Control-Allow-Origin"?: string; + "Content-Type"?: string; + Etag?: string; + "Function-Execution-Id"?: string; + "X-Cloud-Trace-Context"?: string; + Date?: string; + Server?: string; + "Content-Length"?: number; + "Alt-Svc"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-applicant/satisfaction": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** 만족도 점수 */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": Record; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-auth/my": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** 마이페이지 */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + "X-Powered-By"?: string; + "Access-Control-Allow-Origin"?: string; + "Content-Type"?: string; + Etag?: string; + "Function-Execution-Id"?: string; + "X-Cloud-Trace-Context"?: string; + Date?: string; + Server?: string; + "Content-Length"?: number; + "Alt-Svc"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-applicant/result/application": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** 마이페이지 서류 합격 확인 */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/recruiting-applicant/result/final": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** 마이페이지 최종 합격 확인 */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + "x-powered-by"?: string; + "access-control-allow-origin"?: string; + "content-type"?: string; + "content-length"?: number; + etag?: string; + date?: string; + connection?: string; + "keep-alive"?: string; + [name: string]: unknown; + }; + content: { + "application/json": Record; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; +} +export type webhooks = Record; +export interface components { + schemas: never; + responses: never; + parameters: never; + requestBodies: never; + headers: never; + pathItems: never; +} +export type $defs = Record; +export type operations = Record; diff --git a/src/__generated__/api.ts b/src/__generated__/api.ts new file mode 100644 index 00000000..0c71006e --- /dev/null +++ b/src/__generated__/api.ts @@ -0,0 +1,4 @@ +import createClient from 'openapi-fetch'; +import { paths } from './api-schema'; + +export const fetcher = createClient({ baseUrl: import.meta.env.VITE_BASE_URL }); diff --git a/src/common/components/Input/components/InputLine/utils/validateBirthdate.ts b/src/common/components/Input/components/InputLine/utils/validateBirthdate.ts index 1b9bdcc2..9780bc42 100644 --- a/src/common/components/Input/components/InputLine/utils/validateBirthdate.ts +++ b/src/common/components/Input/components/InputLine/utils/validateBirthdate.ts @@ -43,7 +43,7 @@ export const validateBirthdate = (val: FieldValues) => { const date = new Date(String(val)); const minDate = new Date('1989-12-31'); - const today = new Date(new Date().toISOString().split('T')[0]); + const today = new Date(new Date().toISOString().split('T')[0] as any); if (isNaN(date.getTime()) || date < minDate || date > today) { return VALIDATION_CHECK.birthdate.errorTextOutOfRange; diff --git a/tsconfig.json b/tsconfig.json index dfe6c134..b3f0fc57 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,6 +8,7 @@ /* Bundler mode */ "moduleResolution": "bundler", + "noUncheckedIndexedAccess": true, "allowImportingTsExtensions": true, "resolveJsonModule": true, "isolatedModules": true, diff --git a/yarn.lock b/yarn.lock index 25875404..babd8d21 100644 --- a/yarn.lock +++ b/yarn.lock @@ -140,6 +140,15 @@ "@babel/highlight" "^7.24.7" picocolors "^1.0.0" +"@babel/code-frame@^7.22.13": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== + dependencies: + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" + picocolors "^1.0.0" + "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.2": version "7.24.2" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" @@ -290,6 +299,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== + "@babel/helper-validator-option@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" @@ -839,6 +853,11 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== +"@exodus/schemasafe@^1.0.0-rc.2": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@exodus/schemasafe/-/schemasafe-1.3.0.tgz#731656abe21e8e769a7f70a4d833e6312fe59b7f" + integrity sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw== + "@fastify/busboy@^2.0.0": version "2.1.1" resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" @@ -1472,6 +1491,38 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== +"@redocly/ajv@^8.11.2": + version "8.11.2" + resolved "https://registry.yarnpkg.com/@redocly/ajv/-/ajv-8.11.2.tgz#46e1bf321ec0ac1e0fd31dea41a3d1fcbdcda0b5" + integrity sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js-replace "^1.0.1" + +"@redocly/config@^0.16.0": + version "0.16.0" + resolved "https://registry.yarnpkg.com/@redocly/config/-/config-0.16.0.tgz#4b7700a5cb6e04bc6d6fdb94b871c9e260a1fba6" + integrity sha512-t9jnODbUcuANRSl/K4L9nb12V+U5acIHnVSl26NWrtSdDZVtoqUXk2yGFPZzohYf62cCfEQUT8ouJ3bhPfpnJg== + +"@redocly/openapi-core@^1.25.9": + version "1.25.11" + resolved "https://registry.yarnpkg.com/@redocly/openapi-core/-/openapi-core-1.25.11.tgz#93f168284986da6809363b001e9aa7c2104c2fc0" + integrity sha512-bH+a8izQz4fnKROKoX3bEU8sQ9rjvEIZOqU6qTmxlhOJ0NsKa5e+LmU18SV0oFeg5YhWQhhEDihXkvKJ1wMMNQ== + dependencies: + "@redocly/ajv" "^8.11.2" + "@redocly/config" "^0.16.0" + colorette "^1.2.0" + https-proxy-agent "^7.0.4" + js-levenshtein "^1.1.6" + js-yaml "^4.1.0" + lodash.isequal "^4.5.0" + minimatch "^5.0.1" + node-fetch "^2.6.1" + pluralize "^8.0.0" + yaml-ast-parser "0.0.43" + "@remix-run/router@1.16.1": version "1.16.1" resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.16.1.tgz#73db3c48b975eeb06d0006481bde4f5f2d17d1cd" @@ -1781,6 +1832,11 @@ resolved "https://registry.yarnpkg.com/@types/statuses/-/statuses-2.0.5.tgz#f61ab46d5352fd73c863a1ea4e1cef3b0b51ae63" integrity sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A== +"@types/swagger-schema-official@^2.0.25": + version "2.0.25" + resolved "https://registry.yarnpkg.com/@types/swagger-schema-official/-/swagger-schema-official-2.0.25.tgz#c8073914004d0a9c5412aeaf458d96e34c504840" + integrity sha512-T92Xav+Gf/Ik1uPW581nA+JftmjWPgskw/WBf4TJzxRG/SJ+DfNnNE+WuZ4mrXuzflQMqMkm1LSYjzYW7MB1Cg== + "@types/tough-cookie@^4.0.5": version "4.0.5" resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" @@ -2176,6 +2232,11 @@ ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ansi-colors@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + ansi-escapes@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" @@ -2444,6 +2505,11 @@ call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: get-intrinsic "^1.2.4" set-function-length "^1.2.1" +call-me-maybe@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa" + integrity sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ== + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -2490,21 +2556,26 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" +change-case@^5.4.4: + version "5.4.4" + resolved "https://registry.yarnpkg.com/change-case/-/change-case-5.4.4.tgz#0d52b507d8fb8f204343432381d1a6d7bff97a02" + integrity sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w== + check-error@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc" integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw== -cli-width@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" - integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== - ci-info@^3.7.0: version "3.9.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== +cli-width@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" + integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== + cliui@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" @@ -2543,6 +2614,11 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +colorette@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" + integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== + combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -2560,6 +2636,11 @@ confbox@^0.1.7: resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.7.tgz#ccfc0a2bcae36a84838e83a3b7f770fb17d6c579" integrity sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA== +consola@^3.2.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/consola/-/consola-3.3.3.tgz#0dd8a2314b0f7bf18a49064138ad685f3346543d" + integrity sha512-Qil5KwghMzlqd51UXM0b6fyaGHtOC22scxrwrz4A2882LyUMwQjnvaedN1HAeXzphspQ6CpHkzMAWxBTUruDLg== + convert-source-map@^1.5.0: version "1.9.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" @@ -2586,6 +2667,16 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" +cosmiconfig@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d" + integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== + dependencies: + env-paths "^2.2.1" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -2758,6 +2849,11 @@ dequal@^2.0.2, dequal@^2.0.3: resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== +didyoumean@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" + integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -2821,6 +2917,11 @@ entities@^4.4.0: resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== +env-paths@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -2944,6 +3045,11 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +es6-promise@^3.2.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" + integrity sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg== + esbuild@^0.20.1: version "0.20.2" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.20.2.tgz#9d6b2386561766ee6b5a55196c6d766d28c87ea1" @@ -3248,6 +3354,11 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +eta@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/eta/-/eta-2.2.0.tgz#eb8b5f8c4e8b6306561a455e62cd7492fe3a9b8a" + integrity sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g== + eval@0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.8.tgz#2b903473b8cc1d1989b83a1e7923f883eb357f85" @@ -3302,6 +3413,11 @@ fast-levenshtein@^2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== +fast-safe-stringify@^2.0.7: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + fastq@^1.6.0: version "1.17.1" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" @@ -3675,7 +3791,12 @@ http-proxy-agent@^7.0.2: agent-base "^7.1.0" debug "^4.3.4" -https-proxy-agent@^7.0.5: +http2-client@^1.2.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/http2-client/-/http2-client-1.3.5.tgz#20c9dc909e3cc98284dd20af2432c524086df181" + integrity sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA== + +https-proxy-agent@^7.0.4, https-proxy-agent@^7.0.5: version "7.0.5" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz#9e8b5013873299e11fab6fd548405da2d6c602b2" integrity sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw== @@ -3720,7 +3841,7 @@ ignore@^5.2.0, ignore@^5.3.1: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== -import-fresh@^3.2.1: +import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -3738,6 +3859,11 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== +index-to-position@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/index-to-position/-/index-to-position-0.1.2.tgz#e11bfe995ca4d8eddb1ec43274488f3c201a7f09" + integrity sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -4000,6 +4126,11 @@ javascript-stringify@^2.0.1: resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz#27c76539be14d8bd128219a2d731b09337904e79" integrity sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg== +js-levenshtein@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" + integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -4059,6 +4190,11 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" @@ -4154,6 +4290,11 @@ lodash.camelcase@^4.3.0: resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" @@ -4290,6 +4431,13 @@ minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + minimatch@^9.0.4: version "9.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" @@ -4375,6 +4523,27 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== +node-fetch-h2@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/node-fetch-h2/-/node-fetch-h2-2.3.0.tgz#c6188325f9bd3d834020bf0f2d6dc17ced2241ac" + integrity sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg== + dependencies: + http2-client "^1.2.5" + +node-fetch@^2.6.1: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-readfiles@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/node-readfiles/-/node-readfiles-0.2.0.tgz#dbbd4af12134e2e635c245ef93ffcf6f60673a5d" + integrity sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA== + dependencies: + es6-promise "^3.2.1" + node-releases@^2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" @@ -4392,6 +4561,52 @@ nwsapi@^2.2.12: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.12.tgz#fb6af5c0ec35b27b4581eb3bbad34ec9e5c696f8" integrity sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w== +oas-kit-common@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/oas-kit-common/-/oas-kit-common-1.0.8.tgz#6d8cacf6e9097967a4c7ea8bcbcbd77018e1f535" + integrity sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ== + dependencies: + fast-safe-stringify "^2.0.7" + +oas-linter@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/oas-linter/-/oas-linter-3.2.2.tgz#ab6a33736313490659035ca6802dc4b35d48aa1e" + integrity sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ== + dependencies: + "@exodus/schemasafe" "^1.0.0-rc.2" + should "^13.2.1" + yaml "^1.10.0" + +oas-resolver@^2.5.6: + version "2.5.6" + resolved "https://registry.yarnpkg.com/oas-resolver/-/oas-resolver-2.5.6.tgz#10430569cb7daca56115c915e611ebc5515c561b" + integrity sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ== + dependencies: + node-fetch-h2 "^2.3.0" + oas-kit-common "^1.0.8" + reftools "^1.1.9" + yaml "^1.10.0" + yargs "^17.0.1" + +oas-schema-walker@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/oas-schema-walker/-/oas-schema-walker-1.1.5.tgz#74c3cd47b70ff8e0b19adada14455b5d3ac38a22" + integrity sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ== + +oas-validator@^5.0.8: + version "5.0.8" + resolved "https://registry.yarnpkg.com/oas-validator/-/oas-validator-5.0.8.tgz#387e90df7cafa2d3ffc83b5fb976052b87e73c28" + integrity sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw== + dependencies: + call-me-maybe "^1.0.1" + oas-kit-common "^1.0.8" + oas-linter "^3.2.2" + oas-resolver "^2.5.6" + oas-schema-walker "^1.1.5" + reftools "^1.1.9" + should "^13.2.1" + yaml "^1.10.0" + object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -4494,6 +4709,30 @@ open@^8.4.0: is-docker "^2.1.1" is-wsl "^2.2.0" +openapi-fetch@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/openapi-fetch/-/openapi-fetch-0.13.0.tgz#42dcdac4a8e14d2aeba321b46f6fbf4dac997a94" + integrity sha512-6Nlf/BDbtyHwHdNrLPUiyt4CZMzL3ZyAt55yWH8W7+Z+8aYWnvca4uZHQHXViy8KcnCMqAhLM/bifh2Yjjkf6w== + dependencies: + openapi-typescript-helpers "^0.0.15" + +openapi-typescript-helpers@^0.0.15: + version "0.0.15" + resolved "https://registry.yarnpkg.com/openapi-typescript-helpers/-/openapi-typescript-helpers-0.0.15.tgz#96ffa762a5e01ef66a661b163d5f1109ed1967ed" + integrity sha512-opyTPaunsklCBpTK8JGef6mfPhLSnyy5a0IN9vKtx3+4aExf+KxEqYwIy3hqkedXIB97u357uLMJsOnm3GVjsw== + +openapi-typescript@^7.4.3: + version "7.4.3" + resolved "https://registry.yarnpkg.com/openapi-typescript/-/openapi-typescript-7.4.3.tgz#269c367929e8580dae2f7ef2d68bb39ffa30fa47" + integrity sha512-xTIjMIIOv9kNhsr8JxaC00ucbIY/6ZwuJPJBZMSh5FA2dicZN5uM805DWVJojXdom8YI4AQTavPDPHMx/3g0vQ== + dependencies: + "@redocly/openapi-core" "^1.25.9" + ansi-colors "^4.1.3" + change-case "^5.4.4" + parse-json "^8.1.0" + supports-color "^9.4.0" + yargs-parser "^21.1.1" + optionator@^0.9.3: version "0.9.4" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" @@ -4506,16 +4745,16 @@ optionator@^0.9.3: type-check "^0.4.0" word-wrap "^1.2.5" -outvariant@^1.4.0, outvariant@^1.4.2, outvariant@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.3.tgz#221c1bfc093e8fec7075497e7799fdbf43d14873" - integrity sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA== - os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== +outvariant@^1.4.0, outvariant@^1.4.2, outvariant@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.3.tgz#221c1bfc093e8fec7075497e7799fdbf43d14873" + integrity sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA== + p-limit@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" @@ -4537,7 +4776,7 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-json@^5.0.0: +parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== @@ -4547,6 +4786,15 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse-json@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-8.1.0.tgz#91cdc7728004e955af9cb734de5684733b24a717" + integrity sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA== + dependencies: + "@babel/code-frame" "^7.22.13" + index-to-position "^0.1.2" + type-fest "^4.7.1" + parse5@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" @@ -4639,6 +4887,11 @@ pkg-types@^1.1.0: mlly "^1.7.0" pathe "^1.1.2" +pluralize@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + possible-typed-array-names@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" @@ -4675,6 +4928,11 @@ prettier@^3.2.5: resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== +prettier@~3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105" + integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== + pretty-format@^27.0.2: version "27.5.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" @@ -4841,6 +5099,11 @@ reflect.getprototypeof@^1.0.4: globalthis "^1.0.3" which-builtin-type "^1.1.3" +reftools@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/reftools/-/reftools-1.1.9.tgz#e16e19f662ccd4648605312c06d34e5da3a2b77e" + integrity sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w== + regenerator-runtime@^0.14.0: version "0.14.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" @@ -4866,6 +5129,11 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + "require-like@>= 0.1.1": version "0.1.2" resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa" @@ -5087,6 +5355,50 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +should-equal@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/should-equal/-/should-equal-2.0.0.tgz#6072cf83047360867e68e98b09d71143d04ee0c3" + integrity sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA== + dependencies: + should-type "^1.4.0" + +should-format@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/should-format/-/should-format-3.0.3.tgz#9bfc8f74fa39205c53d38c34d717303e277124f1" + integrity sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q== + dependencies: + should-type "^1.3.0" + should-type-adaptors "^1.0.1" + +should-type-adaptors@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz#401e7f33b5533033944d5cd8bf2b65027792e27a" + integrity sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA== + dependencies: + should-type "^1.3.0" + should-util "^1.0.0" + +should-type@^1.3.0, should-type@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/should-type/-/should-type-1.4.0.tgz#0756d8ce846dfd09843a6947719dfa0d4cff5cf3" + integrity sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ== + +should-util@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/should-util/-/should-util-1.0.1.tgz#fb0d71338f532a3a149213639e2d32cbea8bcb28" + integrity sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g== + +should@^13.2.1: + version "13.2.3" + resolved "https://registry.yarnpkg.com/should/-/should-13.2.3.tgz#96d8e5acf3e97b49d89b51feaa5ae8d07ef58f10" + integrity sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ== + dependencies: + should-equal "^2.0.0" + should-format "^3.0.3" + should-type "^1.4.0" + should-type-adaptors "^1.0.1" + should-util "^1.0.0" + side-channel@^1.0.4, side-channel@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" @@ -5255,11 +5567,56 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-color@^9.4.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.4.0.tgz#17bfcf686288f531db3dea3215510621ccb55954" + integrity sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw== + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +swagger-schema-official@2.0.0-bab6bed: + version "2.0.0-bab6bed" + resolved "https://registry.yarnpkg.com/swagger-schema-official/-/swagger-schema-official-2.0.0-bab6bed.tgz#70070468d6d2977ca5237b2e519ca7d06a2ea3fd" + integrity sha512-rCC0NWGKr/IJhtRuPq/t37qvZHI/mH4I4sxflVM+qgVe5Z2uOCivzWaVbuioJaB61kvm5UvB7b49E+oBY0M8jA== + +swagger-typescript-api@^13.0.23: + version "13.0.23" + resolved "https://registry.yarnpkg.com/swagger-typescript-api/-/swagger-typescript-api-13.0.23.tgz#411d421a64877c5f168260329fefda6d7bf4629f" + integrity sha512-HhoIepxlFEU7Ol42Gh8/tvwhSxdkHcweX2tRkNhbZYBiEA+rK3C6N85MnwoeQR5XbidE3Kz8mLOqIerVGgR9uw== + dependencies: + "@types/swagger-schema-official" "^2.0.25" + consola "^3.2.3" + cosmiconfig "^9.0.0" + didyoumean "^1.2.2" + eta "^2.2.0" + js-yaml "^4.1.0" + lodash "^4.17.21" + nanoid "^3.3.7" + prettier "~3.3.3" + swagger-schema-official "2.0.0-bab6bed" + swagger2openapi "^7.0.8" + typescript "~5.5.4" + +swagger2openapi@^7.0.8: + version "7.0.8" + resolved "https://registry.yarnpkg.com/swagger2openapi/-/swagger2openapi-7.0.8.tgz#12c88d5de776cb1cbba758994930f40ad0afac59" + integrity sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g== + dependencies: + call-me-maybe "^1.0.1" + node-fetch "^2.6.1" + node-fetch-h2 "^2.3.0" + node-readfiles "^0.2.0" + oas-kit-common "^1.0.8" + oas-resolver "^2.5.6" + oas-schema-walker "^1.1.5" + oas-validator "^5.0.8" + reftools "^1.1.9" + yaml "^1.10.0" + yargs "^17.0.1" + symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" @@ -5339,6 +5696,11 @@ tr46@^5.0.0: dependencies: punycode "^2.3.1" +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + ts-api-utils@^1.0.1, ts-api-utils@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" @@ -5393,7 +5755,7 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -type-fest@^4.9.0: +type-fest@^4.7.1, type-fest@^4.9.0: version "4.26.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.26.1.tgz#a4a17fa314f976dd3e6d6675ef6c775c16d7955e" integrity sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg== @@ -5447,6 +5809,11 @@ typescript@^5.2.2: resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== +typescript@~5.5.4: + version "5.5.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" + integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== + ua-regexes-lite@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ua-regexes-lite/-/ua-regexes-lite-1.2.1.tgz#4ffa818855fb343cb68675f882a6b257f232deab" @@ -5502,6 +5869,11 @@ update-browserslist-db@^1.0.13: escalade "^3.1.2" picocolors "^1.0.1" +uri-js-replace@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uri-js-replace/-/uri-js-replace-1.0.1.tgz#c285bb352b701c9dfdaeffc4da5be77f936c9048" + integrity sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g== + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -5602,6 +5974,11 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + webidl-conversions@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" @@ -5641,6 +6018,14 @@ whatwg-url@^14.0.0: tr46 "^5.0.0" webidl-conversions "^7.0.0" +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -5759,6 +6144,11 @@ yallist@^3.0.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== +yaml-ast-parser@0.0.43: + version "0.0.43" + resolved "https://registry.yarnpkg.com/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz#e8a23e6fb4c38076ab92995c5dca33f3d3d7c9bb" + integrity sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A== + yaml@^1.10.0: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" @@ -5774,7 +6164,7 @@ yargs-parser@^21.1.1: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^17.5.1, yargs@^17.7.2: +yargs@^17.0.1, yargs@^17.5.1, yargs@^17.7.2: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==