elif_http/controller/
pagination.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Serialize, Deserialize)]
7pub struct QueryParams {
8 pub page: Option<u32>,
9 pub per_page: Option<u32>,
10 pub search: Option<String>,
11 pub filter: Option<String>,
12 pub sort: Option<String>,
13 pub order: Option<String>,
14}
15
16impl Default for QueryParams {
17 fn default() -> Self {
18 Self {
19 page: Some(1),
20 per_page: Some(10),
21 search: None,
22 filter: None,
23 sort: None,
24 order: None,
25 }
26 }
27}
28
29#[derive(Debug, Serialize)]
31pub struct PaginationMeta {
32 pub current_page: u32,
33 pub per_page: u32,
34 pub total_items: u64,
35 pub total_pages: u32,
36 pub has_next: bool,
37 pub has_prev: bool,
38}
39
40impl PaginationMeta {
41 pub fn new(page: u32, per_page: u32, total: u64) -> Self {
42 let total_pages = if per_page > 0 {
43 (total as f64 / per_page as f64).ceil() as u32
44 } else {
45 0
46 };
47
48 Self {
49 current_page: page,
50 per_page,
51 total_items: total,
52 total_pages,
53 has_next: page < total_pages,
54 has_prev: page > 1,
55 }
56 }
57}