def resolve_reviews_years(self, info): user_id = utils.validate_user_id(request, info.context["secret"]) reviews = ( types.Review.get_query(info) .filter(models.Review.user_id == user_id) .distinct(SA.extract("year", models.Review.created)) .all() ) return [review.created.year for review in reviews]
def mutate(root, info, book_id): user_id = utils.validate_user_id(request, info.context["secret"]) session = info.context["session"] types.Backlog.get_query(info).filter( models.Backlog.book_id == book_id).filter( models.Backlog.user_id == user_id).delete() session.commit() return DeleteBacklogEntry(ok=True)
def resolve_backlog(self, info): user_id = utils.validate_user_id(request, info.context["secret"]) session = info.context["session"] reviewed_books_ids = ( session.query(models.Review.book_id).filter(models.Review.user_id == user_id).subquery() ) return ( types.Backlog.get_query(info) .filter(models.Backlog.user_id == user_id) .filter(models.Backlog.book_id.notin_(reviewed_books_ids)) .all() )
def mutate(root, info, book_id, comment, value, date=None): user_id = utils.validate_user_id(request, info.context["secret"]) if not date: date = datetime.now() session = info.context["session"] new_review = models.Review(user_id=user_id, book_id=book_id, value=value, comment=comment, created=date) session.add(new_review) session.commit() return CreateReview(review=new_review)
def mutate(root, info, title, author, cover_url=None, release_date=None): _ = utils.validate_user_id(request, info.context["secret"]) new_book = models.Book( title=title, author=author, release_date=release_date, cover_url=cover_url, suggestion=True, ) session = info.context["session"] session.add(new_book) session.commit() return CreateBookSuggestion(book=new_book)
def resolve_books_by_title(self, info, title, already_reviewed=False): user_id = utils.validate_user_id(request, info.context["secret"]) session = info.context["session"] reviewed_books_ids = ( session.query(models.Review.book_id).filter(models.Review.user_id == user_id).subquery() ) books_query = ( types.Book.get_query(info) .filter(models.Book.title.ilike(f"%{title}%")) .filter(SA.not_(models.Book.suggestion)) ) if not already_reviewed: books_query = books_query.filter(models.Book.id.notin_(reviewed_books_ids)) return books_query.limit(SEARCH_LIMIT).all()
def mutate(root, info, book_id): user_id = utils.validate_user_id(request, info.context["secret"]) prev_backlog_entry = (types.Backlog.get_query(info).filter( models.Backlog.user_id == user_id).filter( models.Backlog.book_id == book_id).first()) if prev_backlog_entry: raise ValueError("Book already in backlog") backlog_entry = models.Backlog(user_id=user_id, book_id=book_id) session = info.context["session"] session.add(backlog_entry) session.commit() return AddBacklogEntry(ok=True)
def resolve_reviews(self, info, year=None, page=1): user_id = utils.validate_user_id(request, info.context["secret"]) review_query = types.Review.get_query(info).filter(models.Review.user_id == user_id) if year: review_query = review_query.filter(SA.extract("year", models.Review.created) == year) reviews_count = review_query.count() page_count = math.ceil(reviews_count / REVIEW_PAGE_SIZE) reviews = ( review_query.order_by(models.Review.created.desc()) .offset((page - 1) * REVIEW_PAGE_SIZE) .limit(REVIEW_PAGE_SIZE) .all() ) return {"items": reviews, "page_info": {"total_pages": page_count, "current_page": page}}
def resolve_user(self, info): user_id = utils.validate_user_id(request, info.context["secret"]) return types.User.get_query(info).filter(models.User.id == user_id).first()