diff --git a/src/api/v1/admin/campaigns.rs b/src/api/v1/admin/campaigns.rs index 6a3878c..ade1a0d 100644 --- a/src/api/v1/admin/campaigns.rs +++ b/src/api/v1/admin/campaigns.rs @@ -361,7 +361,30 @@ pub fn services(cfg: &mut web::ServiceConfig) { cfg.service(add); cfg.service(delete); cfg.service(list_campaign); - //cfg.service(get_feedback); + cfg.service(get_campaign_resutls); +} + +#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)] +pub struct ResultsPage { + pub page: Option, +} + +#[actix_web_codegen_const_routes::get( + path = "crate::V1_API_ROUTES.admin.campaign.results", + wrap = "get_admin_check_login()" +)] +pub async fn get_campaign_resutls( + id: Identity, + query: web::Query, + path: web::Path, + data: AppData, +) -> ServiceResult { + let username = id.identity().unwrap(); + let page = query.page.unwrap_or(0); + + let results = runners::get_results(&username, &path, &data, page, 50).await?; + + Ok(HttpResponse::Ok().json(results)) } #[actix_web_codegen_const_routes::post(path = "crate::V1_API_ROUTES.admin.campaign.add")] @@ -440,6 +463,7 @@ mod tests { let cookies = get_cookie!(signin_resp); let survey = get_survey_user(data.clone()).await; let survey_cookie = get_cookie!(survey); + let app = get_app!(data).await; let campaign = create_new_campaign(NAME, data.clone(), cookies.clone()).await; let campaign_config = @@ -483,6 +507,18 @@ mod tests { ); assert_eq!(responses[0].device_user_provided, DEVICE_USER_PROVIDED); + let results_resp = get_request!( + &app, + &V1_API_ROUTES + .admin + .campaign + .get_results_route(&campaign.campaign_id), + cookies.clone() + ); + assert_eq!(results_resp.status(), StatusCode::OK); + let res: Vec = test::read_body_json(results_resp).await; + assert_eq!(responses, res); + bad_post_req_test_witout_payload( NAME, PASSWORD,