added book details, update, delete. fixes

This commit is contained in:
lnn0q 2025-06-01 19:37:13 +03:00
parent d1da980501
commit b5738c610d
12 changed files with 290 additions and 16 deletions

View file

@ -14,6 +14,8 @@ import { UserOneResolver } from './resolvers/userOneResolver';
import { LoginResolver } from './resolvers/auth/login';
import { LogoutResolver } from './resolvers/auth/logout';
import { SignUpResolver } from './resolvers/auth/signUp';
import { BookUpdateResolver } from './resolvers/bookUpdateResolver';
import { BookDeleteResolver } from './resolvers/bookDeleteResolver';
import { BookChapterCreateResolver } from './resolvers/bookChapterCreateResolver';
import { BookChapterDeleteResolver } from './resolvers/bookChapterDelete';
import { BookChapterUpdateResolver } from './resolvers/bookChapterUpdateResolver';
@ -36,6 +38,8 @@ export const Mutation: MutationResolvers = {
login: LoginResolver,
logout: LogoutResolver,
bookCreate: BookCreateResolver,
bookUpdate: BookUpdateResolver,
bookDelete: BookDeleteResolver,
bookChapterCreate: BookChapterCreateResolver,
bookChapterDelete: BookChapterDeleteResolver,
bookChapterUpdate: BookChapterUpdateResolver,

View file

@ -0,0 +1,22 @@
import { ensureIdentity } from '@app/server/helpers';
import { IdentityContext } from '@app/server/identity';
import { prisma } from '@app/server/prisma/client';
import { MutationBookDeleteArgs } from '@generated/types';
export async function BookDeleteResolver(
_: any,
{ id }: MutationBookDeleteArgs,
{ identity }: IdentityContext
): Promise<void> {
ensureIdentity(identity);
const model = await prisma.book.findUniqueOrThrow({
where: { id }
});
if (identity.id !== model.authorId) throw new Error('Operation is not permitted.');
await prisma.book.delete({
where: { id }
});
}

View file

@ -0,0 +1,34 @@
import { ensureIdentity } from '@app/server/helpers';
import { IdentityContext } from '@app/server/identity';
import { prisma } from '@app/server/prisma/client';
import { Book, MutationBookUpdateArgs } from '@generated/types';
import { toBookSchema } from './mappers/bookMapper';
export async function BookUpdateResolver(
_: any,
{ input }: MutationBookUpdateArgs,
{ req, res, identity }: IdentityContext
): Promise<Book> {
ensureIdentity(identity);
const model = await prisma.book.findUniqueOrThrow({
where: { id: input.id }
});
if (identity.id !== model.authorId) throw new Error('Operation is not permitted.');
if (input.title != null && input.title.length > 60) throw new Error('Title is too long.');
if (input.description != null && input.description.length > 900)
throw new Error('Description is too long.');
const modelUpdated = await prisma.book.update({
where: { id: input.id },
data: {
title: input.title != null ? input.title : undefined,
description: input.description != null ? input.description : undefined,
progressStatus: input.progressStatus != null ? input.progressStatus : undefined
}
});
return toBookSchema(modelUpdated, { req, res, identity });
}

View file

@ -16,6 +16,8 @@ type Mutation {
login(input: LoginInput!): Session!
logout: Void
bookCreate(input: BookCreateInput!): Book!
bookUpdate(input: BookUpdateInput!): Book!
bookDelete(id: ID!): Void
bookChapterCreate(input: BookChapterCreateInput!): BookChapter!
bookChapterUpdate(input: BookChapterUpdateInput!): BookChapter!
bookChapterDelete(id: ID!): Book!
@ -97,7 +99,7 @@ type Book {
personalRating: RatingType!
}
input BookUpdate {
input BookUpdateInput {
id: ID!
title: String
description: String

View file

@ -74,7 +74,7 @@ model BookChapter {
wordsTotal Int @default(0)
book Book @relation(fields: [bookId], references: [id])
book Book @relation(fields: [bookId], references: [id], onDelete: Cascade)
bookId String @db.VarChar(255)
reviews Review[]
@ -94,10 +94,10 @@ model Review {
user User @relation(fields: [userId], references: [id])
userId String @db.VarChar(255)
bookChapter BookChapter? @relation(fields: [bookChapterId], references: [id])
bookChapter BookChapter? @relation(fields: [bookChapterId], references: [id], onDelete: Cascade)
bookChapterId String? @db.VarChar(255)
book Book? @relation(fields: [bookId], references: [id])
book Book? @relation(fields: [bookId], references: [id], onDelete: Cascade)
bookId String?
}