1use crate::audit_logger::AuditLogger;
2use crate::context::Context;
3use crate::event::audit_log_event_handler::AuditLogEventHandler;
4use rseata_core::event::defaults::default_event_handler_chain::DefaultEventHandlerChain;
5use rseata_core::event::defaults::event_publisher::DefaultEventPublisher;
6use rseata_core::event::event_handler_chain::EventHandlerChain;
7use rseata_core::session::defaults::default_session_manager::DefaultSessionManager;
8use rseata_core::store::memery_transaction_store_manager::MemeryTransactionStoreManager;
9use std::sync::Arc;
10use crate::coordinator::default_coordinator::DefaultCoordinator;
11
12mod audit_logger;
13mod config;
14mod context;
15pub(crate) mod coordinator;
16pub(crate) mod error;
17mod event;
18pub(crate) mod grpc_service;
19pub(crate) mod init;
20pub(crate) mod resource;
21pub(crate) mod types;
22pub(crate) mod web;
23
24pub async fn start_server() -> anyhow::Result<()> {
25 init::init().await?;
26 let session_manager = Arc::new(DefaultSessionManager::new(
27 String::from("DefaultSessionManager"),
28 Box::new(MemeryTransactionStoreManager::default()),
29 ));
30
31 let (event_publisher, audit_logger) = start_event_system().await;
32
33 let coordinator_manager = Arc::new(DefaultCoordinator::new(event_publisher));
34 let ctx = Context::new_arc(coordinator_manager, audit_logger);
35 tokio::spawn(grpc_service::start(ctx.clone()));
36 web::start(ctx).await?;
37 Ok(())
38}
39
40pub async fn start_event_system() -> (Arc<DefaultEventPublisher>, Arc<AuditLogger>) {
41 let mut handler_chain = DefaultEventHandlerChain::new();
42
43 let audit_logger = Arc::new(AuditLogger {
44 log: Arc::new(Default::default()),
45 });
46 let audit_handler = Arc::new(AuditLogEventHandler::new(audit_logger.clone()));
47 handler_chain.add_handler(audit_handler).await;
48
49 (
50 Arc::new(DefaultEventPublisher::new(Arc::new(handler_chain))),
51 audit_logger,
52 )
53}