mirror of
				https://github.com/DerTyp7/explainegy-nextjs.git
				synced 2025-11-04 07:19:00 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			89 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import styles from "../../../styles/modules/Category.module.scss";
 | 
						|
import Link from "next/link";
 | 
						|
import prisma from "../../../lib/prisma";
 | 
						|
import { Article, Category } from "@prisma/client";
 | 
						|
 | 
						|
export async function GetAllArticles(category: Category): Promise<Article[]> {
 | 
						|
	return await prisma.article.findMany({ where: { category: category } });
 | 
						|
}
 | 
						|
 | 
						|
export async function GetPopularArticles(
 | 
						|
	category: Category
 | 
						|
): Promise<Article[]> {
 | 
						|
	return await prisma.article.findMany({
 | 
						|
		where: { category: category },
 | 
						|
		take: 6,
 | 
						|
	});
 | 
						|
}
 | 
						|
 | 
						|
export async function GetRecentArticles(
 | 
						|
	category: Category
 | 
						|
): Promise<Article[]> {
 | 
						|
	return await prisma.article.findMany({
 | 
						|
		where: { category: category },
 | 
						|
		take: 6,
 | 
						|
		orderBy: { dateCreated: "desc" },
 | 
						|
	});
 | 
						|
}
 | 
						|
 | 
						|
export async function GetCategory(categoryName: string): Promise<Category> {
 | 
						|
	return await prisma.category.findUnique({ where: { name: categoryName } });
 | 
						|
}
 | 
						|
export default async function CategoryPage({
 | 
						|
	params,
 | 
						|
}: {
 | 
						|
	params: { categoryName: string };
 | 
						|
}) {
 | 
						|
	const categoryName = params.categoryName.toLowerCase().replaceAll("%20", " ");
 | 
						|
	const category: Category = await GetCategory(categoryName);
 | 
						|
	const allArticles: Article[] = await GetAllArticles(category);
 | 
						|
	const popularArticles: Article[] = await GetPopularArticles(category);
 | 
						|
	const recentArticles: Article[] = await GetRecentArticles(category);
 | 
						|
 | 
						|
	return (
 | 
						|
		<div className={styles.category}>
 | 
						|
			<h1>{category?.title}</h1>
 | 
						|
			<div className={styles.content}>
 | 
						|
				<div className={`${styles.showcase} ${styles.smallShowcase}`}>
 | 
						|
					<h2>Most popular articles</h2>
 | 
						|
					{popularArticles?.map((a, i) => {
 | 
						|
						{
 | 
						|
							return (
 | 
						|
								<Link key={i} href={`/articles/${category.name}/${a.name}`}>
 | 
						|
									{a.name}
 | 
						|
								</Link>
 | 
						|
							);
 | 
						|
						}
 | 
						|
					})}
 | 
						|
				</div>
 | 
						|
 | 
						|
				{/* <div className={`${styles.showcase} ${styles.smallShowcase}`}>
 | 
						|
					<h2>Most recent articles</h2>
 | 
						|
					{recentArticles?.map((a, i) => {
 | 
						|
						{
 | 
						|
							return (
 | 
						|
								<Link key={i} href={`/articles/${category.name}/${a.name}`}>
 | 
						|
									{a.name}
 | 
						|
								</Link>
 | 
						|
							);
 | 
						|
						}
 | 
						|
					})}
 | 
						|
				</div> */}
 | 
						|
 | 
						|
				<div className={styles.showcase}>
 | 
						|
					<h2>All articles</h2>
 | 
						|
					{allArticles?.map((a, i) => {
 | 
						|
						{
 | 
						|
							return (
 | 
						|
								<Link key={i} href={`/articles/${category.name}/${a.name}`}>
 | 
						|
									{a.name}
 | 
						|
								</Link>
 | 
						|
							);
 | 
						|
						}
 | 
						|
					})}
 | 
						|
				</div>
 | 
						|
			</div>
 | 
						|
		</div>
 | 
						|
	);
 | 
						|
}
 |