Layed groundwork for microservice split
This commit is contained in:
parent
e2003442e2
commit
0b048eb8b0
44 changed files with 461 additions and 259 deletions
2
gw/.env
Normal file
2
gw/.env
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
# This file is used by diesel to find the development database
|
||||
DATABASE_URL=postgres://rb:rb@localhost:5432/rb
|
||||
7
gw/Cargo.lock
generated
Normal file
7
gw/Cargo.lock
generated
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "rb-gw"
|
||||
version = "0.1.0"
|
||||
18
gw/Cargo.toml
Normal file
18
gw/Cargo.toml
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
[package]
|
||||
name = "rb-gw"
|
||||
version = "0.1.0"
|
||||
edition = "2018"
|
||||
|
||||
[lib]
|
||||
name = "rb_gw"
|
||||
path = "src/lib.rs"
|
||||
|
||||
[[bin]]
|
||||
name = "rb-gw"
|
||||
path = "src/main.rs"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
|
||||
rb = { path = "../common" }
|
||||
58
gw/admin.rs
Normal file
58
gw/admin.rs
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
use diesel::PgConnection;
|
||||
use rocket::serde::json::Json;
|
||||
use uuid::Uuid;
|
||||
|
||||
use crate::{
|
||||
auth::pass::hash_password,
|
||||
db,
|
||||
errors::{RbError, RbResult},
|
||||
guards::Admin,
|
||||
RbDbConn,
|
||||
};
|
||||
|
||||
// #[get("/users")]
|
||||
// pub async fn get_users(_admin: Admin, conn: RbDbConn) -> RbResult<Json<Vec<db::User>>>
|
||||
// {
|
||||
// Ok(Json(conn.run(|c| db::users::all(c)).await?))
|
||||
// }
|
||||
|
||||
#[post("/users", data = "<user>")]
|
||||
pub async fn create_user(_admin: Admin, conn: RbDbConn, user: Json<db::NewUser>) -> RbResult<()>
|
||||
{
|
||||
Ok(conn
|
||||
.run(move |c| db::users::create(c, &user.into_inner()))
|
||||
.await?)
|
||||
}
|
||||
|
||||
#[get("/users/<user_id_str>")]
|
||||
pub async fn get_user_info(
|
||||
_admin: Admin,
|
||||
conn: RbDbConn,
|
||||
user_id_str: &str,
|
||||
) -> RbResult<Json<db::User>>
|
||||
{
|
||||
let user_id = Uuid::parse_str(user_id_str).map_err(|_| RbError::UMUnknownUser)?;
|
||||
|
||||
match conn.run(move |c| db::users::find(c, user_id)).await {
|
||||
Some(user) => Ok(Json(user)),
|
||||
None => Err(RbError::UMUnknownUser),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn create_admin_user(conn: &PgConnection, username: &str, password: &str) -> RbResult<bool>
|
||||
{
|
||||
let pass_hashed = hash_password(password)?;
|
||||
let new_user = db::NewUser {
|
||||
username: username.to_string(),
|
||||
password: pass_hashed,
|
||||
admin: true,
|
||||
};
|
||||
|
||||
if db::users::find_by_username(conn, username).is_ok() {
|
||||
db::users::create(conn, &new_user);
|
||||
}
|
||||
// db::users::create_or_update(conn, &new_user)
|
||||
// .map_err(|_| RbError::Custom("Couldn't create admin."))?;
|
||||
|
||||
Ok(true)
|
||||
}
|
||||
5
gw/diesel.toml
Normal file
5
gw/diesel.toml
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
# For documentation on how to configure this file,
|
||||
# see diesel.rs/guides/configuring-diesel-cli
|
||||
|
||||
[print_schema]
|
||||
file = "src/schema.rs"
|
||||
4
gw/src/main.rs
Normal file
4
gw/src/main.rs
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
fn main()
|
||||
{
|
||||
println!("Hello, world!");
|
||||
}
|
||||
49
gw/src/schema.rs
Normal file
49
gw/src/schema.rs
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
table! {
|
||||
posts (id) {
|
||||
id -> Uuid,
|
||||
section_id -> Uuid,
|
||||
title -> Nullable<Varchar>,
|
||||
publish_date -> Date,
|
||||
content -> Text,
|
||||
}
|
||||
}
|
||||
|
||||
table! {
|
||||
refresh_tokens (token) {
|
||||
token -> Bytea,
|
||||
user_id -> Uuid,
|
||||
expires_at -> Timestamp,
|
||||
last_used_at -> Nullable<Timestamp>,
|
||||
}
|
||||
}
|
||||
|
||||
table! {
|
||||
sections (id) {
|
||||
id -> Uuid,
|
||||
title -> Varchar,
|
||||
shortname -> Varchar,
|
||||
description -> Nullable<Text>,
|
||||
is_default -> Bool,
|
||||
has_titles -> Bool,
|
||||
}
|
||||
}
|
||||
|
||||
table! {
|
||||
users (id) {
|
||||
id -> Uuid,
|
||||
username -> Varchar,
|
||||
password -> Text,
|
||||
blocked -> Bool,
|
||||
admin -> Bool,
|
||||
}
|
||||
}
|
||||
|
||||
joinable!(posts -> sections (section_id));
|
||||
joinable!(refresh_tokens -> users (user_id));
|
||||
|
||||
allow_tables_to_appear_in_same_query!(
|
||||
posts,
|
||||
refresh_tokens,
|
||||
sections,
|
||||
users,
|
||||
);
|
||||
Reference in a new issue