/** * @copyright 2026 NHCarrigan * @license Naomi's Public License * @author Naomi Carrigan */ import { Manga, MangaStatus, CreateMangaDto, UpdateMangaDto } from "@library/shared-types"; import { prisma } from "../lib/prisma"; export class MangaService { private prisma = prisma; constructor() {} async getAllManga(): Promise { const manga = await this.prisma.manga.findMany({ orderBy: { updatedAt: "desc" }, }); return manga.map((m) => ({ ...m, status: m.status as unknown as MangaStatus, dateAdded: m.dateAdded, dateCompleted: m.dateCompleted || undefined, createdAt: m.createdAt, updatedAt: m.updatedAt, })); } async getMangaById(id: string): Promise { const manga = await this.prisma.manga.findUnique({ where: { id }, }); if (!manga) return null; return { ...manga, status: manga.status as unknown as MangaStatus, dateAdded: manga.dateAdded, dateCompleted: manga.dateCompleted || undefined, createdAt: manga.createdAt, updatedAt: manga.updatedAt, }; } async createManga(data: CreateMangaDto): Promise { const manga = await this.prisma.manga.create({ data: { ...data, status: data.status.toUpperCase() as any, }, }); return { ...manga, status: manga.status as unknown as MangaStatus, dateAdded: manga.dateAdded, dateCompleted: manga.dateCompleted || undefined, createdAt: manga.createdAt, updatedAt: manga.updatedAt, }; } async updateManga(id: string, data: UpdateMangaDto): Promise { const updateData = { ...data }; if (updateData.status) { updateData.status = updateData.status.toUpperCase() as any; } const manga = await this.prisma.manga.update({ where: { id }, data: updateData, }); return { ...manga, status: manga.status as unknown as MangaStatus, dateAdded: manga.dateAdded, dateCompleted: manga.dateCompleted || undefined, createdAt: manga.createdAt, updatedAt: manga.updatedAt, }; } async deleteManga(id: string): Promise { await this.prisma.manga.delete({ where: { id }, }); } }