From 10f30dae41d5ce0731f7a511b13d598874cc5ae3 Mon Sep 17 00:00:00 2001 From: Bulat Kurbanov Date: Sat, 28 Sep 2024 22:21:14 +0200 Subject: [PATCH] Update sequence books --- src/views/sequences.rs | 52 +++++++++++++++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 11 deletions(-) diff --git a/src/views/sequences.rs b/src/views/sequences.rs index e647d0c..e89c516 100644 --- a/src/views/sequences.rs +++ b/src/views/sequences.rs @@ -169,16 +169,43 @@ async fn get_sequence_books( }; let books_filter = vec![ - book::is_deleted::equals(false), - book::book_sequences::some(vec![book_sequence::sequence_id::equals(sequence_id)]), - book::lang::in_vec(allowed_langs.clone()), + book_sequence::book::is(vec![ + book::is_deleted::equals(false), + book::lang::in_vec(allowed_langs.clone()), + ]), + book_sequence::sequence_id::equals(sequence.id), ]; - let books_count = db.book().count(books_filter.clone()).exec().await.unwrap(); + let books_count = db + .book_sequence() + .count(books_filter.clone()) + .exec() + .await + .unwrap(); + + let book_sequences = db + .book_sequence() + .find_many(vec![ + book_sequence::book::is(vec![ + book::is_deleted::equals(false), + book::lang::in_vec(allowed_langs.clone()), + ]), + book_sequence::sequence_id::equals(sequence.id), + ]) + .order_by(book_sequence::position::order( + prisma_client_rust::Direction::Asc, + )) + .skip((pagination.page - 1) * pagination.size) + .take(pagination.size) + .exec() + .await + .unwrap(); + + let book_ids: Vec = book_sequences.iter().map(|a| a.book_id).collect(); let books = db .book() - .find_many(books_filter) + .find_many(vec![book::id::in_vec(book_ids)]) .with(book::source::fetch()) .with(book::book_annotation::fetch()) .with( @@ -199,12 +226,15 @@ async fn get_sequence_books( .await .unwrap(); - let page: PageWithParent = PageWithParent::new( - sequence.into(), - books.iter().map(|item| item.clone().into()).collect(), - books_count, - &pagination, - ); + let mut sequence_books = books + .iter() + .map(|item| item.clone().into()) + .collect::>(); + + sequence_books.sort_by(|a, b| a.position.cmp(&b.position)); + + let page: PageWithParent = + PageWithParent::new(sequence.into(), sequence_books, books_count, &pagination); Json(page).into_response() }