From 0ad35b9b50dfaa1083f3f5acc633ec769bc10e37 Mon Sep 17 00:00:00 2001 From: Andrew Guschin Date: Sun, 18 Apr 2021 16:25:48 +0400 Subject: Initial commit --- src/views.rs | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/views.rs (limited to 'src/views.rs') diff --git a/src/views.rs b/src/views.rs new file mode 100644 index 0000000..3622719 --- /dev/null +++ b/src/views.rs @@ -0,0 +1,45 @@ +use actix_web::{get, post, HttpResponse, Responder}; +use diesel::prelude::*; +use crate::models::{Post, PostResponse}; +use crate::validator::Validator; +use crate::db; +use serde_json; + +#[get("/")] +pub async fn hello() -> impl Responder { + HttpResponse::Ok().body("Hello world!") +} + +#[post("/api/posts/add")] +pub async fn echo(req_body: String) -> impl Responder { + let validator = Validator::from_file("schemas/post.json").unwrap(); + let result = validator.check(&req_body); + + if !result { + return HttpResponse::BadRequest().json(PostResponse { + msg: "Message doesn't conform to schema" + }); + } + + let conn = db::establish_connection(); + let new_post: Post = serde_json::from_str(&req_body).unwrap(); + let result = db::create_post(&conn, &new_post); + return match result { + Ok(_) => HttpResponse::Ok().json(new_post), + Err(res) => HttpResponse::InternalServerError().json(PostResponse { + msg: &res.to_string() + }) + }; +} + +#[get("/api/posts")] +pub async fn get_posts() -> impl Responder { + use crate::schema::posts::dsl::*; + let connection = db::establish_connection(); + let results = posts.filter(published.eq(true)) + .limit(5) + .load::(&connection) + .expect("Error loading posts"); + HttpResponse::Ok().json(&results) +} + -- cgit v1.2.3