From 5f3c21a9a9a0cd25ed5daa7f9658872e15b9d8c9 Mon Sep 17 00:00:00 2001 From: realaravinth Date: Mon, 11 Oct 2021 13:57:07 +0530 Subject: [PATCH] add campaings --- sqlx-data.json | 47 +++++++++++------ .../v1/admin/{challenges.rs => campaigns.rs} | 52 ++++++++++++++----- src/api/v1/admin/mod.rs | 4 ++ 3 files changed, 74 insertions(+), 29 deletions(-) rename src/api/v1/admin/{challenges.rs => campaigns.rs} (60%) diff --git a/sqlx-data.json b/sqlx-data.json index ff4c083..bae81cd 100644 --- a/sqlx-data.json +++ b/sqlx-data.json @@ -1,20 +1,5 @@ { "db": "PostgreSQL", - "07dd9f4c2edd99714b3de90365fdae4f874c66a736c308df6e668ef9b86737dc": { - "query": "INSERT INTO survey_responses (\n user_id, \n device_user_provided,\n device_software_recognised,\n threads\n ) VALUES ($1, $2, $3, $4);", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Uuid", - "Varchar", - "Varchar", - "Int4" - ] - }, - "nullable": [] - } - }, "0d22134cc5076304b7895827f006ee8269cc500f400114a7472b83f0f1c568b5": { "query": "INSERT INTO survey_admins \n (name , password, secret) VALUES ($1, $2, $3)", "describe": { @@ -102,6 +87,22 @@ "nullable": [] } }, + "3e31af624e06a2261fa85f25b5ec4c62a8408cd7283042e24b2aee2998931426": { + "query": "\nINSERT INTO survey_campaigns (\n user_id, ID, name, difficulties, created_at\n ) VALUES(\n (SELECT id FROM survey_admins WHERE name = $1),\n $2, $3, $4, $5\n );", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Uuid", + "Varchar", + "Int4Array", + "Timestamptz" + ] + }, + "nullable": [] + } + }, "43b3e771f38bf8059832169227705be06a28925af1b3799ffef5371d511fd138": { "query": "\n INSERT INTO survey_users (created_at, id) VALUES($1, $2)", "describe": { @@ -229,6 +230,22 @@ "nullable": [] } }, + "b4cd1e5240de1968c8b6d56672cec639b22f41ebf2754dadbf00efe0948c7e68": { + "query": "INSERT INTO survey_responses (\n user_id, \n campaign_id,\n device_user_provided,\n device_software_recognised,\n threads\n ) VALUES ($1, $2, $3, $4, $5);", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid", + "Uuid", + "Varchar", + "Varchar", + "Int4" + ] + }, + "nullable": [] + } + }, "c757589ef26a005e3285e7ab20d8a44c4f2e1cb125f8db061dd198cc380bf807": { "query": "UPDATE survey_admins set name = $1\n WHERE name = $2", "describe": { diff --git a/src/api/v1/admin/challenges.rs b/src/api/v1/admin/campaigns.rs similarity index 60% rename from src/api/v1/admin/challenges.rs rename to src/api/v1/admin/campaigns.rs index 0d08668..623b7d1 100644 --- a/src/api/v1/admin/challenges.rs +++ b/src/api/v1/admin/campaigns.rs @@ -18,6 +18,7 @@ use std::borrow::Cow; use actix_identity::Identity; use actix_web::{web, HttpResponse, Responder}; +use serde::{Deserialize, Serialize}; use sqlx::types::time::OffsetDateTime; use super::get_uuid; @@ -25,14 +26,14 @@ use crate::errors::*; use crate::AppData; pub mod routes { - pub struct Challenges { + pub struct Campaign { pub add: &'static str, } - impl Challenges { - pub const fn new() -> Challenges { - let add = "/api/v1/admin/challenges/add"; - Challenges { add } + impl Campaign { + pub const fn new() -> Campaign { + let add = "/api/v1/admin/campaign/add"; + Campaign { add } } } } @@ -42,7 +43,11 @@ pub mod runners { use super::*; - pub async fn add_runner(data: &AppData) -> ServiceResult { + pub async fn add_runner( + username: &str, + payload: &AddCapmaign, + data: &AppData, + ) -> ServiceResult { let mut uuid; let now = OffsetDateTime::now_utc(); @@ -51,9 +56,17 @@ pub mod runners { let res = sqlx::query!( " - INSERT INTO survey_users (created_at, id) VALUES($1, $2)", - &now, - &uuid +INSERT INTO survey_campaigns ( + user_id, ID, name, difficulties, created_at + ) VALUES( + (SELECT id FROM survey_admins WHERE name = $1), + $2, $3, $4, $5 + );", + username, + &uuid, + &payload.name, + &payload.difficulties, + &now ) .execute(&data.db) .await; @@ -62,7 +75,7 @@ pub mod runners { break; } else if let Err(sqlx::Error::Database(err)) = res { if err.code() == Some(Cow::from("23505")) - && err.message().contains("survey_users_id_key") + && err.message().contains("survey_admins_id_key") { continue; } else { @@ -74,12 +87,23 @@ pub mod runners { } } +#[derive(Serialize, Deserialize)] +pub struct AddCapmaign { + name: String, + difficulties: Vec, +} + pub fn services(cfg: &mut web::ServiceConfig) { cfg.service(add); } -#[my_codegen::post(path = "crate::V1_API_ROUTES.auth.add")] -async fn add(data: AppData, id: Identity) -> ServiceResult { - let uuid = runners::add_runner(&data).await?; - id.remember(uuid.to_string()); +#[my_codegen::post(path = "crate::V1_API_ROUTES.admin.campaign.add")] +async fn add( + payload: web::Json, + data: AppData, + id: Identity, +) -> ServiceResult { + let username = id.identity().unwrap(); + let payload = payload.into_inner(); + let _campaign_id = runners::add_runner(&username, &payload, &data).await?; Ok(HttpResponse::Ok()) } diff --git a/src/api/v1/admin/mod.rs b/src/api/v1/admin/mod.rs index d7efa4b..8042639 100644 --- a/src/api/v1/admin/mod.rs +++ b/src/api/v1/admin/mod.rs @@ -18,6 +18,7 @@ use actix_web::web::ServiceConfig; pub mod account; pub mod auth; +pub mod campaigns; #[cfg(test)] mod tests; @@ -35,10 +36,12 @@ pub fn get_admin_check_login() -> crate::CheckLogin { pub mod routes { use super::account::routes::Account; use super::auth::routes::Auth; + use super::campaigns::routes::Campaign; pub struct Admin { pub auth: Auth, pub account: Account, + pub campaign: Campaign, } impl Admin { @@ -46,6 +49,7 @@ pub mod routes { Admin { account: Account::new(), auth: Auth::new(), + campaign: Campaign::new(), } } }