Skip to content

Commit

Permalink
feat: add search
Browse files Browse the repository at this point in the history
  • Loading branch information
zrll12 committed Aug 29, 2024
1 parent bd9e438 commit d145c7b
Showing 1 changed file with 25 additions and 9 deletions.
34 changes: 25 additions & 9 deletions src/controller/answer/search.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,31 +5,47 @@ use crate::DATABASE;
use axum::extract::Query;
use sea_orm::ColumnTrait;
use sea_orm::{EntityTrait, PaginatorTrait, QueryFilter};
use serde::Deserialize;
use serde::{Deserialize, Serialize};
use tracing::info;
use crate::model::generated::answer;

pub async fn search_answer(AdminTokenInfo(admin): AdminTokenInfo, Query(request): Query<SearchAnswerQuery>) -> Result<String, ErrorMessage> {
info!("Admin {} search answer", admin.id);

let mut answers = Answer::find();

if let Some(survey) = request.survey {
answers = answers.filter(crate::model::generated::answer::Column::Survey.eq(survey));
answers = answers.filter(answer::Column::Survey.eq(survey));
}
if let Some(user) = request.user {
answers = answers.filter(crate::model::generated::answer::Column::User.eq(user));
answers = answers.filter(answer::Column::User.eq(user));
}
if let Some(true) = request.only_unfinished {
answers = answers.filter(answer::Column::Completed.eq(false));
}

let paginator = answers.paginate(&*DATABASE, request.size.unwrap_or(10));
let answers = paginator.fetch_page(request.page).await.unwrap();

let answers = answers.paginate(&*DATABASE, request.size.unwrap_or(10));
let answers = answers.fetch_page(request.page).await.unwrap();
let answers = SearchAnswerResponse {
records: answers,
total: paginator.num_pages().await.unwrap(),
};

Ok(serde_json::to_string(&answers).unwrap())
}

#[derive(Deserialize)]
pub struct SearchAnswerQuery {
pub page: u64,
pub size: Option<u64>,
pub survey: Option<i32>,
pub user: Option<i64>,
page: u64,
size: Option<u64>,
survey: Option<i32>,
user: Option<i64>,
only_unfinished: Option<bool>,
}

#[derive(Serialize)]
pub struct SearchAnswerResponse {
records: Vec<answer::Model>,
total: u64,
}

0 comments on commit d145c7b

Please sign in to comment.