Add Trunk.toml

This commit is contained in:
eraden 2023-04-24 10:01:23 +02:00
parent d6899a03e6
commit 34a928e98c
9 changed files with 286 additions and 4 deletions

185
Cargo.lock generated
View File

@ -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]]

View File

@ -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" }

View File

@ -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")

View File

@ -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),
);

View File

@ -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 = "*" }

View File

@ -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/"

View File

@ -1,4 +1,5 @@
mod components;
mod pages;
use components::Card;
use sycamore::prelude::*;

View 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
View File

@ -0,0 +1 @@
pub mod local_businesses;