feat: full site build — Project/Melody schema (Option A), admin CRUD, public sections, uploads, email+SMTP, internal analytics, legal pages, docs

This commit is contained in:
2026-08-05 20:53:40 +02:00
parent d87f3033c6
commit c26f41511f
122 changed files with 15068 additions and 41 deletions
+27
View File
@@ -0,0 +1,27 @@
import { prisma } from "@/lib/db";
export async function getPublishedMelodies(categorySlug?: string) {
return prisma.melody.findMany({
where: {
status: "PUBLISHED",
category: categorySlug ? { slug: categorySlug, kind: "MELODY" } : undefined,
},
orderBy: [{ isFeatured: "desc" }, { sortOrder: "asc" }, { createdAt: "desc" }, { titleEn: "asc" }],
include: { category: { select: { slug: true, nameAr: true, nameEn: true } } },
});
}
export async function getMelodyCategories() {
return prisma.category.findMany({
where: { kind: "MELODY" },
orderBy: [{ order: "asc" }, { nameEn: "asc" }],
select: { id: true, slug: true, nameAr: true, nameEn: true, _count: { select: { melodies: true } } },
});
}
export async function getPublishedMelody(slug: string) {
return prisma.melody.findFirst({
where: { slug, status: "PUBLISHED" },
include: { category: { select: { slug: true, nameAr: true, nameEn: true } } },
});
}