Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
Binary file removed src/app/favicon-16x16.png
Binary file not shown.
Binary file removed src/app/favicon-32x32.png
Binary file not shown.
15 changes: 0 additions & 15 deletions src/app/favicon.svg

This file was deleted.

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
44 changes: 36 additions & 8 deletions src/constants/metadata.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
import type { Metadata } from "next";
import { SITE_NAME, SITE_URL, SITE_DESCRIPTION } from "./site";

export const METADATA = {
/**
* 사이트 공통 메타데이터
* @author yeonsu
*/
export const METADATA: Metadata = {
metadataBase: new URL(SITE_URL),
title: {
default: SITE_NAME,
template: `%s | ${SITE_NAME}`,
Expand All @@ -23,13 +29,7 @@ export const METADATA = {
],
},
icons: {
icon: [
{ url: "/favicon-16x16.png", sizes: "16x16" },
{ url: "/favicon-32x32.png", sizes: "32x32" },
{ url: "/favicon.ico", sizes: "any" },
{ url: "/favicon.svg", type: "image/svg+xml" },
],
shortcut: ["/favicon.ico"],
icon: [{ url: "/favicon.ico", sizes: "any" }],
apple: ["/apple-icon.png"],
},
twitter: {
Expand All @@ -48,3 +48,31 @@ export const METADATA = {
follow: true,
},
};

/**
* 페이지마다 다른 title과 description을 설정하기 위한 메타데이터 생성 함수
* 공통 메타데이터를 기반으로 페이지별 정보를 덮어씌웁니다.
* @author yeonsu
* @param title : 해당 페이지 제목
* @param description : 해당 페이지 설명
*/
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,
},
};
};