Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 5 additions & 18 deletions src/app/(auth)/login/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,25 +1,12 @@
import { ReactNode } from "react";
import { METADATA } from "@/constants/metadata";
import ErrorBoundary from "@/error/error-boundary";
import { createPageInfoMetadata } from "@/constants/metadata";

export function generateMetadata() {
const TITLE = "로그인";
const DESCRIPTION = `${METADATA.title.default} 로그인`;
return {
...METADATA,
title: TITLE,
description: DESCRIPTION,
openGraph: {
...METADATA.openGraph,
title: TITLE,
description: DESCRIPTION,
},
twitter: {
...METADATA.twitter,
title: TITLE,
description: DESCRIPTION,
},
};
return createPageInfoMetadata(
"로그인",
"서비스를 이용하려면 로그인이 필요합니다."
);
}

export default function LoginLayout({ children }: { children: ReactNode }) {
Expand Down
23 changes: 5 additions & 18 deletions src/app/(auth)/signup/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,24 +1,11 @@
import { ReactNode } from "react";
import { METADATA } from "@/constants/metadata";
import { createPageInfoMetadata } from "@/constants/metadata";

export function generateMetadata() {
const TITLE = "회원가입";
const DESCRIPTION = `${METADATA.title.default} 회원가입`;
return {
...METADATA,
title: TITLE,
description: DESCRIPTION,
openGraph: {
...METADATA.openGraph,
title: TITLE,
description: DESCRIPTION,
},
twitter: {
...METADATA.twitter,
title: TITLE,
description: DESCRIPTION,
},
};
return createPageInfoMetadata(
"회원가입",
"서비스 이용을 위한 회원가입 페이지입니다."
);
}

export default function SignupLayout({ children }: { children: ReactNode }) {
Expand Down
19 changes: 4 additions & 15 deletions src/app/myprofile/page.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Suspense } from "react";
import { METADATA } from "@/constants/metadata";
import { createPageInfoMetadata } from "@/constants/metadata";
import type { Metadata } from "next";
import { MyProfile } from "./_components";
import Loader from "@/components/loader/loader";
Expand All @@ -24,23 +24,12 @@ export async function generateMetadata({
case "account":
tabTitle = "내 계정";
tabDescription = "내 계정 관리";
break;
}

const metadata = createPageInfoMetadata(tabTitle, tabDescription);

return {
...METADATA,
title: tabTitle,
description: tabDescription,
openGraph: {
...METADATA.openGraph,
title: tabTitle,
description: tabDescription,
},
twitter: {
...METADATA.twitter,
title: tabTitle,
description: tabDescription,
},
...metadata,
robots: {
index: false,
follow: false,
Expand Down
18 changes: 2 additions & 16 deletions src/app/register/[id]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { cn } from "@/lib/utils";
import RegisterWine from "../_components/register-wine";
import { METADATA } from "@/constants/metadata";
import { createPageInfoMetadata } from "@/constants/metadata";
import type { Metadata } from "next";
import getRegisterWine from "@/api/register/get-register-wine";

Expand All @@ -24,21 +24,7 @@ export async function generateMetadata({
? "와인 정보 수정 페이지"
: "새 와인 등록 페이지";

return {
...METADATA,
title,
description: DESCRIPTION,
openGraph: {
...METADATA.openGraph,
title: title,
description: DESCRIPTION,
},
twitter: {
...METADATA.twitter,
title: title,
description: DESCRIPTION,
},
};
return createPageInfoMetadata(title, DESCRIPTION);
}

const Page = async ({ params }: { params: Promise<{ id: string }> }) => {
Expand Down
20 changes: 2 additions & 18 deletions src/app/reviews/[reviewId]/edit/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,24 +1,8 @@
import React from "react";
import { METADATA } from "@/constants/metadata";
import { createPageInfoMetadata } from "@/constants/metadata";

export function generateMetadata() {
const TITLE = "리뷰 수정";
const DESCRIPTION = `${METADATA.title.default} 리뷰 수정 페이지`;
return {
...METADATA,
title: TITLE,
description: DESCRIPTION,
openGraph: {
...METADATA.openGraph,
title: TITLE,
description: DESCRIPTION,
},
twitter: {
...METADATA.twitter,
title: TITLE,
description: DESCRIPTION,
},
};
return createPageInfoMetadata("리뷰 수정", "리뷰 수정 페이지");
}
export default function EditLayout({
children,
Expand Down
20 changes: 2 additions & 18 deletions src/app/reviews/[reviewId]/write/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,24 +1,8 @@
import React from "react";
import { METADATA } from "@/constants/metadata";
import { createPageInfoMetadata } from "@/constants/metadata";

export function generateMetadata() {
const TITLE = "리뷰 등록";
const DESCRIPTION = `${METADATA.title.default} 리뷰 등록 페이지`;
return {
...METADATA,
title: TITLE,
description: DESCRIPTION,
openGraph: {
...METADATA.openGraph,
title: TITLE,
description: DESCRIPTION,
},
twitter: {
...METADATA.twitter,
title: TITLE,
description: DESCRIPTION,
},
};
return createPageInfoMetadata("리뷰 작성", "리뷰 작성 페이지");
}

export default function WriteLayout({
Expand Down
34 changes: 10 additions & 24 deletions src/app/wines/[id]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Suspense } from "react";
import { METADATA } from "@/constants/metadata";
import { createPageInfoMetadata } from "@/constants/metadata";
import type { Metadata, ResolvingMetadata } from "next";
import { cookies } from "next/headers";
import WineDetailContent from "@/app/wines/[id]/_components/wine-detail/wine-detail-content";
Expand Down Expand Up @@ -29,37 +29,23 @@ export async function generateMetadata(
);

if (!response.ok) {
return {
title: "와인 상세 정보",
description: "와인 정보를 불러오는 데 실패했습니다.",
};
return createPageInfoMetadata(
"와인 상세 정보",
"와인 정보를 불러오는 데 실패했습니다."
);
}
const wine = await response.json();

const PAGE_TITLE = `${wine.name} 와인 상세 정보`;
const DESCRIPTION = "와인 상세 정보 페이지입니다.";

return {
...METADATA,
title: PAGE_TITLE,
description: DESCRIPTION,
openGraph: {
...METADATA.openGraph,
title: PAGE_TITLE,
description: DESCRIPTION,
},
twitter: {
...METADATA.twitter,
title: PAGE_TITLE,
description: DESCRIPTION,
},
};
return createPageInfoMetadata(PAGE_TITLE, DESCRIPTION);
} catch (error) {
console.error(error);
return {
title: "와인 상세 정보",
description: "와인 정보를 불러오는 데 실패했습니다.",
};
return createPageInfoMetadata(
"와인 상세 정보",
"와인 정보를 불러오는 데 실패했습니다."
);
}
}

Expand Down
25 changes: 5 additions & 20 deletions src/app/wines/page.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Suspense } from "react";
import { METADATA } from "@/constants/metadata";
import { createPageInfoMetadata } from "@/constants/metadata";
import WineRecommended from "@/app/wines/_components/wine-recommended/wine-recommended";
import Loader from "@/components/loader/loader";
import WineListSection from "./_components/wine-list-section/wine-list-section";
Expand All @@ -16,25 +16,10 @@ export async function generateMetadata({
const params = (await searchParams) ?? {};
const name = params.name ?? "";

const PAGE_TITLE = name ? `${name} 검색 결과` : "맞춤 와인 찾기";
const DESCRIPTION =
"매달 새롭게 만나는 와인 추천 콘텐츠와 다양한 필터로 나만의 와인을 찾아보세요.";

return {
...METADATA,
title: PAGE_TITLE,
description: DESCRIPTION,
openGraph: {
...METADATA.openGraph,
title: PAGE_TITLE,
description: DESCRIPTION,
},
twitter: {
...METADATA.twitter,
title: PAGE_TITLE,
description: DESCRIPTION,
},
};
return createPageInfoMetadata(
name ? `${name} 검색 결과` : "맞춤 와인 찾기",
"매달 새롭게 만나는 와인 추천 콘텐츠와 다양한 필터로 나만의 와인을 찾아보세요."
);
}

const WineListPage = async () => {
Expand Down
28 changes: 27 additions & 1 deletion src/constants/metadata.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import type { Metadata } from "next";
import { SITE_NAME, SITE_URL, SITE_DESCRIPTION } from "./site";

export const METADATA = {
export const METADATA: Metadata = {
metadataBase: new URL(SITE_URL),
title: {
default: SITE_NAME,
template: `%s | ${SITE_NAME}`,
Expand Down Expand Up @@ -48,3 +50,27 @@ export const METADATA = {
follow: true,
},
};

/**
* 페이지별 title, description
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

멋있게 중복 코드를 줄여주셨으니 주석에 @author yeonsu 추가하시면 더 뿌듯하시지 않을까요?!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

넵넵!ㅎㅎ 이름 추가해서 올려보도록 하겠습니다!

*/
export const createPageInfoMetadata = (
title: string,
description: string
): Metadata => {
return {
...METADATA,
title,
description,
openGraph: {
...METADATA.openGraph,
title: `${title} | ${SITE_NAME}`,
description,
},
twitter: {
...METADATA.twitter,
title: `${title} | ${SITE_NAME}`,
description,
},
};
};