Skip to main content

rseata_tc/
lib.rs

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}