diff --git a/services/reports/src/http/handlers.rs b/services/reports/src/http/handlers.rs --- a/services/reports/src/http/handlers.rs +++ b/services/reports/src/http/handlers.rs @@ -37,6 +37,24 @@ Ok(response) } +#[derive(Debug, Deserialize)] +struct QueryOptions { + cursor: Option, + // there can be more options here in the future + // e.g. filter by platform, report type, user, etc. +} + +#[get("")] +async fn query_reports( + query: web::Query, + service: ReportsService, +) -> actix_web::Result { + let query = query.into_inner(); + let page = service.list_reports(query.cursor).await?; + let response = HttpResponse::Ok().json(page); + Ok(response) +} + #[get("/{report_id}")] async fn get_single_report( path: web::Path, diff --git a/services/reports/src/http/mod.rs b/services/reports/src/http/mod.rs --- a/services/reports/src/http/mod.rs +++ b/services/reports/src/http/mod.rs @@ -37,6 +37,7 @@ .service( web::scope("/reports") .service(handlers::post_reports) + .service(handlers::query_reports) .service(handlers::get_single_report) .service(handlers::redux_devtools_import), ) diff --git a/services/reports/src/service.rs b/services/reports/src/service.rs --- a/services/reports/src/service.rs +++ b/services/reports/src/service.rs @@ -12,7 +12,10 @@ use tracing::error; use crate::{ - database::{client::DatabaseClient, item::ReportItem}, + database::{ + client::{DatabaseClient, ReportsPage}, + item::ReportItem, + }, report_types::{ReportID, ReportInput, ReportOutput, ReportType}, }; @@ -144,6 +147,14 @@ .map_err(ReportsServiceError::SerdeError)?; Ok(Some(redux_devtools_payload)) } + + pub async fn list_reports( + &self, + cursor: Option, + ) -> ServiceResult { + let page = self.db.scan_reports(cursor).await?; + Ok(page) + } } impl FromRequest for ReportsService {