Initial reader-api backend extracted from reader
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
import { NextResponse } from "next/server"
|
||||
import { prisma } from "@/lib/prisma"
|
||||
|
||||
export async function GET(
|
||||
_req: Request,
|
||||
{ params }: { params: Promise<{ id: string }> }
|
||||
) {
|
||||
try {
|
||||
const { id } = await params
|
||||
|
||||
// Support both id and slug
|
||||
const novel = await prisma.novel.findFirst({
|
||||
where: { OR: [{ id }, { slug: id }] },
|
||||
select: {
|
||||
id: true,
|
||||
title: true,
|
||||
slug: true,
|
||||
originalTitle: true,
|
||||
authorName: true,
|
||||
originalAuthorName: true,
|
||||
description: true,
|
||||
coverUrl: true,
|
||||
coverColor: true,
|
||||
status: true,
|
||||
totalChapters: true,
|
||||
views: true,
|
||||
rating: true,
|
||||
ratingCount: true,
|
||||
bookmarkCount: true,
|
||||
seriesId: true,
|
||||
series: {
|
||||
select: {
|
||||
id: true,
|
||||
name: true,
|
||||
slug: true,
|
||||
novels: {
|
||||
select: {
|
||||
id: true,
|
||||
title: true,
|
||||
slug: true,
|
||||
totalChapters: true,
|
||||
status: true,
|
||||
coverUrl: true,
|
||||
},
|
||||
orderBy: { title: "asc" },
|
||||
},
|
||||
},
|
||||
},
|
||||
genres: { select: { genre: { select: { id: true, name: true, slug: true } } } },
|
||||
createdAt: true,
|
||||
updatedAt: true,
|
||||
},
|
||||
})
|
||||
|
||||
if (!novel) {
|
||||
return NextResponse.json({ error: "Novel not found" }, { status: 404 })
|
||||
}
|
||||
|
||||
return NextResponse.json({
|
||||
...novel,
|
||||
genres: novel.genres.map((g) => g.genre),
|
||||
})
|
||||
} catch (error) {
|
||||
console.error("Novel detail error:", error)
|
||||
return NextResponse.json({ error: "Internal Server Error" }, { status: 500 })
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user