markdown.rs 1.55 KB
use crate::models::markdown;
use crate::Pool;

use actix_web::{Error, HttpResponse, web};
use anyhow::Result;
use serde::Deserialize;

#[derive(Debug, Deserialize)]
pub struct Patchset {
    patch: Option<i32>,
}

pub async fn get_markdowns(pool: web::Data<Pool>)
    -> Result<HttpResponse, Error>
{
    Ok( web::block(move || markdown::get_markdowns(pool.into_inner()))
      . await
      . map(|markdowns| HttpResponse::Ok().json(markdowns))
      . map_err(|_| HttpResponse::InternalServerError())?
      )
}

pub async fn get_markdown( pool: web::Data<Pool>
                         , name: web::Path<String>
                         , patch: web::Query<Patchset>
                         ) -> Result<HttpResponse, Error>
{
    let pool = pool.into_inner();
    let name = name.into_inner();
    let patch = patch.into_inner();

    Ok( web::block(move || markdown::get_markdown(pool, name.as_str(), patch.patch))
      . await
      . map(|markdowns| HttpResponse::Ok().json(markdowns))
      . map_err(|_| HttpResponse::InternalServerError())?
      )
}

pub async fn update_markdown( pool: web::Data<Pool>
                            , name: web::Path<String>
                            , item: web::Json<markdown::MarkdownJson> )
    -> Result<HttpResponse, Error>
{
    let pool = pool.into_inner();
    let name = name.into_inner();
    let item = item.into_inner();

    Ok(web::block(move || markdown::update_markdown(pool, name, item))
       . await
       . map(|markdown| HttpResponse::Ok().json(markdown))
       . map_err(|_| HttpResponse::InternalServerError())?)
}