diff --git a/server/src/graphql.rs b/server/src/graphql.rs index dcc9400..06341a9 100644 --- a/server/src/graphql.rs +++ b/server/src/graphql.rs @@ -40,6 +40,11 @@ struct Tag { #[Object] impl QueryRoot { + async fn count<'ctx>(&self, ctx: &Context<'ctx>, query: String) -> Result { + let nm = ctx.data_unchecked::(); + Ok(nm.count(&query)?) + } + async fn search<'ctx>( &self, ctx: &Context<'ctx>, @@ -59,7 +64,7 @@ impl QueryRoot { info!("{after:?} {before:?} {first:?} {last:?} {query}"); let mut start = 0usize; let total = nm.count(&query)?; - let mut end = total; + let page_size = first.unwrap_or(20); if let Some(after) = after { if after >= total { @@ -67,6 +72,10 @@ impl QueryRoot { } start = after + 1; } + let mut end = start + page_size; + if end > total { + end = total; + } // TODO(wathiede): handle last/end. if let Some(before) = before { @@ -95,11 +104,11 @@ impl QueryRoot { /* if let Some(first) = first { - slice = &slice[..first.min(slice.len())]; - end -= first.min(slice.len()); + slice = &slice[..first.min(slice.len())]; + end -= first.min(slice.len()); } else if let Some(last) = last { - slice = &slice[slice.len() - last.min(slice.len())..]; - start = end - last.min(slice.len()); + slice = &slice[slice.len() - last.min(slice.len())..]; + start = end - last.min(slice.len()); } */