This commit is contained in:
Hamcha 2025-01-25 19:14:49 +01:00
parent 2a78c4429b
commit ab9a460d0b
Signed by: hamcha
GPG key ID: 1669C533B8CF6D89
2 changed files with 96 additions and 103 deletions
src
main.rs
outbound/repository/adapters

View file

@ -15,17 +15,21 @@ fn main() {
let mut builder = dioxus::LaunchBuilder::new();
server_only! {
use outbound::repository::adapters::memory::InMemoryStore;
use outbound::services::site::SiteService;
let store = tokio::runtime::Runtime::new().unwrap().block_on(setup_inmem_store());
builder = builder.with_context_provider(move || {
Box::new(SiteService::new(store.clone()))
})
}
builder = builder.with_context_provider(|| {
builder.launch(inbound::renderer::App);
}
let store = tokio::runtime::Builder::new_multi_thread()
.enable_all()
.build()
.unwrap()
.block_on(async move {
let store = InMemoryStore::new();
#[cfg(feature = "server")]
async fn setup_inmem_store() -> outbound::repository::adapters::memory::InMemoryStore {
use outbound::repository::site::SiteRepository;
let store = outbound::repository::adapters::memory::InMemoryStore::new();
store
.add_site(outbound::repository::site::SiteMetadata {
domain: "localhost".to_string(),
@ -33,7 +37,7 @@ fn main() {
})
.await;
store
.add_page(
.set_page(
"localhost",
domain::entities::site::Page {
info: domain::entities::site::PageInfo {
@ -50,9 +54,10 @@ fn main() {
},
},
)
.await;
.await
.unwrap();
store
.add_page(
.set_page(
"localhost",
domain::entities::site::Page {
info: domain::entities::site::PageInfo {
@ -66,7 +71,8 @@ fn main() {
},
},
)
.await;
.await
.unwrap();
store
.add_post(
"localhost",
@ -98,10 +104,4 @@ fn main() {
.await;
store
});
Box::new(SiteService::new(store))
});
}
builder.launch(inbound::renderer::App);
}

View file

@ -20,6 +20,7 @@ struct InMemoryStoreData {
posts: HashMap<(String, String), HashMap<String, Post>>,
}
#[derive(Clone)]
pub struct InMemoryStore {
data: Arc<Mutex<InMemoryStoreData>>,
}
@ -43,14 +44,6 @@ impl InMemoryStore {
.insert(site.domain.clone(), site);
}
pub async fn add_page(&self, site: &str, page: Page) {
self.data
.lock()
.await
.pages
.insert((site.to_string(), page.info.name.clone()), page);
}
pub async fn add_post(&self, site: &str, collection_id: &str, post_id: &str, post: Post) {
self.data
.lock()
@ -73,8 +66,9 @@ impl InMemoryStore {
title: "Test site".to_string(),
})
.await;
store
.add_page(
.set_page(
"example.com",
Page {
info: PageInfo {
@ -91,10 +85,11 @@ impl InMemoryStore {
},
},
)
.await;
.await
.unwrap();
store
.add_page(
.set_page(
"example.com",
Page {
info: PageInfo {
@ -111,7 +106,8 @@ impl InMemoryStore {
},
},
)
.await;
.await
.unwrap();
store
.add_post(
@ -186,7 +182,7 @@ impl SiteRepository for InMemoryStore {
.lock()
.await
.pages
.insert((domain.to_string(), page.info.name.clone()), page);
.insert((domain.to_string(), page.info.name.clone()), page.clone());
Ok(())
}
@ -263,10 +259,7 @@ mod tests {
cursor::CursorOptions,
site::{Block, Page, PageContent, PageInfo, Post},
},
outbound::repository::{
self,
site::{SiteMetadata, SiteRepository},
},
outbound::repository::{self, site::SiteRepository},
};
use super::InMemoryStore;