У меня есть книга лайков, содержащая массив идентификаторов пользователей. Пользователь может любить и отличать книгу. Если им понравится книга, их userId будет помещен в book.likes. Если они не похожи на книгу, их userId будет удален из book.likes
До сих пор я мог разрешить пользователю лайкать книгу (хотя я чувствовал, что должен быть лучший способ ). Однако я не могу реализовать непохожую функцию. Я стараюсь избегать использования метода фильтрации, потому что, если массив станет слишком большим, метод фильтрации не будет эффективным (если нет другого способа, мне придется вернуться к методу фильтра)
Мне нравится использовать конструктор запросов Typeorm для выполнения функции "вытаскивания" идентификатора пользователя из массива book.likes, если пользователь не похож на книгу. Кто-нибудь знает, как это сделать? Спасибо
@Mutation(() => Boolean)
@UseMiddleware(isAuth)
async likeBook(
@Arg("bookId") bookId: string,
@Ctx() { payload }: ContextType
): Promise<boolean> {
const book = await Book.findOne({ where: { id: bookId } });
if (!book) {
return false;
}
const like = await getManager()
.createQueryBuilder(Book, "book")
.where("book.id = :bookId", { bookId: bookId })
.andWhere("book.likes @> ARRAY[:userId]", { userId: payload?.userId })
.getOne();
console.log("list ", like);
if (!like) {
book.likes.push(payload?.userId!);
book.save();
}
// Implement unlike feature
return true;
}