40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
import type { ProjectType } from "@prisma/client";
|
|
import { prisma } from "@/lib/db";
|
|
|
|
export async function getPublishedProjects(type: ProjectType, categorySlug?: string) {
|
|
return prisma.project.findMany({
|
|
where: {
|
|
type,
|
|
status: "PUBLISHED",
|
|
category: categorySlug ? { slug: categorySlug, kind: "PROJECT" } : undefined,
|
|
},
|
|
orderBy: [{ isFeatured: "desc" }, { sortOrder: "asc" }, { publishedAt: "desc" }, { titleEn: "asc" }],
|
|
include: {
|
|
category: { select: { slug: true, nameAr: true, nameEn: true } },
|
|
},
|
|
});
|
|
}
|
|
|
|
export async function getProjectCategories() {
|
|
return prisma.category.findMany({
|
|
where: { kind: "PROJECT" },
|
|
orderBy: [{ order: "asc" }, { nameEn: "asc" }],
|
|
select: {
|
|
id: true,
|
|
slug: true,
|
|
nameAr: true,
|
|
nameEn: true,
|
|
_count: { select: { projects: true } },
|
|
},
|
|
});
|
|
}
|
|
|
|
export async function getPublishedProject(type: ProjectType, slug: string) {
|
|
return prisma.project.findFirst({
|
|
where: { type, slug, status: "PUBLISHED" },
|
|
include: {
|
|
category: { select: { slug: true, nameAr: true, nameEn: true } },
|
|
},
|
|
});
|
|
}
|