blob: 36227196f23744f6fe8c210fe29441132249b8cd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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::<Post>(&connection)
.expect("Error loading posts");
HttpResponse::Ok().json(&results)
}
|