add db to AppState
This commit is contained in:
parent
9762655045
commit
ed18c442f2
|
@ -4,3 +4,4 @@
|
||||||
.vscode
|
.vscode
|
||||||
*.iml
|
*.iml
|
||||||
local.db
|
local.db
|
||||||
|
test.db
|
||||||
|
|
|
@ -430,6 +430,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"diesel_derives 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"diesel_derives 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"libsqlite3-sys 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -718,6 +719,15 @@ name = "libc"
|
||||||
version = "0.2.50"
|
version = "0.2.50"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "libsqlite3-sys"
|
||||||
|
version = "0.12.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "linked-hash-map"
|
name = "linked-hash-map"
|
||||||
version = "0.5.2"
|
version = "0.5.2"
|
||||||
|
@ -963,6 +973,11 @@ dependencies = [
|
||||||
"unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pkg-config"
|
||||||
|
version = "0.3.14"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "0.4.27"
|
version = "0.4.27"
|
||||||
|
@ -1802,6 +1817,11 @@ dependencies = [
|
||||||
"version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
"version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "vcpkg"
|
||||||
|
version = "0.2.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "vec_map"
|
name = "vec_map"
|
||||||
version = "0.8.1"
|
version = "0.8.1"
|
||||||
|
@ -1950,6 +1970,7 @@ dependencies = [
|
||||||
"checksum lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14"
|
"checksum lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14"
|
||||||
"checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f"
|
"checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f"
|
||||||
"checksum libc 0.2.50 (registry+https://github.com/rust-lang/crates.io-index)" = "aab692d7759f5cd8c859e169db98ae5b52c924add2af5fbbca11d12fefb567c1"
|
"checksum libc 0.2.50 (registry+https://github.com/rust-lang/crates.io-index)" = "aab692d7759f5cd8c859e169db98ae5b52c924add2af5fbbca11d12fefb567c1"
|
||||||
|
"checksum libsqlite3-sys 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fd6457c70bbff456d9fe49deaba35ec47c3e598bf8d7950ff0575ceb7a8a6ad1"
|
||||||
"checksum linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83"
|
"checksum linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83"
|
||||||
"checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c"
|
"checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c"
|
||||||
"checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6"
|
"checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6"
|
||||||
|
@ -1979,6 +2000,7 @@ dependencies = [
|
||||||
"checksum phf_codegen 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "b03e85129e324ad4166b06b2c7491ae27fe3ec353af72e72cd1654c7225d517e"
|
"checksum phf_codegen 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "b03e85129e324ad4166b06b2c7491ae27fe3ec353af72e72cd1654c7225d517e"
|
||||||
"checksum phf_generator 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662"
|
"checksum phf_generator 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662"
|
||||||
"checksum phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0"
|
"checksum phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0"
|
||||||
|
"checksum pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "676e8eb2b1b4c9043511a9b7bea0915320d7e502b0a079fb03f9635a5252b18c"
|
||||||
"checksum proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)" = "4d317f9caece796be1980837fd5cb3dfec5613ebdb04ad0956deea83ce168915"
|
"checksum proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)" = "4d317f9caece796be1980837fd5cb3dfec5613ebdb04ad0956deea83ce168915"
|
||||||
"checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0"
|
"checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0"
|
||||||
"checksum quote 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)" = "cdd8e04bd9c52e0342b406469d494fcb033be4bdbe5c606016defbb1681411e1"
|
"checksum quote 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)" = "cdd8e04bd9c52e0342b406469d494fcb033be4bdbe5c606016defbb1681411e1"
|
||||||
|
@ -2068,6 +2090,7 @@ dependencies = [
|
||||||
"checksum v_escape 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c8b50688edb86f4c092a1a9fe8bda004b0faa3197100897653809e97e09a2814"
|
"checksum v_escape 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c8b50688edb86f4c092a1a9fe8bda004b0faa3197100897653809e97e09a2814"
|
||||||
"checksum v_escape_derive 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7cd994c63b487fef7aad31e5394ec04b9e24de7b32ea5251c9fb499cd2cbf44c"
|
"checksum v_escape_derive 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7cd994c63b487fef7aad31e5394ec04b9e24de7b32ea5251c9fb499cd2cbf44c"
|
||||||
"checksum v_htmlescape 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "020cae817dc82693aa523f01087b291b1c7a9ac8cea5c12297963f21769fb27f"
|
"checksum v_htmlescape 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "020cae817dc82693aa523f01087b291b1c7a9ac8cea5c12297963f21769fb27f"
|
||||||
|
"checksum vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "def296d3eb3b12371b2c7d0e83bfe1403e4db2d7a0bba324a12b21c4ee13143d"
|
||||||
"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
|
"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
|
||||||
"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd"
|
"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd"
|
||||||
"checksum widestring 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7157704c2e12e3d2189c507b7482c52820a16dfa4465ba91add92f266667cadb"
|
"checksum widestring 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7157704c2e12e3d2189c507b7482c52820a16dfa4465ba91add92f266667cadb"
|
||||||
|
|
|
@ -5,7 +5,7 @@ authors = ["Gonçalo Valério <gon@ovalerio.net>"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
actix-web = "0.7.18"
|
actix-web = "0.7.18"
|
||||||
diesel = { version = "1.4.2" }
|
diesel = { version = "1.4.2", features = ["sqlite"] }
|
||||||
toml = "0.5.0"
|
toml = "0.5.0"
|
||||||
clap = "2.32.0"
|
clap = "2.32.0"
|
||||||
askama = "0.8"
|
askama = "0.8"
|
||||||
|
|
|
@ -19,14 +19,22 @@ pub fn hub(_req: HttpRequest<AppState>) -> HttpResponse {
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
use actix_web::actix::{SyncArbiter, System};
|
||||||
use actix_web::{http, test};
|
use actix_web::{http, test};
|
||||||
use utils::setup_logging;
|
use diesel::prelude::*;
|
||||||
|
use utils::{setup_logging, DbExecutor};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_index() {
|
fn test_index() {
|
||||||
|
let _sys = System::new("rusty-hub-test");
|
||||||
|
let addr = SyncArbiter::start(1, || {
|
||||||
|
DbExecutor(SqliteConnection::establish("test.db").unwrap())
|
||||||
|
});
|
||||||
|
|
||||||
let resp = index(
|
let resp = index(
|
||||||
test::TestRequest::with_state(AppState {
|
test::TestRequest::with_state(AppState {
|
||||||
log: setup_logging(),
|
log: setup_logging(),
|
||||||
|
db: addr.clone(),
|
||||||
})
|
})
|
||||||
.finish(),
|
.finish(),
|
||||||
);
|
);
|
||||||
|
@ -35,8 +43,14 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_hub() {
|
fn test_hub() {
|
||||||
|
let _sys = System::new("rusty-hub-test");
|
||||||
|
let addr = SyncArbiter::start(1, || {
|
||||||
|
DbExecutor(SqliteConnection::establish("test.db").unwrap())
|
||||||
|
});
|
||||||
|
|
||||||
let resp = hub(test::TestRequest::with_state(AppState {
|
let resp = hub(test::TestRequest::with_state(AppState {
|
||||||
log: setup_logging(),
|
log: setup_logging(),
|
||||||
|
db: addr.clone(),
|
||||||
})
|
})
|
||||||
.finish());
|
.finish());
|
||||||
assert_eq!(resp.status(), http::StatusCode::OK);
|
assert_eq!(resp.status(), http::StatusCode::OK);
|
||||||
|
|
17
src/main.rs
17
src/main.rs
|
@ -2,15 +2,21 @@ extern crate actix_web;
|
||||||
extern crate askama;
|
extern crate askama;
|
||||||
extern crate clap;
|
extern crate clap;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
|
extern crate diesel;
|
||||||
|
#[macro_use]
|
||||||
extern crate slog;
|
extern crate slog;
|
||||||
extern crate slog_async;
|
extern crate slog_async;
|
||||||
extern crate slog_term;
|
extern crate slog_term;
|
||||||
|
use actix_web::actix::{SyncArbiter, System};
|
||||||
use actix_web::{http, server, App};
|
use actix_web::{http, server, App};
|
||||||
use clap::Arg;
|
use clap::Arg;
|
||||||
use controllers::{hub, index};
|
use controllers::{hub, index};
|
||||||
use utils::{setup_logging, AppState};
|
use diesel::prelude::*;
|
||||||
|
use utils::{setup_logging, AppState, DbExecutor};
|
||||||
|
|
||||||
mod controllers;
|
mod controllers;
|
||||||
|
mod models;
|
||||||
|
mod schema;
|
||||||
mod utils;
|
mod utils;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
@ -40,16 +46,23 @@ fn main() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let sys = System::new("rusty-hub");
|
||||||
|
let addr = SyncArbiter::start(3, || {
|
||||||
|
DbExecutor(SqliteConnection::establish("local.db").unwrap())
|
||||||
|
});
|
||||||
|
|
||||||
info!(log, "Starting server");
|
info!(log, "Starting server");
|
||||||
server::new(move || {
|
server::new(move || {
|
||||||
App::with_state(AppState {
|
App::with_state(AppState {
|
||||||
log: setup_logging(),
|
log: setup_logging(),
|
||||||
|
db: addr.clone(),
|
||||||
})
|
})
|
||||||
.route("/", http::Method::GET, index)
|
.route("/", http::Method::GET, index)
|
||||||
.route("/", http::Method::POST, hub)
|
.route("/", http::Method::POST, hub)
|
||||||
})
|
})
|
||||||
.bind(format!("{}:{}", address, port))
|
.bind(format!("{}:{}", address, port))
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.run();
|
.start();
|
||||||
|
let _ = sys.run();
|
||||||
info!(log, "Shutting down server");
|
info!(log, "Shutting down server");
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use super::schema::posts;
|
use super::schema::subscriptions;
|
||||||
|
|
||||||
#[derive(Queryable)]
|
#[derive(Queryable)]
|
||||||
pub struct Subscription {
|
pub struct Subscription {
|
||||||
|
@ -7,15 +7,15 @@ pub struct Subscription {
|
||||||
pub topic: String,
|
pub topic: String,
|
||||||
pub sec: String,
|
pub sec: String,
|
||||||
pub created_at: i32,
|
pub created_at: i32,
|
||||||
pub expires_at: i32
|
pub expires_at: i32,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Insertable)]
|
#[derive(Insertable)]
|
||||||
#[table_name="subscriptions"]
|
#[table_name = "subscriptions"]
|
||||||
pub struct NewSubscription<'a> {
|
pub struct NewSubscription<'a> {
|
||||||
pub callback: &'a str,
|
pub callback: &'a str,
|
||||||
pub topic: &'a str,
|
pub topic: &'a str,
|
||||||
pub sec: &'a str,
|
pub sec: &'a str,
|
||||||
pub created_at: &'a i32,
|
pub created_at: &'a i32,
|
||||||
pub expires_at: &'a i32
|
pub expires_at: &'a i32,
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,16 @@
|
||||||
|
use actix_web::actix::{Actor, Addr, SyncContext};
|
||||||
|
use diesel::prelude::*;
|
||||||
use slog::Drain;
|
use slog::Drain;
|
||||||
|
|
||||||
|
pub struct DbExecutor(pub SqliteConnection);
|
||||||
|
|
||||||
|
impl Actor for DbExecutor {
|
||||||
|
type Context = SyncContext<Self>;
|
||||||
|
}
|
||||||
|
|
||||||
pub struct AppState {
|
pub struct AppState {
|
||||||
pub log: slog::Logger,
|
pub log: slog::Logger,
|
||||||
|
pub db: Addr<DbExecutor>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn setup_logging() -> slog::Logger {
|
pub fn setup_logging() -> slog::Logger {
|
||||||
|
|
Loading…
Reference in New Issue