[package]name="teach_used"version="0.1.0"edition="2021"authors=["Kkbt <snowandocean@foxmail.com>"]# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies]rocket={version="0.5.0-rc.1",features=["json"]}diesel="1.4.8"[dependencies.rocket_sync_db_pools]version="0.1.0-rc.1"default-features=falsefeatures=["diesel_sqlite_pool"]
usediesel::{prelude::*,QueryDsl,RunQueryDsl};userocket::serde::json::{serde_json::json,Json,Value};userocket::{delete,get,post,put,response::status::Created,response::Debug};usecrate::module::{Article,PostArticle};usecrate::schema::article;usecrate::MainDbConn;typeResult<T,E=Debug<diesel::result::Error>>=std::result::Result<T,E>;#[get("/")]pubfnindex()-> Value{json!({"kkbt":"Hello, world!"})}// 查 all
#[get("/article")]pubasyncfnget_all_articles(db: MainDbConn)-> Result<Json<Vec<Article>>>{letall=db.run(move|conn|article::table.load::<Article>(conn)).await?;Ok(Json(all))}// 查 by id
#[get("/article/<in_id>")]pubasyncfnget_article_by_id(db: MainDbConn,in_id: i32)-> Option<Json<Article>>{db.run(move|conn|article::table.filter(article::id.eq(in_id)).first(conn)).await.map(Json).ok()}// 增
#[post("/article", format = "json", data = "<in_article>")]pubasyncfnpost_article(db: MainDbConn,in_article: Json<PostArticle>,)-> Result<Created<Json<PostArticle>>>{letarticle_in=in_article.clone();db.run(move|conn|{diesel::insert_into(article::table).values(&article_in).execute(conn)}).await?;Ok(Created::new("/").body(in_article))}// 改 by id
#[put("/article/<in_id>", format = "json", data = "<in_article>")]pubasyncfnput_article(db: MainDbConn,in_id: i32,in_article: Json<PostArticle>,)-> Result<Option<()>>{letaffected=db.run(move|conn|{diesel::update(article::table.filter(article::id.eq(in_id))).set(in_article.into_inner()).execute(conn)}).await?;Ok((affected==1).then(||()))}// 删 by id
#[delete("/article/<in_id>")]pubasyncfndelete_article(db: MainDbConn,in_id: i32)-> Result<Option<()>>{letaffected=db.run(move|conn|{diesel::delete(article::table).filter(article::id.eq(&in_id)).execute(conn)}).await?;Ok((affected==1).then(||()))}// 删 all
#[delete("/article/all")]pubasyncfndelete_all_articles(db: MainDbConn)-> Result<()>{db.run(move|conn|diesel::delete(article::table).execute(conn)).await?;Ok(())}