30 lines
927 B
TypeScript
30 lines
927 B
TypeScript
import { IdentityContext } from '@app/server/identity';
|
|
import { prisma } from '@app/server/prisma/client';
|
|
import { BookManyOutput, QueryBookManyArgs } from '@generated/types';
|
|
import { Prisma } from '@prisma/client';
|
|
import { toBookSchema } from './mappers/bookMapper';
|
|
|
|
export async function BookManyResolver(
|
|
_: any,
|
|
{ input }: QueryBookManyArgs,
|
|
{ identity }: IdentityContext
|
|
): Promise<BookManyOutput> {
|
|
const { filter } = input;
|
|
const terms = filter.terms?.toLowerCase();
|
|
|
|
const bookWhere: Prisma.BookWhereInput = {
|
|
OR:
|
|
terms != null ? [{ title: { contains: terms } }, { author: { username: terms } }] : undefined
|
|
};
|
|
|
|
const items = await prisma.book.findMany({
|
|
where: bookWhere,
|
|
skip: filter.offset ?? 0,
|
|
take: filter.size ?? 10
|
|
});
|
|
|
|
return {
|
|
items: await Promise.all(items.map(value => toBookSchema(value))),
|
|
total: await prisma.book.count({ where: bookWhere })
|
|
};
|
|
}
|