aboutsummaryrefslogtreecommitdiffstats
path: root/ui-desktop/src/main/java/market/guess/ui/desktop/ServiceEngine.java
blob: 549991e0b1e352792781459d7546faccfbd139bd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package market.guess.ui.desktop;

import java.time.Clock;
import market.guess.api.AccountContext;
import market.guess.api.CatalogContext;
import market.guess.api.GuessMarketContext;
import market.guess.service.LocalGuessMarketContext;
import market.guess.service.catalog.LocalCatalogContext;
import market.guess.service.catalog.infrastructure.MarketContext;
import market.guess.service.catalog.infrastructure.mapper.v2.EventMapperV2;
import market.guess.service.catalog.infrastructure.provider.Loader;
import market.guess.service.catalog.infrastructure.provider.v2.XMLLoaderV2;
import market.guess.service.catalog.infrastructure.provider.v2.XMLValidatorV2;
import market.guess.service.catalog.infrastructure.repository.EventRepository;
import market.guess.service.catalog.infrastructure.repository.InMemoryEventRepository;
import market.guess.service.catalog.infrastructure.repository.InMemoryUserRepository;
import market.guess.service.catalog.infrastructure.repository.UserRepository;
import market.guess.service.fulfillment.FulfillmentContext;
import market.guess.service.fulfillment.LocalFulfillmentContext;
import market.guess.service.ledger.LedgerContext;
import market.guess.service.ledger.LocalAccountContext;
import market.guess.service.matching.LocalMatchingEngine;
import market.guess.service.matching.MatchingEngine;
import market.guess.service.risk.LocalRiskEngine;
import market.guess.service.risk.RiskEngine;
import market.guess.service.settlement.LocalSettlementContext;
import market.guess.service.settlement.SettlementContext;

public final class ServiceEngine {
  private final CatalogContext catalogContext;
  private final GuessMarketContext marketContext;
  private final AccountContext accountContext;

  public ServiceEngine() {
    this(Clock.systemUTC());
  }

  public ServiceEngine(Clock clock) {
    EventRepository eventRepo = new InMemoryEventRepository();
    UserRepository userRepo = new InMemoryUserRepository();
    MarketContext marketContextInfrastructure = new MarketContext(eventRepo, userRepo);
    EventMapperV2 mapper = new EventMapperV2();
    XMLValidatorV2 validator = new XMLValidatorV2();
    Loader loader = new XMLLoaderV2(eventRepo, userRepo, mapper, validator);

    this.catalogContext = new LocalCatalogContext(loader, marketContextInfrastructure, eventRepo);
    this.accountContext = new LocalAccountContext(userRepo);

    LedgerContext ledgerContext = new LedgerContext(userRepo, clock);
    RiskEngine risk = new LocalRiskEngine(eventRepo);
    MatchingEngine matching = new LocalMatchingEngine(clock);
    FulfillmentContext fulfillment = new LocalFulfillmentContext(ledgerContext);
    SettlementContext settlement = new LocalSettlementContext(ledgerContext);

    this.marketContext =
        new LocalGuessMarketContext(
            marketContextInfrastructure, risk, matching, fulfillment, settlement);
  }

  public CatalogContext getCatalogContext() {
    return catalogContext;
  }

  public GuessMarketContext getMarketContext() {
    return marketContext;
  }

  public AccountContext getAccountContext() {
    return accountContext;
  }
}