Skip to content

Commit 02f11d7

Browse files
author
Rafael Ruiz
committed
[FEATURE] Pagination logic added.
1 parent 4bc2866 commit 02f11d7

File tree

6 files changed

+52
-29
lines changed

6 files changed

+52
-29
lines changed

src/infrastructure/controller_collection.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use rust_db_manager_core::{
1010
commons::configuration::configuration::Configuration,
1111
domain::{
1212
collection::generate_collection_query::GenerateCollectionQuery,
13-
filter::data_base_query::DataBaseQuery,
13+
filter::{collection_query::CollectionQuery, data_base_query::DataBaseQuery, document_query::DocumentQuery},
1414
},
1515
};
1616

@@ -53,7 +53,7 @@ impl ControllerCollection {
5353
return Err(exception.into_response());
5454
}
5555

56-
let query = DataBaseQuery::from_data_base(data_base);
56+
let query = DataBaseQuery::from(data_base);
5757

5858
let collections = result.unwrap().collection_find_all(&query).await;
5959
if let Err(error) = collections {
@@ -125,7 +125,7 @@ impl ControllerCollection {
125125
return Err(exception.into_response());
126126
}
127127

128-
let query = DataBaseQuery::from(data_base, collection);
128+
let query = CollectionQuery::from(data_base, collection);
129129

130130
let metadata = result.unwrap().collection_metadata(&query).await;
131131
if let Err(error) = metadata {
@@ -152,7 +152,7 @@ impl ControllerCollection {
152152
return Err(exception.into_response());
153153
}
154154

155-
let query = DataBaseQuery::from(data_base, collection);
155+
let query = CollectionQuery::from(data_base, collection);
156156

157157
let schema = result.unwrap().schema(&query).await;
158158
if let Err(error) = schema {
@@ -175,7 +175,7 @@ impl ControllerCollection {
175175
return Err(exception.into_response());
176176
}
177177

178-
let query = DataBaseQuery::from(data_base, collection);
178+
let query = CollectionQuery::from(data_base, collection);
179179

180180
let documents = result.unwrap().collection_rename(&query, &dto.collection).await;
181181
if let Err(error) = documents {
@@ -198,7 +198,7 @@ impl ControllerCollection {
198198
return Err(exception.into_response());
199199
}
200200

201-
let query = DataBaseQuery::from(data_base, collection);
201+
let query = CollectionQuery::from(data_base, collection);
202202

203203
let documents = result.unwrap().collection_export(&query).await;
204204
if let Err(error) = documents {
@@ -224,7 +224,7 @@ impl ControllerCollection {
224224
return Err(exception.into_response());
225225
}
226226

227-
let query = DataBaseQuery::from(data_base, collection);
227+
let query = CollectionQuery::from(data_base, collection);
228228

229229
let result = result.unwrap().collection_import(&query, documents.to_vec()).await;
230230
if let Err(error) = result {

src/infrastructure/controller_database.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ impl ControllerDataBase {
111111
return Err(exception.into_response());
112112
}
113113

114-
let query = DataBaseQuery::from_data_base(data_base);
114+
let query = DataBaseQuery::from(data_base);
115115

116116
let metadata = result.unwrap().data_base_metadata(&query).await;
117117
if let Err(error) = metadata {

src/infrastructure/controller_document.rs

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use axum::{
2-
extract::Path,
2+
extract::{Path, Query},
33
http::StatusCode,
44
middleware,
55
response::IntoResponse,
@@ -10,16 +10,14 @@ use rust_db_manager_core::{
1010
commons::{
1111
configuration::configuration::Configuration, utils::document_keys_to_filter_element,
1212
},
13-
domain::filter::data_base_query::DataBaseQuery,
13+
domain::filter::{collection_query::CollectionQuery, document_query::DocumentQuery},
1414
};
1515

1616
use crate::commons::exception::api_exception::ApiException;
1717

1818
use super::{
1919
dto::{
20-
document::{dto_document_data::DTODocumentData, dto_document_key::DTODocumentKey},
21-
dto_create_document::DTOCreateDocument,
22-
dto_update_document::DTOUpdateDocument,
20+
collection::dto_collection_data::DTOCollectionData, document::{dto_document_data::DTODocumentData, dto_document_key::DTODocumentKey}, dto_create_document::DTOCreateDocument, dto_update_document::DTOUpdateDocument, pagination::dto_query_pagination::DTOQueryPagination
2321
},
2422
handler, utils,
2523
};
@@ -61,7 +59,7 @@ impl ControllerDocument {
6159
}
6260

6361
let filter = document_keys_to_filter_element(keys);
64-
let query = DataBaseQuery::from_filter(data_base, collection, filter);
62+
let query = DocumentQuery::from_filter(data_base, collection, filter);
6563

6664
let r_document = result.unwrap().find(&query).await;
6765
if let Err(error) = r_document {
@@ -79,7 +77,7 @@ impl ControllerDocument {
7977
Ok(Json(DTODocumentData::from(&document.unwrap())))
8078
}
8179

82-
async fn find_all(Path((service, data_base, collection)): Path<(String, String, String)>) -> Result<Json<Vec<DTODocumentData>>, impl IntoResponse> {
80+
async fn find_all(Path((service, data_base, collection)): Path<(String, String, String)>, Query(params): Query<DTOQueryPagination>) -> Result<Json<DTOCollectionData>, impl IntoResponse> {
8381
let o_db_service = Configuration::find_service(&service);
8482
if o_db_service.is_none() {
8583
return Err(utils::not_found());
@@ -91,18 +89,15 @@ impl ControllerDocument {
9189
return Err(exception.into_response());
9290
}
9391

94-
let query = DataBaseQuery::from(data_base, collection);
92+
let query = DocumentQuery::from(data_base, collection, Some(params.limit), Some(params.offset), None);
9593

96-
let documents = result.unwrap().find_all(&query).await;
97-
if let Err(error) = documents {
94+
let data = result.unwrap().find_all(&query).await;
95+
if let Err(error) = data {
9896
let exception = ApiException::from(StatusCode::INTERNAL_SERVER_ERROR.as_u16(), error);
9997
return Err(exception.into_response());
10098
}
10199

102-
Ok(Json(documents.unwrap().iter()
103-
.map(|d| DTODocumentData::from(d))
104-
.collect())
105-
)
100+
Ok(Json(DTOCollectionData::from(&data.unwrap())))
106101
}
107102

108103
async fn insert(Path((service, data_base, collection)): Path<(String, String, String)>, Json(dto): Json<DTOCreateDocument>) -> Result<Json<DTODocumentData>, impl IntoResponse> {
@@ -117,7 +112,7 @@ impl ControllerDocument {
117112
return Err(exception.into_response());
118113
}
119114

120-
let query = DataBaseQuery::from(data_base, collection);
115+
let query = CollectionQuery::from(data_base, collection);
121116

122117
let document = result.unwrap().insert(&query, &dto.document).await;
123118
if let Err(error) = document {
@@ -150,7 +145,7 @@ impl ControllerDocument {
150145
}
151146

152147
let filter = document_keys_to_filter_element(keys);
153-
let query = DataBaseQuery::from_filter(data_base, collection, filter);
148+
let query = DocumentQuery::from_filter(data_base, collection, filter);
154149

155150
let documents = result.unwrap().update(&query, &dto.document).await;
156151
if let Err(error) = documents {
@@ -186,7 +181,7 @@ impl ControllerDocument {
186181
}
187182

188183
let filter = document_keys_to_filter_element(keys);
189-
let query = DataBaseQuery::from_filter(data_base, collection, filter);
184+
let query = DocumentQuery::from_filter(data_base, collection, filter);
190185

191186
let documents = result.unwrap().delete(&query).await;
192187
if let Err(error) = documents {
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
use rust_db_manager_core::domain::collection::collection_data::CollectionData;
2+
use serde::Serialize;
3+
4+
use crate::infrastructure::dto::document::dto_document_data::DTODocumentData;
5+
6+
#[derive(Clone, Serialize)]
7+
pub struct DTOCollectionData {
8+
total: usize,
9+
limit: Option<usize>,
10+
offset: Option<usize>,
11+
documents: Vec<DTODocumentData>
12+
}
13+
14+
impl DTOCollectionData {
15+
16+
pub fn from(data: &CollectionData) -> Self {
17+
Self {
18+
total: data.total(),
19+
limit: data.limit(),
20+
offset: data.offset(),
21+
documents: data.documents().iter()
22+
.map(|d| DTODocumentData::from(d))
23+
.collect()
24+
}
25+
}
26+
27+
}

src/infrastructure/dto/pagination/dto_query_pagination.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@ use serde::Deserialize;
22

33
#[derive(Debug, Deserialize)]
44
pub struct DTOQueryPagination {
5-
#[serde(default = "default_offset")]
6-
pub offset: usize,
75
#[serde(default = "default_limit")]
86
pub limit: usize,
7+
#[serde(default = "default_offset")]
8+
pub offset: usize,
99
}
1010

11-
fn default_offset() -> usize {
11+
fn default_limit() -> usize {
1212
0
1313
}
1414

15-
fn default_limit() -> usize {
15+
fn default_offset() -> usize {
1616
10
1717
}
1818

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ pub mod domain {
2121
pub mod infrastructure {
2222
pub mod dto {
2323
pub mod collection {
24+
pub mod dto_collection_data;
2425
pub mod dto_generate_collection_query;
2526
pub mod dto_collection_definition;
2627
pub mod dto_rename_collection_query;

0 commit comments

Comments
 (0)