Add Trunk.toml
This commit is contained in:
parent
d6899a03e6
commit
34a928e98c
185
Cargo.lock
generated
185
Cargo.lock
generated
@ -288,6 +288,15 @@ dependencies = [
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "addr2line"
|
||||
version = "0.19.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
|
||||
dependencies = [
|
||||
"gimli",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "adler"
|
||||
version = "1.0.2"
|
||||
@ -459,6 +468,21 @@ version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
||||
|
||||
[[package]]
|
||||
name = "backtrace"
|
||||
version = "0.3.67"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
|
||||
dependencies = [
|
||||
"addr2line",
|
||||
"cc",
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"miniz_oxide 0.6.2",
|
||||
"object",
|
||||
"rustc-demangle",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "base64"
|
||||
version = "0.13.0"
|
||||
@ -581,6 +605,16 @@ dependencies = [
|
||||
"generic-array",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "console_error_panic_hook"
|
||||
version = "0.1.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "convert_case"
|
||||
version = "0.4.0"
|
||||
@ -758,6 +792,28 @@ version = "2.5.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71"
|
||||
|
||||
[[package]]
|
||||
name = "failure"
|
||||
version = "0.1.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86"
|
||||
dependencies = [
|
||||
"backtrace",
|
||||
"failure_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "failure_derive"
|
||||
version = "0.1.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"synstructure",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fallible-iterator"
|
||||
version = "0.2.0"
|
||||
@ -777,7 +833,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6"
|
||||
dependencies = [
|
||||
"crc32fast",
|
||||
"miniz_oxide",
|
||||
"miniz_oxide 0.5.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -927,6 +983,12 @@ dependencies = [
|
||||
"polyval",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gimli"
|
||||
version = "0.27.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
|
||||
|
||||
[[package]]
|
||||
name = "gumdrop"
|
||||
version = "0.8.1"
|
||||
@ -1246,6 +1308,15 @@ dependencies = [
|
||||
"adler",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "miniz_oxide"
|
||||
version = "0.6.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
|
||||
dependencies = [
|
||||
"adler",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mio"
|
||||
version = "0.8.4"
|
||||
@ -1306,6 +1377,15 @@ dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "object"
|
||||
version = "0.30.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "once_cell"
|
||||
version = "1.13.0"
|
||||
@ -1660,6 +1740,12 @@ dependencies = [
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustc-demangle"
|
||||
version = "0.1.23"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
|
||||
|
||||
[[package]]
|
||||
name = "rustc_version"
|
||||
version = "0.4.0"
|
||||
@ -1696,6 +1782,12 @@ version = "1.0.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695"
|
||||
|
||||
[[package]]
|
||||
name = "scoped-tls"
|
||||
version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
|
||||
|
||||
[[package]]
|
||||
name = "scopeguard"
|
||||
version = "1.1.0"
|
||||
@ -1984,14 +2076,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "67817393b3c9828db84614f64db9a1ebb94729ce3a3751c41e7ff23d3f8e7f00"
|
||||
dependencies = [
|
||||
"ahash",
|
||||
"futures",
|
||||
"indexmap",
|
||||
"js-sys",
|
||||
"paste",
|
||||
"sycamore-core",
|
||||
"sycamore-futures",
|
||||
"sycamore-macro",
|
||||
"sycamore-reactive",
|
||||
"sycamore-web",
|
||||
"wasm-bindgen",
|
||||
"wasm-bindgen-futures",
|
||||
"web-sys",
|
||||
]
|
||||
|
||||
@ -2005,6 +2100,18 @@ dependencies = [
|
||||
"sycamore-reactive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sycamore-futures"
|
||||
version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a69e4f2b65a22059f711cb36adc454791248e9abdc0b6b04c5dda396098674f2"
|
||||
dependencies = [
|
||||
"futures",
|
||||
"sycamore-reactive",
|
||||
"tokio",
|
||||
"wasm-bindgen-futures",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sycamore-macro"
|
||||
version = "0.8.2"
|
||||
@ -2057,6 +2164,18 @@ dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "synstructure"
|
||||
version = "0.12.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"unicode-xid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thiserror"
|
||||
version = "1.0.31"
|
||||
@ -2358,6 +2477,12 @@ version = "1.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-xid"
|
||||
version = "0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
|
||||
|
||||
[[package]]
|
||||
name = "unicode_categories"
|
||||
version = "0.1.1"
|
||||
@ -2482,6 +2607,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"wasm-bindgen-macro",
|
||||
]
|
||||
|
||||
@ -2500,6 +2627,18 @@ dependencies = [
|
||||
"wasm-bindgen-shared",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-futures"
|
||||
version = "0.4.31"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "de9a9cec1733468a8c657e57fa2413d2ae2c0129b95e87c5b72b8ace4d13f31f"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"js-sys",
|
||||
"wasm-bindgen",
|
||||
"web-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-macro"
|
||||
version = "0.2.81"
|
||||
@ -2529,11 +2668,55 @@ version = "0.2.81"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be"
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-test"
|
||||
version = "0.3.31"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "68b30cf2cba841a812f035c40c50f53eb9c56181192a9dd2c71b65e6a87a05ba"
|
||||
dependencies = [
|
||||
"console_error_panic_hook",
|
||||
"js-sys",
|
||||
"scoped-tls",
|
||||
"wasm-bindgen",
|
||||
"wasm-bindgen-futures",
|
||||
"wasm-bindgen-test-macro",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-test-macro"
|
||||
version = "0.3.31"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "88ad594bf33e73cafcac2ae9062fc119d4f75f9c77e25022f91c9a64bd5b6463"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm_request"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "34794d2ba7b0563e69c9c82877274956153197771d62b86066b9154840ece516"
|
||||
dependencies = [
|
||||
"failure",
|
||||
"js-sys",
|
||||
"serde",
|
||||
"serde_derive",
|
||||
"serde_json",
|
||||
"wasm-bindgen",
|
||||
"wasm-bindgen-futures",
|
||||
"wasm-bindgen-test",
|
||||
"web-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "web"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"serde_json",
|
||||
"sycamore",
|
||||
"wasm_request",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -33,4 +33,4 @@ tracing-actix-web = { version = "*" }
|
||||
tracing-subscriber = { version = "*" }
|
||||
uuid = { version = "*", features = ["serde"] }
|
||||
validator = { version = "0.14", features = ["derive"] }
|
||||
base64 = "0.13.0"
|
||||
base64 = { version = "0.13.0" }
|
||||
|
@ -5,6 +5,7 @@
|
||||
use actix_identity::{CookieIdentityPolicy, IdentityService};
|
||||
use actix_web::web::Data;
|
||||
use actix_web::{web, App, HttpServer};
|
||||
use tracing::info;
|
||||
|
||||
use crate::routes::render_index;
|
||||
|
||||
@ -42,7 +43,7 @@ async fn main() -> std::io::Result<()> {
|
||||
.ok()
|
||||
.and_then(|s| s.parse().ok())
|
||||
.or_else(|| opts.port.and_then(|s| s.parse().ok()))
|
||||
.unwrap_or(8080),
|
||||
.unwrap_or(8000),
|
||||
);
|
||||
|
||||
let pool = sqlx::postgres::PgPoolOptions::new()
|
||||
@ -54,6 +55,8 @@ async fn main() -> std::io::Result<()> {
|
||||
|
||||
queries::test_dictionary(&pool).await;
|
||||
|
||||
info!("Listen on {addr:?}");
|
||||
|
||||
HttpServer::new(move || {
|
||||
let policy = CookieIdentityPolicy::new(&[0; 32])
|
||||
.name("auth-cookie")
|
||||
|
@ -54,6 +54,47 @@ pub async fn businesses_page(req: HttpRequest, db: Data<PgPool>, id: Identity) -
|
||||
)
|
||||
}
|
||||
|
||||
#[get("all.json")]
|
||||
#[tracing::instrument]
|
||||
pub async fn businesses_json(req: HttpRequest, db: Data<PgPool>, id: Identity) -> HttpResult {
|
||||
let pool = db.into_inner();
|
||||
let mut t = crate::ok_or_internal!(&req, pool.begin().await);
|
||||
let record = match id.identity() {
|
||||
Some(id) => queries::account_by_id(&mut t, id).await,
|
||||
_ => None,
|
||||
};
|
||||
let (services, mut items, mut contacts) = {
|
||||
use crate::model::db::{LocalBusiness, LocalBusinessItem};
|
||||
let services: Vec<LocalBusiness> = queries::visible_businesses(&mut t)
|
||||
.await
|
||||
.unwrap_or_default();
|
||||
|
||||
let items: Vec<LocalBusinessItem> = queries::visible_business_items(&mut t)
|
||||
.await
|
||||
.unwrap_or_default();
|
||||
|
||||
let contacts = queries::all_contacts(&mut t).await.unwrap_or_default();
|
||||
(services, items, contacts)
|
||||
};
|
||||
|
||||
let services: Vec<_> = services
|
||||
.into_iter()
|
||||
.map(|service| view::LocalBusiness::from((service, &mut items, &mut contacts)))
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
t.commit().await.ok();
|
||||
|
||||
HttpResult::json(
|
||||
StatusCode::OK,
|
||||
IndexTemplate {
|
||||
businesses: services,
|
||||
account: record,
|
||||
page: Page::LocalBusinesses,
|
||||
..Default::default()
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
#[derive(Default, Debug, Serialize, Template)]
|
||||
#[template(path = "businesses/show.html")]
|
||||
pub struct ShowTemplate {
|
||||
@ -125,6 +166,7 @@ pub async fn show_business_page(
|
||||
pub fn configure(config: &mut ServiceConfig) {
|
||||
config.service(
|
||||
web::scope("/local-businesses")
|
||||
.service(businesses_json)
|
||||
.service(show_business_page)
|
||||
.service(businesses_page),
|
||||
);
|
||||
|
@ -4,4 +4,7 @@ version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
sycamore = "0.8.2"
|
||||
sycamore = { version = "0.8.2", features = ['suspense'] }
|
||||
wasm_request = { version = "0.1.1" }
|
||||
serde = { version = "*" }
|
||||
serde_json = { version = "*" }
|
||||
|
@ -6,3 +6,7 @@ dist = "dist"
|
||||
stage = "build"
|
||||
command = "zsh"
|
||||
command_arguments = ["-c", "tailwindcss -i assets/tailwind.css -o $TRUNK_STAGING_DIR/tailwind.css"]
|
||||
|
||||
[[proxy]]
|
||||
rewrite = "/api"
|
||||
backend = "http://localhost:8000/"
|
||||
|
@ -1,4 +1,5 @@
|
||||
mod components;
|
||||
mod pages;
|
||||
|
||||
use components::Card;
|
||||
use sycamore::prelude::*;
|
||||
|
45
web/src/pages/local_businesses.rs
Normal file
45
web/src/pages/local_businesses.rs
Normal file
@ -0,0 +1,45 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
use sycamore::futures::spawn_local_scoped;
|
||||
use sycamore::prelude::*;
|
||||
|
||||
#[derive(Debug, Default, Serialize, Deserialize)]
|
||||
pub struct LocalBusiness {
|
||||
pub id: i32,
|
||||
pub owner_id: i32,
|
||||
pub name: String,
|
||||
pub description: String,
|
||||
pub state: db::LocalBusinessState,
|
||||
pub items: Vec<db::LocalBusinessItem>,
|
||||
pub contacts: Vec<db::ContactInfo>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, Serialize, Deserialize)]
|
||||
pub struct IndexTemplate {
|
||||
businesses: Vec<LocalBusiness>,
|
||||
account: Option<db::Account>,
|
||||
error: Option<String>,
|
||||
page: Page,
|
||||
h: Helper,
|
||||
}
|
||||
|
||||
#[component]
|
||||
pub fn LocalBusinesses<G: Html>(cx: Scope) -> View<G> {
|
||||
let submit_registration = || {
|
||||
spawn_local_scoped(cx, async move {
|
||||
let req = wasm_request::get_options::<Vec<LocalBusiness>>(
|
||||
"/api/local-businesses/all.json",
|
||||
wasm_request::Method::Get,
|
||||
None,
|
||||
None,
|
||||
);
|
||||
wasm_request::request(req).await.unwrap_or_default();
|
||||
})
|
||||
};
|
||||
|
||||
view!(
|
||||
cx,
|
||||
article() {
|
||||
//
|
||||
}
|
||||
)
|
||||
}
|
1
web/src/pages/mod.rs
Normal file
1
web/src/pages/mod.rs
Normal file
@ -0,0 +1 @@
|
||||
pub mod local_businesses;
|
Loading…
Reference in New Issue
Block a user