diff --git a/CHANGELOG.md b/CHANGELOG.md index e19dd0f..73a400e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [1.21.0](https://github.com/amalv/apollo-server-lambda-postgres/compare/v1.20.0...v1.21.0) (2024-01-04) + + +### Features + +* **Book:** add isFavorited to GraphQL schema and resolver ([750f299](https://github.com/amalv/apollo-server-lambda-postgres/commit/750f299386d9eeb16a1b197ddc4e57470c750d96)) + # [1.20.0](https://github.com/amalv/apollo-server-lambda-postgres/compare/v1.19.0...v1.20.0) (2024-01-04) diff --git a/src/graphql/resolvers/Book.ts b/src/graphql/resolvers/Book.ts index 3f42573..3804a16 100644 --- a/src/graphql/resolvers/Book.ts +++ b/src/graphql/resolvers/Book.ts @@ -1,11 +1,19 @@ import { dataSource } from "../../data-source"; import { Book } from "../../entity/Book"; +import { Favorite } from "../../entity/Favorite"; +import { User } from "../../entity/User"; export const BookResolvers = { Query: { books: async ( _: any, - args: { title?: string; author?: string; cursor?: string; limit?: number } + args: { + title?: string; + author?: string; + cursor?: string; + limit?: number; + }, + context: { userId?: string } ) => { try { const dataSourceInstance = await dataSource; @@ -27,6 +35,18 @@ export const BookResolvers = { author: `%${args.author.toLowerCase()}%`, }); } + let userId; + + if (context.userId) { + const user = await dataSourceInstance.getRepository(User).findOne({ + where: { auth0Id: context.userId }, + }); + if (user) { + userId = user.id; + } + } + + queryBuilder.leftJoinAndSelect("book.favorites", "favorite"); books = await queryBuilder .orderBy("book.id", "ASC") @@ -38,7 +58,22 @@ export const BookResolvers = { return { cursor: newCursor, - books, + books: books.map((book) => { + const isFavorited = userId + ? book.favorites.some((favorite) => favorite.userId === userId) + : false; + + return { + id: book.id, + title: book.title, + author: book.author, + publicationDate: book.publicationDate, + image: book.image, + rating: book.rating, + ratingsCount: book.ratingsCount, + isFavorited, + }; + }), }; } catch (error) { console.error("Error fetching books:", error); diff --git a/src/graphql/types/Book.ts b/src/graphql/types/Book.ts index 04d1667..4c3d49c 100644 --- a/src/graphql/types/Book.ts +++ b/src/graphql/types/Book.ts @@ -8,5 +8,6 @@ export const BookType = ` rating: Float! ratingsCount: Int! favorites: [Favorite!]! + isFavorited: Boolean! } `;