routes: pastes: Finish implementing fetching of pastes
Signed-off-by: ATechnoHazard <amolele@gmail.com>
This commit is contained in:
parent
8e44b02235
commit
f16e906ff4
42
Cargo.lock
generated
42
Cargo.lock
generated
@ -545,7 +545,7 @@ dependencies = [
|
|||||||
"traitobject",
|
"traitobject",
|
||||||
"typeable",
|
"typeable",
|
||||||
"unicase",
|
"unicase",
|
||||||
"url",
|
"url 1.7.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -559,6 +559,17 @@ dependencies = [
|
|||||||
"unicode-normalization",
|
"unicode-normalization",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "idna"
|
||||||
|
version = "0.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9"
|
||||||
|
dependencies = [
|
||||||
|
"matches",
|
||||||
|
"unicode-bidi",
|
||||||
|
"unicode-normalization",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "indexmap"
|
name = "indexmap"
|
||||||
version = "1.3.2"
|
version = "1.3.2"
|
||||||
@ -646,6 +657,7 @@ dependencies = [
|
|||||||
"slog-async",
|
"slog-async",
|
||||||
"slog-term",
|
"slog-term",
|
||||||
"uuid",
|
"uuid",
|
||||||
|
"validator",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -1493,11 +1505,22 @@ version = "1.7.2"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a"
|
checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"idna",
|
"idna 0.1.5",
|
||||||
"matches",
|
"matches",
|
||||||
"percent-encoding 1.0.1",
|
"percent-encoding 1.0.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "url"
|
||||||
|
version = "2.1.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb"
|
||||||
|
dependencies = [
|
||||||
|
"idna 0.2.0",
|
||||||
|
"matches",
|
||||||
|
"percent-encoding 2.1.0",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uuid"
|
name = "uuid"
|
||||||
version = "0.8.1"
|
version = "0.8.1"
|
||||||
@ -1508,6 +1531,21 @@ dependencies = [
|
|||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "validator"
|
||||||
|
version = "0.10.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e60fadf92c22236de4028ceb0b8af50ed3430d41ad43d7a7d63b6bd1a8f47c38"
|
||||||
|
dependencies = [
|
||||||
|
"idna 0.2.0",
|
||||||
|
"lazy_static",
|
||||||
|
"regex",
|
||||||
|
"serde",
|
||||||
|
"serde_derive",
|
||||||
|
"serde_json",
|
||||||
|
"url 2.1.1",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "vcpkg"
|
name = "vcpkg"
|
||||||
version = "0.2.10"
|
version = "0.2.10"
|
||||||
|
@ -19,6 +19,7 @@ jsonwebtoken = "7.1.2"
|
|||||||
slog = "2.5.2"
|
slog = "2.5.2"
|
||||||
slog-term = "2.6.0"
|
slog-term = "2.6.0"
|
||||||
anyhow = "1.0"
|
anyhow = "1.0"
|
||||||
|
validator = "0.10.1"
|
||||||
slog-async = "2.5.0"
|
slog-async = "2.5.0"
|
||||||
bcrypt = "0.8"
|
bcrypt = "0.8"
|
||||||
chrono = "0.4.11"
|
chrono = "0.4.11"
|
||||||
|
@ -5,10 +5,11 @@ use rocket::response::status::Custom;
|
|||||||
use rocket_contrib::json::Json;
|
use rocket_contrib::json::Json;
|
||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
|
|
||||||
use crate::core::paste::{entity::Paste, service::create_paste};
|
use crate::core::paste::{entity::Paste, service::create_paste, service::fetch_paste};
|
||||||
use crate::core::users::{service::create_or_fetch_user};
|
use crate::core::users::{service::create_or_fetch_user};
|
||||||
use crate::utils::{db, phonetic_key};
|
use crate::utils::{db, phonetic_key};
|
||||||
use crate::utils::phonetic_key::get_random_id;
|
use crate::utils::phonetic_key::get_random_id;
|
||||||
|
use diesel::result::Error;
|
||||||
|
|
||||||
#[post("/", data = "<paste>")]
|
#[post("/", data = "<paste>")]
|
||||||
fn create(mut paste: Json<Paste>, conn: db::DbConn, mut ck: Cookies) -> Custom<Json<Value>> {
|
fn create(mut paste: Json<Paste>, conn: db::DbConn, mut ck: Cookies) -> Custom<Json<Value>> {
|
||||||
@ -54,6 +55,27 @@ fn create(mut paste: Json<Paste>, conn: db::DbConn, mut ck: Cookies) -> Custom<J
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[get("/<id>")]
|
||||||
|
fn fetch(id: String, conn: db::DbConn) -> Custom<Json<Value>> {
|
||||||
|
let paste = match fetch_paste(id, &conn) {
|
||||||
|
Ok(paste) => paste,
|
||||||
|
Err(err) => {
|
||||||
|
return match err.downcast_ref::<Error>() {
|
||||||
|
Some(Error::NotFound) => Custom(Status::NotFound, Json(json!({
|
||||||
|
"err": err.to_string(),
|
||||||
|
"msg": "Unable to find a paste with that ID"
|
||||||
|
}))),
|
||||||
|
_ => Custom(Status::InternalServerError, Json(json!({
|
||||||
|
"err": err.to_string(),
|
||||||
|
"msg": "Something went wrong, try again"
|
||||||
|
})))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Custom(Status::Found, Json(json!(paste)))
|
||||||
|
}
|
||||||
|
|
||||||
pub fn fuel(rocket: Rocket) -> Rocket {
|
pub fn fuel(rocket: Rocket) -> Rocket {
|
||||||
rocket.mount("/api/paste", routes![create])
|
rocket.mount("/api/paste", routes![create, fetch])
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use diesel::pg::PgConnection;
|
use diesel::pg::PgConnection;
|
||||||
use diesel::RunQueryDsl;
|
use diesel::prelude::*;
|
||||||
|
|
||||||
use crate::schema::pastes;
|
use crate::schema::pastes;
|
||||||
|
|
||||||
@ -11,4 +11,9 @@ pub fn create_paste(paste: &Paste, conn: &PgConnection) -> Result<usize> {
|
|||||||
.values(paste)
|
.values(paste)
|
||||||
.execute(conn)?;
|
.execute(conn)?;
|
||||||
Ok(rows)
|
Ok(rows)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn fetch_paste(id: String, conn: &PgConnection) -> Result<Paste> {
|
||||||
|
let paste = pastes::table.find(id).get_result::<Paste>(conn)?;
|
||||||
|
Ok(paste)
|
||||||
}
|
}
|
@ -4,6 +4,11 @@ use diesel::pg::PgConnection;
|
|||||||
use super::entity::Paste;
|
use super::entity::Paste;
|
||||||
use super::postgres;
|
use super::postgres;
|
||||||
|
|
||||||
pub fn create_paste(paste: &Paste, conn: &PgConnection) -> Result<usize> {
|
pub fn create_paste(paste: &mut Paste, conn: &PgConnection) -> Result<usize> {
|
||||||
|
paste.is_url = validator::validate_url(paste.content.clone());
|
||||||
postgres::create_paste(paste, conn)
|
postgres::create_paste(paste, conn)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn fetch_paste(id: String, conn: &PgConnection) -> Result<Paste> {
|
||||||
|
postgres::fetch_paste(id, conn)
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
table! {
|
table! {
|
||||||
pastes (id) {
|
pastes (id) {
|
||||||
id -> Varchar,
|
id -> Nullable<Varchar>,
|
||||||
belongs_to -> Nullable<Varchar>,
|
belongs_to -> Nullable<Varchar>,
|
||||||
is_url -> Bool,
|
is_url -> Bool,
|
||||||
content -> Text,
|
content -> Text,
|
||||||
|
Loading…
Reference in New Issue
Block a user