Skip to content

Commit

Permalink
✨ Feat - openseminar api 구현, 기존 seminar api refactor #44
Browse files Browse the repository at this point in the history
  • Loading branch information
bianbbc87 committed May 8, 2024
1 parent 84783ec commit e26f2cc
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 8 deletions.
51 changes: 51 additions & 0 deletions src/app/api/seminar/open/route.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import { Client } from '@notionhq/client';
import { NextRequest } from 'next/server';

const notion = new Client({
auth: process.env.NOTION_SECRET_KEY,
});

async function queryOpenSeminarData(databaseId: string): Promise<any[]> {
try {
const response = await notion.databases.query({
database_id: databaseId,
sorts: [
{
property: 'Date',
direction: 'ascending'
}
]
});

return response.results;
} catch (error) {
console.error('Error querying Notion database and fetching seminar data:', JSON.stringify(error));
throw error;
}
}

type Data = {
items?: any[];
message: string;
};

export async function GET(req: NextRequest) {
const databaseId = process.env.NOTION_OPEN_SEMINAR_DATABASE_ID || '';

try {
const data = await queryOpenSeminarData(databaseId);
return new Response(JSON.stringify({ data, message: 'Success' }), {
status: 200,
headers: {
'Content-Type': 'application/json',
},
});
} catch (error) {
return new Response(JSON.stringify({ message: `Failed: ${error?.toString()}` }), {
status: 500,
headers: {
'Content-Type': 'application/json',
},
});
}
}
13 changes: 12 additions & 1 deletion src/app/api/seminar/route.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,19 @@ type Data = {
};

export async function GET(req: NextRequest) {
const url = new URL(req.url);
const tag = url.searchParams.get('Tag'); // 쿼리 파라미터에서 세미나 ID 가져오기

if (!tag) {
return new Response(JSON.stringify({ message: 'Tag is required' }), {
status: 400,
headers: {
'Content-Type': 'application/json',
},
});
}

const databaseId = process.env.NOTION_SEMINAR_DATABASE_ID || '';
const tag = '🏕️ Camping Seminar';

try {
const data = await querySeminarData(databaseId, tag);
Expand Down
27 changes: 20 additions & 7 deletions src/app/seminar/page.tsx
Original file line number Diff line number Diff line change
@@ -1,26 +1,39 @@
import SeminarHeader from '@/components/seminar/header/SeminarHeader';
import SeminarThumbnailList from '@/components/seminar/thumbnail/SeminarThumbnailList';
import SeminarToggle from '@/components/seminar/toggle/SeminarToggle';
import { refactorSeminarData } from '@/hooks/seminar/notionDataRefactor';
import { refactorOpenSeminarData, refactorSeminarData } from '@/hooks/seminar/notionDataRefactor';
import NotFoundPage from '../not-found';

const SeminarPage = async () => {
// seminar 데이터 가져오기
const seminarResponse = await fetch('http://localhost:3001/api/seminar');
const tag = '🏕️ Camping Seminar'
const seminarResponse = await fetch(`http://localhost:3001/api/seminar?Tag=${tag}`);
const seminarList = await seminarResponse.json();

const seminars = refactorSeminarData(seminarList.data || []);

// open seminar 데이터 가져오기
const openSeminarResponse = await fetch('http://localhost:3001/api/seminar/open');
const openSeminar = await openSeminarResponse.json();
const openSeminars = refactorOpenSeminarData(openSeminar.data || {});

// 세미나 데이터
if (!seminars) {
return <NotFoundPage />;
}

return <section className="flex justify-center">
<div className="max-w-[1200px] desktop:px-10 tablet:px-10 px-4 bg-mono_black">
<div className="w-full">
{/* header */}
<SeminarHeader />

{/* header */}
<SeminarHeader openSeminars={openSeminars} />

{/* toggle */}
<SeminarToggle />
<SeminarToggle openSeminars={openSeminars} />

{/* seminar list */}
<SeminarThumbnailList seminar={seminars} />
<SeminarThumbnailList seminars={seminars} />

<div className="h-[7.5rem]"></div>
</div>
</div>
Expand Down

0 comments on commit e26f2cc

Please sign in to comment.