Skip to content

Commit

Permalink
feat: add create page
Browse files Browse the repository at this point in the history
  • Loading branch information
zrll12 committed Aug 24, 2024
1 parent 8d6b84d commit 9541ec5
Show file tree
Hide file tree
Showing 24 changed files with 77 additions and 62 deletions.
11 changes: 5 additions & 6 deletions src/controller/answer/get.rs
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
use axum::extract::Path;
use axum::Json;
use sea_orm::EntityTrait;
use tracing::info;
use crate::controller::error::ErrorMessage;
use crate::DATABASE;
use crate::model::generated::answer;
use crate::model::generated::prelude::Answer;
use crate::service::admin::AdminTokenInfo;
use sea_orm::QueryFilter;
use crate::DATABASE;
use axum::extract::Path;
use sea_orm::ColumnTrait;
use sea_orm::EntityTrait;
use sea_orm::QueryFilter;
use tracing::info;

pub async fn get_answer(Path(id): Path<i32>, AdminTokenInfo(admin): AdminTokenInfo) -> Result<String, ErrorMessage> {
info!("Admin {} get answer {}", admin.id, id);
Expand Down
2 changes: 1 addition & 1 deletion src/controller/answer/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ mod submit;
mod get;
mod search;

use axum::Router;
use axum::routing::get;
use axum::Router;

pub fn get_answer_routes() -> Router {
Router::new()
Expand Down
8 changes: 4 additions & 4 deletions src/controller/answer/search.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
use axum::extract::Query;
use sea_orm::{EntityTrait, PaginatorTrait, QueryFilter};
use tracing::info;
use crate::controller::error::ErrorMessage;
use crate::DATABASE;
use crate::model::generated::prelude::Answer;
use crate::service::admin::AdminTokenInfo;
use crate::DATABASE;
use axum::extract::Query;
use sea_orm::ColumnTrait;
use sea_orm::{EntityTrait, PaginatorTrait, QueryFilter};
use serde::Deserialize;
use tracing::info;

pub async fn search_answer(AdminTokenInfo(admin): AdminTokenInfo, Query(request): Query<SearchAnswerQuery>) -> Result<String, ErrorMessage> {
info!("Admin {} search answer", admin.id);
Expand Down
8 changes: 4 additions & 4 deletions src/controller/answer/submit.rs
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
use crate::controller::error::ErrorMessage;
use crate::model::generated::{answer, survey};
use crate::model::generated::prelude::{Answer, Survey};
use crate::model::generated::{answer, survey};
use crate::service::questions::{get_page_by_id, get_question_by_id};
use crate::service::token::TokenInfo;
use crate::DATABASE;
use axum::Json;
use sea_orm::ActiveValue::Set;
use sea_orm::{ActiveModelTrait, ColumnTrait, FromQueryResult, NotSet, QuerySelect, SelectColumns};
use sea_orm::{EntityTrait, IntoActiveModel, QueryFilter};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use sea_orm::ActiveValue::Set;
use serde_json::json;
use crate::service::questions::{get_page_by_id, get_question_by_id};
use std::collections::HashMap;

pub async fn submit_answer(TokenInfo(user): TokenInfo, Json(request): Json<SubmitRequest>) -> Result<String, ErrorMessage> {
let complete = request.complete.unwrap_or(false);
Expand Down
2 changes: 1 addition & 1 deletion src/controller/auth.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use axum::http::HeaderMap;
use crate::controller::error::ErrorMessage;
use axum::http::HeaderMap;

pub async fn get_token() -> String {
crate::service::token::create_token().await
Expand Down
2 changes: 1 addition & 1 deletion src/controller/judge/mod.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
mod start;

use axum::Router;
use axum::routing::get;
use axum::Router;

pub fn get_judge_routers() -> Router {
Router::new()
Expand Down
14 changes: 7 additions & 7 deletions src/controller/judge/start.rs
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
use std::collections::HashMap;
use crate::controller::error::ErrorMessage;
use crate::model::generated::prelude::{Answer, Page, Survey};
use crate::model::question::Question;
use crate::service::admin::AdminTokenInfo;
use crate::service::judge::judge_subjectives;
use crate::service::questions::get_question_by_id;
use crate::DATABASE;
use axum::extract::Query;
use sea_orm::ColumnTrait;
use sea_orm::{EntityTrait, QueryFilter};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use tracing::info;
use uuid::Uuid;
use crate::controller::error::ErrorMessage;
use crate::DATABASE;
use crate::model::question::Question;
use crate::service::admin::AdminTokenInfo;
use crate::service::judge::judge_subjectives;
use crate::service::questions::get_question_by_id;

pub async fn auto_judge(Query(query): Query<JudgeRequest>, AdminTokenInfo(admin): AdminTokenInfo) -> Result<String, ErrorMessage> {
info!("Admin {} is judging survey {}", admin.id, query.survey);
Expand Down
4 changes: 2 additions & 2 deletions src/controller/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ mod judge;
mod refresh;
mod ping;

use axum::{Router};
use axum::routing::get;
use crate::controller::auth::{get_token, get_user};
use axum::routing::get;
use axum::Router;

pub fn all_routers() -> Router {
Router::new()
Expand Down
1 change: 0 additions & 1 deletion src/controller/oauth/callback.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
use crate::service::token::activate_token;
use crate::OAUTH_CONFIG;
use axum::extract::Query;
use futures::TryFutureExt;
use reqwest::Client;
use serde::{Deserialize, Serialize};

Expand Down
2 changes: 1 addition & 1 deletion src/controller/oauth/mod.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use axum::Router;
use axum::routing::get;
use axum::Router;

pub mod callback;

Expand Down
3 changes: 2 additions & 1 deletion src/controller/question/mod.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use axum::routing::get;
use axum::routing::{get, post};
use axum::Router;

mod page;
Expand All @@ -9,5 +9,6 @@ pub fn get_question_routers() -> Router {
Router::new()
.route("/", get(page::get_page).post(modify::new_question).put(modify::modify_question))
.route("/:question", get(question::get_question))
.route("/sheet", post(page::new_page))
.route("/admin/:question", get(question::get_admin_question))
}
2 changes: 1 addition & 1 deletion src/controller/question/modify.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use crate::model::question::{Answer, Condition, QuestionType};
use crate::model::ValueWithTitle;
use crate::service::questions::save_question;
use axum::Json;
use serde::Serialize;
use crate::model::ValueWithTitle;

pub async fn new_question(Json(question): Json<NewQuestionRequest>) -> String {
let content = serde_json::to_value(question.content).unwrap();
Expand Down
26 changes: 26 additions & 0 deletions src/controller/question/page.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
use crate::controller::error::ErrorMessage;
use crate::model::generated::page;
use crate::service::admin::AdminTokenInfo;
use crate::service::questions::get_page_by_id;
use crate::service::token::TokenInfo;
use axum::extract::Query;
use sea_orm::ActiveValue::Set;
use sea_orm::{ActiveModelTrait, NotSet};
use serde::Deserialize;
use tracing::info;
use uuid::Uuid;

pub async fn get_page(Query(query): Query<GetPageQuery>, TokenInfo(user): TokenInfo) -> Result<String, ErrorMessage> {
info!("User {} is trying to get page {}", user.uid, query.page);
Expand All @@ -16,7 +21,28 @@ pub async fn get_page(Query(query): Query<GetPageQuery>, TokenInfo(user): TokenI
Ok(serde_json::to_string(&page).unwrap())
}

pub async fn new_page(Query(query): Query<CreatePageRequest>, AdminTokenInfo(admin): AdminTokenInfo) -> String {
info!("Admin {} create new page", admin.id);
let id = Uuid::new_v4().to_string();

let page = page::ActiveModel {
id: Set(id),
title: Set(query.title),
content: Set(Vec::new()),
next: NotSet,
};

let page = page.insert(&*crate::DATABASE).await.unwrap();

page.id
}

#[derive(Deserialize)]
pub struct GetPageQuery {
page: String,
}

#[derive(Deserialize)]
pub struct CreatePageRequest {
title: String,
}
2 changes: 1 addition & 1 deletion src/controller/question/question.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
use crate::controller::error::ErrorMessage;
use crate::service::admin::AdminTokenInfo;
use crate::service::questions::get_question_by_id;
use crate::service::token::TokenInfo;
use axum::extract::Path;
use tracing::info;
use crate::service::admin::AdminTokenInfo;

pub async fn get_question(Path(question): Path<String>, TokenInfo(user): TokenInfo) -> Result<String, ErrorMessage> {
info!("User {} is trying to get question {}", user.uid, question);
Expand Down
4 changes: 2 additions & 2 deletions src/controller/refresh.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use crate::service::admin::AdminTokenInfo;
use crate::service::questions::CacheType;
use axum::extract::Query;
use serde::Deserialize;
use tracing::info;
use crate::service::admin::AdminTokenInfo;
use crate::service::questions::CacheType;

pub async fn refresh_cache(Query(query): Query<RefreshType>, AdminTokenInfo(admin): AdminTokenInfo) {
info!("Admin {} is refreshing {:?} cache", admin.id, query.r#type);
Expand Down
2 changes: 1 addition & 1 deletion src/controller/survey/mod.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
mod query;
mod modify;

use axum::Router;
use axum::routing::get;
use axum::Router;

pub fn get_survey_routes() -> Router {
Router::new()
Expand Down
2 changes: 0 additions & 2 deletions src/controller/survey/modify.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ use crate::DATABASE;
use axum::Json;
use sea_orm::prelude::DateTime;
use sea_orm::ActiveValue::Set;
use sea_orm::EntityTrait;
use sea_orm::QueryFilter;
use sea_orm::{ActiveModelTrait, NotSet};
use serde::Deserialize;
use tracing::info;
Expand Down
6 changes: 3 additions & 3 deletions src/controller/survey/query.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use axum::extract::{Path, Query};
use sea_orm::{ColumnTrait, EntityTrait, PaginatorTrait, QueryFilter};
use crate::DATABASE;
use crate::model::generated::prelude::Survey;
use crate::model::generated::survey;
use crate::DATABASE;
use axum::extract::{Path, Query};
use sea_orm::{ColumnTrait, EntityTrait, PaginatorTrait, QueryFilter};

pub async fn query_surveys(Query(query): Query<QueryParams>) -> String {
let size = query.size.unwrap_or(10);
Expand Down
4 changes: 2 additions & 2 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ use axum::http::HeaderValue;
use axum::Router;
use axum_server::tls_rustls::RustlsConfig;
use lazy_static::lazy_static;
use sea_orm::{ActiveModelTrait, ConnectOptions, Database, DatabaseConnection};
use migration::{Migrator, MigratorTrait};
use sea_orm::{ConnectOptions, Database, DatabaseConnection};
use tower_http::catch_panic::CatchPanicLayer;
use tower_http::classify::StatusInRangeAsFailures;
use tower_http::cors::CorsLayer;
Expand All @@ -16,7 +17,6 @@ use tracing_subscriber::fmt::time::ChronoLocal;
use tracing_subscriber::layer::SubscriberExt;
use tracing_subscriber::util::SubscriberInitExt;
use tracing_subscriber::{fmt, EnvFilter, Registry};
use migration::{Migrator, MigratorTrait};

use crate::config::core::CoreConfig;
use crate::config::get_config;
Expand Down
2 changes: 0 additions & 2 deletions src/model/question.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ use crate::model::ValueWithTitle;
use serde::{Deserialize, Serialize};
use std::str::FromStr;
use sea_orm::JsonValue;
use serde_json::Value;
use tracing::log::debug;
use uuid::Uuid;

#[derive(Serialize, Deserialize, Clone, Debug)]
Expand Down
2 changes: 1 addition & 1 deletion src/service/admin.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
use crate::controller::error::ErrorMessage;
use crate::model::generated::admin;
use crate::model::generated::prelude::Admin;
use crate::service::token::get_user_id;
use axum::extract::FromRequestParts;
use axum::http::request::Parts;
use migration::async_trait::async_trait;
use sea_orm::ColumnTrait;
use sea_orm::{EntityTrait, QueryFilter};
use crate::service::token::get_user_id;

pub async fn get_admin_by_id(id: i32) -> Option<admin::Model> {
Admin::find()
Expand Down
12 changes: 3 additions & 9 deletions src/service/judge.rs
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
use crate::model::question::Answer;
use crate::model::question::{Condition, ConditionInner, ConditionType, Question, QuestionType};
use std::collections::HashMap;
use std::str::FromStr;
use futures::executor::block_on;
use crate::model::question::{ConditionType, Question, QuestionType};
use crate::service::questions::get_question_by_id;
use sea_orm::JsonValue;
use std::collections::HashMap;
use tracing::debug;
use uuid::Uuid;
use crate::model::ValueWithTitle;
use crate::service::questions::{get_question_by_id, save_question};

pub async fn judge_subjectives(questions: &Vec<Question>, answer: &HashMap<String, String>) -> (i32, i32, HashMap<Uuid, i32>) {
let mut score = HashMap::new();
Expand Down Expand Up @@ -146,11 +142,9 @@ async fn whether_invisible(question: &Question, answer: &HashMap<String, String>
}
}
ConditionType::Or => {
let mut inner_flag = false;
for cond in &c.conditions {
if let Some(ans) = answer.get(cond.id.to_string().as_str()) {
if !is_equal(get_question_by_id(&cond.id.to_string()).await.unwrap().r#type, ans, cond.value.clone()) {
inner_flag = true;
break;
}
}
Expand Down
12 changes: 6 additions & 6 deletions src/service/questions.rs
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
use sea_orm::ColumnTrait;
use crate::model::generated::prelude::{Page, Question};
use crate::model::generated::{page, question};
use crate::model::question::QuestionType;
use crate::DATABASE;
use lazy_static::lazy_static;
use moka::future::Cache;
use sea_orm::{ActiveModelTrait, EntityTrait, JsonValue, QueryFilter};
use sea_orm::ActiveValue::Set;
use sea_orm::ColumnTrait;
use sea_orm::{ActiveModelTrait, EntityTrait, JsonValue, QueryFilter};
use serde::{Deserialize, Serialize};
use uuid::Uuid;
use crate::DATABASE;
use crate::model::generated::{page, question};
use crate::model::generated::prelude::{Page, Question};
use crate::model::question::QuestionType;

lazy_static! {
static ref QUESTIO_CACHE: Cache<String, question::Model> = Cache::new(10000);
Expand Down
6 changes: 3 additions & 3 deletions src/service/token.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
use std::time::Duration;
use crate::controller::error::ErrorMessage;
use crate::controller::oauth::callback::UserData;
use axum::async_trait;
use axum::extract::FromRequestParts;
use axum::http::request::Parts;
use lazy_static::lazy_static;
use moka::future::Cache;
use rand::Rng;
use crate::controller::error::ErrorMessage;
use crate::controller::oauth::callback::UserData;
use std::time::Duration;

lazy_static! {
static ref TOKEN_CACHE: Cache<String, Option<UserData>> = Cache::builder()
Expand Down

0 comments on commit 9541ec5

Please sign in to comment.