diff --git a/apps/home/app/(profile-readme)/@profile/people/people.constants.ts b/apps/home/app/(profile-readme)/@profile/people/people.constants.ts index 8691a7f..362a38d 100644 --- a/apps/home/app/(profile-readme)/@profile/people/people.constants.ts +++ b/apps/home/app/(profile-readme)/@profile/people/people.constants.ts @@ -1,6 +1,8 @@ -import type { PEOPLE_MBTI_INFO_MAP } from '@/(profile-readme)/people/people.constants' +import type { HAMSURANG_PEOPLE } from '@/_shared/components/People/People.constants' import type { ProfileProps } from '@/_shared/components/Profile/Profile' +type PeopleUsername = (typeof HAMSURANG_PEOPLE)[number]['username'] + export const PROFILE_INFO = { 'minsoo-web': { name: 'Minsoo kim', @@ -54,6 +56,78 @@ export const PROFILE_INFO = { username: 'yejineee', email: 'yygeniee@gmail.com', }, + 'azure-553': { + name: '심미진', + username: 'azure-553', + }, + Sangminnn: { + name: '박상민', + username: 'Sangminnn', + }, + 'jong-kyung': { + name: '이종경', + username: 'jong-kyung', + }, + sHyunis: { + name: '정소현', + username: 'sHyunis', + }, + 'Seung-wan': { + name: '유승완', + username: 'Seung-wan', + }, + oilater: { + name: '김성현', + username: 'oilater', + }, + 'JeongHwan-dev': { + name: '박정환', + username: 'JeongHwan-dev', + }, + tolluset: { + name: '이병현', + username: 'tolluset', + }, + SeolJaeHyeok: { + name: '설재혁', + username: 'SeolJaeHyeok', + }, + jangwonyoon: { + name: '윤장원', + username: 'jangwonyoon', + }, + Kyujenius: { + name: '홍규진', + username: 'Kyujenius', + }, + Jxxunnn: { + name: '이준근', + username: 'Jxxunnn', + }, + doyoonear: { + name: '이도윤', + username: 'doyoonear', + }, + 'BO-LIKE-CHICKEN': { + name: '백보성', + username: 'BO-LIKE-CHICKEN', + }, + sudosubin: { + name: '김수빈', + username: 'sudosubin', + }, + jaesoekjjang: { + name: '이재석', + username: 'jaesoekjjang', + }, + kangju2000: { + name: '강주혁', + username: 'kangju2000', + }, + 'korkt-kim': { + name: '김경태', + username: 'korkt-kim', + }, } satisfies { - [key in keyof typeof PEOPLE_MBTI_INFO_MAP]: ProfileProps + [key in PeopleUsername]: ProfileProps } diff --git a/apps/home/app/(profile-readme)/@readme/people/page.tsx b/apps/home/app/(profile-readme)/@readme/people/page.tsx index 9b7cc2e..6ab6802 100644 --- a/apps/home/app/(profile-readme)/@readme/people/page.tsx +++ b/apps/home/app/(profile-readme)/@readme/people/page.tsx @@ -12,7 +12,13 @@ export default async function Page({ process.cwd(), `./app/(profile-readme)/@readme/_shared/content/${username}.mdx`, ) - const readme = await fs.readFile(filePath, { encoding: 'utf8' }) + + let readme: string + try { + readme = await fs.readFile(filePath, { encoding: 'utf8' }) + } catch { + return

아직 README가 작성되지 않았습니다.

+ } return } diff --git a/apps/home/app/(profile-readme)/people/page.tsx b/apps/home/app/(profile-readme)/people/page.tsx index 64cef97..30239b0 100644 --- a/apps/home/app/(profile-readme)/people/page.tsx +++ b/apps/home/app/(profile-readme)/people/page.tsx @@ -7,10 +7,15 @@ export default function Page({ searchParams: { [key: string]: string | string[] | undefined } }) { const username = searchParams.username + const mbtiData = PEOPLE_MBTI_INFO_MAP[username as keyof typeof PEOPLE_MBTI_INFO_MAP] return (
- + {mbtiData ? ( + + ) : ( +

아직 MBTI가 등록되지 않았습니다.

+ )}
) } diff --git a/apps/home/app/_shared/components/People/People.constants.ts b/apps/home/app/_shared/components/People/People.constants.ts index 20c5ea3..98f9ffe 100644 --- a/apps/home/app/_shared/components/People/People.constants.ts +++ b/apps/home/app/_shared/components/People/People.constants.ts @@ -1,46 +1,120 @@ export const HAMSURANG_PEOPLE = [ + // 0기 { - name: '쿼카', + name: '김민수', username: 'minsoo-web', }, { - name: '쏘니', + name: '손수림', username: 'sonsurim', }, { - name: '마누', + name: '고종현', username: 'manudeli', }, { - name: '퉁이리', + name: '정충일', username: 'tooooo1', }, { - name: '쉽', + name: '양예진', username: 'yejineee', }, { - name: 'P민수', + name: '박민수', username: 'minsour', }, { - name: '웨일', + name: '이현재', username: '2-NOW', }, { - name: '모리', + name: '김채림', username: 'chaaerim', }, { - name: '민케이', + name: '강민수', username: 'minchodang', }, { - name: '삼바', + name: '임성호', username: 'sungh0lim', }, { - name: '오키나와', + name: '박찬혁', username: 'okinawaa', }, + // 1기 + { + name: '심미진', + username: 'azure-553', + }, + { + name: '박상민', + username: 'Sangminnn', + }, + { + name: '이종경', + username: 'jong-kyung', + }, + { + name: '정소현', + username: 'sHyunis', + }, + { + name: '유승완', + username: 'Seung-wan', + }, + { + name: '김성현', + username: 'oilater', + }, + { + name: '박정환', + username: 'JeongHwan-dev', + }, + { + name: '이병현', + username: 'tolluset', + }, + { + name: '설재혁', + username: 'SeolJaeHyeok', + }, + { + name: '윤장원', + username: 'jangwonyoon', + }, + { + name: '홍규진', + username: 'Kyujenius', + }, + { + name: '이준근', + username: 'Jxxunnn', + }, + { + name: '이도윤', + username: 'doyoonear', + }, + { + name: '백보성', + username: 'BO-LIKE-CHICKEN', + }, + { + name: '김수빈', + username: 'sudosubin', + }, + { + name: '이재석', + username: 'jaesoekjjang', + }, + { + name: '강주혁', + username: 'kangju2000', + }, + { + name: '김경태', + username: 'korkt-kim', + }, ] as const diff --git a/apps/home/app/_shared/components/People/People.tsx b/apps/home/app/_shared/components/People/People.tsx index 8568678..bdd19be 100644 --- a/apps/home/app/_shared/components/People/People.tsx +++ b/apps/home/app/_shared/components/People/People.tsx @@ -37,7 +37,7 @@ export const People = () => {
{HAMSURANG_PEOPLE.map(({ name, username }) => ( - + p.username) + export function middleware(request: NextRequest) { const { searchParams, origin } = request.nextUrl const username = searchParams.get('username') - if (!username || !PEOPLE_MBTI_INFO_MAP[username as keyof typeof PEOPLE_MBTI_INFO_MAP]) { + if (!username || !validUsernames.includes(username)) { return NextResponse.redirect(new URL('/', origin)) } diff --git a/apps/home/package.json b/apps/home/package.json index bb464fb..6b79dff 100644 --- a/apps/home/package.json +++ b/apps/home/package.json @@ -20,7 +20,7 @@ "dayjs": "^1.11.11", "framer-motion": "^11.2.4", "next": "^14.2.11", - "next-mdx-remote": "^5.0.0", + "next-mdx-remote": "^6.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-use": "^17.5.0" diff --git a/apps/wiki/package.json b/apps/wiki/package.json index e2d7dc8..70432e0 100644 --- a/apps/wiki/package.json +++ b/apps/wiki/package.json @@ -16,7 +16,7 @@ "@mdx-js/react": "^3.0.1", "@next/mdx": "^14.2.5", "next": "^14.2.11", - "next-mdx-remote": "^5.0.0", + "next-mdx-remote": "^6.0.0", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d8b1fe2..98dce46 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -63,8 +63,8 @@ importers: specifier: ^14.2.11 version: 14.2.11(@babel/core@7.24.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) next-mdx-remote: - specifier: ^5.0.0 - version: 5.0.0(@types/react@18.2.61)(react@18.2.0) + specifier: ^6.0.0 + version: 6.0.0(@types/react@18.2.61)(react@18.2.0) react: specifier: ^18.2.0 version: 18.2.0 @@ -121,8 +121,8 @@ importers: specifier: ^14.2.11 version: 14.2.11(@babel/core@7.24.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) next-mdx-remote: - specifier: ^5.0.0 - version: 5.0.0(@types/react@18.2.61)(react@18.2.0) + specifier: ^6.0.0 + version: 6.0.0(@types/react@18.2.61)(react@18.2.0) react: specifier: ^18.2.0 version: 18.2.0 @@ -2448,8 +2448,8 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - next-mdx-remote@5.0.0: - resolution: {integrity: sha512-RNNbqRpK9/dcIFZs/esQhuLA8jANqlH694yqoDBK8hkVdJUndzzGmnPHa2nyi90N4Z9VmzuSWNRpr5ItT3M7xQ==} + next-mdx-remote@6.0.0: + resolution: {integrity: sha512-cJEpEZlgD6xGjB4jL8BnI8FaYdN9BzZM4NwadPe1YQr7pqoWjg9EBCMv3nXBkuHqMRfv2y33SzUsuyNh9LFAQQ==} engines: {node: '>=14', npm: '>=7'} peerDependencies: react: '>=16' @@ -2977,9 +2977,6 @@ packages: unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} - unist-util-is@5.2.1: - resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} - unist-util-is@6.0.0: resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} @@ -2992,21 +2989,21 @@ packages: unist-util-remove-position@5.0.0: resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} - unist-util-remove@3.1.1: - resolution: {integrity: sha512-kfCqZK5YVY5yEa89tvpl7KnBBHu2c6CzMkqHUrlOqaRgGOMp0sMvwWOVrbAtj03KhovQB7i96Gda72v/EFE0vw==} + unist-util-remove@4.0.0: + resolution: {integrity: sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg==} unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - unist-util-visit-parents@5.1.3: - resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} - unist-util-visit-parents@6.0.1: resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + unist-util-visit@5.1.0: + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} + update-browserslist-db@1.0.15: resolution: {integrity: sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==} hasBin: true @@ -5526,13 +5523,14 @@ snapshots: neo-async@2.6.2: {} - next-mdx-remote@5.0.0(@types/react@18.2.61)(react@18.2.0): + next-mdx-remote@6.0.0(@types/react@18.2.61)(react@18.2.0): dependencies: '@babel/code-frame': 7.24.2 '@mdx-js/mdx': 3.0.1 '@mdx-js/react': 3.0.1(@types/react@18.2.61)(react@18.2.0) react: 18.2.0 - unist-util-remove: 3.1.1 + unist-util-remove: 4.0.0 + unist-util-visit: 5.1.0 vfile: 6.0.2 vfile-matter: 5.0.0 transitivePeerDependencies: @@ -6094,10 +6092,6 @@ snapshots: trough: 2.2.0 vfile: 6.0.2 - unist-util-is@5.2.1: - dependencies: - '@types/unist': 2.0.10 - unist-util-is@6.0.0: dependencies: '@types/unist': 3.0.2 @@ -6115,21 +6109,16 @@ snapshots: '@types/unist': 3.0.2 unist-util-visit: 5.0.0 - unist-util-remove@3.1.1: + unist-util-remove@4.0.0: dependencies: - '@types/unist': 2.0.10 - unist-util-is: 5.2.1 - unist-util-visit-parents: 5.1.3 + '@types/unist': 3.0.2 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 unist-util-stringify-position@4.0.0: dependencies: '@types/unist': 3.0.2 - unist-util-visit-parents@5.1.3: - dependencies: - '@types/unist': 2.0.10 - unist-util-is: 5.2.1 - unist-util-visit-parents@6.0.1: dependencies: '@types/unist': 3.0.2 @@ -6141,6 +6130,12 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 + unist-util-visit@5.1.0: + dependencies: + '@types/unist': 3.0.2 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + update-browserslist-db@1.0.15(browserslist@4.23.0): dependencies: browserslist: 4.23.0