mirror of
https://github.com/AderKonstantin/aderktech-chronark.com-.git
synced 2025-06-08 13:48:42 +03:00
56 lines
1.4 KiB
TypeScript
56 lines
1.4 KiB
TypeScript
import { notFound } from "next/navigation";
|
|
import { allProjects } from "contentlayer/generated";
|
|
import { Mdx } from "@/app/components/mdx";
|
|
import { Header } from "./header";
|
|
import "./mdx.css";
|
|
import { ReportView } from "./view";
|
|
import Redis from "ioredis";
|
|
|
|
export const revalidate = 60;
|
|
|
|
type Props = {
|
|
params: {
|
|
slug: string;
|
|
};
|
|
};
|
|
|
|
// Настройка подключения к локальному Redis
|
|
const redis = new Redis({
|
|
host: process.env.REDIS_HOST || "localhost",
|
|
port: parseInt(process.env.REDIS_PORT || "6379"),
|
|
password: process.env.REDIS_PASSWORD,
|
|
});
|
|
|
|
export async function generateStaticParams(): Promise<Props["params"][]> {
|
|
return allProjects
|
|
.filter((p) => p.published)
|
|
.map((p) => ({
|
|
slug: p.slug,
|
|
}));
|
|
}
|
|
|
|
export default async function PostPage({ params }: Props) {
|
|
const slug = params?.slug;
|
|
const project = allProjects.find((project) => project.slug === slug);
|
|
|
|
if (!project) {
|
|
notFound();
|
|
}
|
|
|
|
// Получаем и преобразуем значение просмотров
|
|
const views = parseInt(
|
|
(await redis.get(`projects:${slug}:views`)) || "0",
|
|
10
|
|
);
|
|
|
|
return (
|
|
<div className="bg-zinc-50 min-h-screen">
|
|
<Header project={project} views={views} />
|
|
<ReportView slug={project.slug} />
|
|
|
|
<article className="px-4 py-12 mx-auto prose prose-zinc prose-quoteless">
|
|
<Mdx code={project.body.code} />
|
|
</article>
|
|
</div>
|
|
);
|
|
} |