11package me .whereareiam .intercept .adapter .database ;
22
33import com .google .inject .AbstractModule ;
4+ import com .google .inject .Provider ;
45import com .google .inject .Provides ;
56import com .google .inject .Singleton ;
67import me .whereareiam .intercept .adapter .database .message .DefaultMessagePersistenceService ;
8+ import me .whereareiam .intercept .adapter .database .message .DummyMessagePersistenceService ;
79import me .whereareiam .intercept .adapter .database .player .DefaultPlayerPersistenceService ;
10+ import me .whereareiam .intercept .adapter .database .player .DummyPlayerPersistenceService ;
811import me .whereareiam .intercept .adapter .database .player .PlayerDatabaseBridge ;
912import me .whereareiam .intercept .adapter .database .provider .JdbiProvider ;
1013import me .whereareiam .intercept .adapter .database .repository .message .MessageEntryRepository ;
1619import me .whereareiam .intercept .database .DatabaseService ;
1720import me .whereareiam .intercept .database .MessagePersistenceService ;
1821import me .whereareiam .intercept .database .PlayerPersistenceService ;
22+ import me .whereareiam .intercept .event .EventManager ;
23+ import me .whereareiam .intercept .model .config .Persistence ;
1924import org .jdbi .v3 .core .Jdbi ;
2025
2126/**
2227 * Guice configuration module for database adapter.
2328 * Provides database-related services and bindings.
29+ * Conditionally provides real or dummy implementations based on persistence configuration.
2430 */
2531public class DatabaseConfiguration extends AbstractModule {
2632 @ Override
2733 protected void configure () {
28- bind (DatabaseService .class ).to (DefaultDatabaseService .class ).asEagerSingleton ();
2934 bind (Jdbi .class ).toProvider (JdbiProvider .class );
30- bind (MessagePersistenceService .class ).to (DefaultMessagePersistenceService .class );
31- bind (PlayerPersistenceService .class ).to (DefaultPlayerPersistenceService .class );
32-
33- // Bridge registers itself as an event listener in constructor
34- bind (PlayerDatabaseBridge .class ).asEagerSingleton ();
3535 }
3636
3737 @ Provides
3838 @ Singleton
39- public MessageFileRepository provideMessageFileRepository (Jdbi jdbi ) {
40- return jdbi .onDemand (MessageFileRepository .class );
39+ public DatabaseService provideDatabaseService (
40+ Provider <DefaultDatabaseService > realServiceProvider ,
41+ Provider <DummyDatabaseService > dummyServiceProvider ,
42+ Persistence persistence
43+ ) {
44+ return persistence .isEnabled () ? realServiceProvider .get () : dummyServiceProvider .get ();
4145 }
4246
4347 @ Provides
4448 @ Singleton
45- public MessageEntryRepository provideMessageEntryRepository (Jdbi jdbi ) {
46- return jdbi .onDemand (MessageEntryRepository .class );
49+ public MessagePersistenceService provideMessagePersistenceService (
50+ Provider <DefaultMessagePersistenceService > realServiceProvider ,
51+ Provider <DummyMessagePersistenceService > dummyServiceProvider ,
52+ Persistence persistence
53+ ) {
54+ return persistence .isEnabled () ? realServiceProvider .get () : dummyServiceProvider .get ();
4755 }
4856
4957 @ Provides
5058 @ Singleton
51- public MessageTranslationRepository provideMessageTranslationRepository (Jdbi jdbi ) {
52- return jdbi .onDemand (MessageTranslationRepository .class );
59+ public PlayerPersistenceService providePlayerPersistenceService (
60+ Provider <DefaultPlayerPersistenceService > realServiceProvider ,
61+ Provider <DummyPlayerPersistenceService > dummyServiceProvider ,
62+ Persistence persistence
63+ ) {
64+ return persistence .isEnabled () ? realServiceProvider .get () : dummyServiceProvider .get ();
5365 }
5466
5567 @ Provides
5668 @ Singleton
57- public MessageRegexPatternRepository provideMessageRegexPatternRepository (Jdbi jdbi ) {
58- return jdbi .onDemand (MessageRegexPatternRepository .class );
69+ public PlayerDatabaseBridge providePlayerDatabaseBridge (
70+ PlayerPersistenceService persistenceService ,
71+ DatabaseService databaseService ,
72+ EventManager eventManager
73+ ) {
74+ // Always create the bridge - it checks databaseService.isInitialized() before operations
75+ return new PlayerDatabaseBridge (persistenceService , databaseService , eventManager );
5976 }
6077
6178 @ Provides
6279 @ Singleton
63- public MessageRegexPlaceholderRepository provideMessageRegexPlaceholderRepository (Jdbi jdbi ) {
64- return jdbi .onDemand (MessageRegexPlaceholderRepository .class );
80+ public MessageFileRepository provideMessageFileRepository (Jdbi jdbi , Persistence persistence ) {
81+ return persistence . isEnabled () ? jdbi .onDemand (MessageFileRepository .class ) : null ;
6582 }
6683
6784 @ Provides
6885 @ Singleton
69- public PlayerRepository providePlayerRepository (Jdbi jdbi ) {
70- return jdbi .onDemand (PlayerRepository .class );
86+ public MessageEntryRepository provideMessageEntryRepository (Jdbi jdbi , Persistence persistence ) {
87+ return persistence .isEnabled () ? jdbi .onDemand (MessageEntryRepository .class ) : null ;
88+ }
89+
90+ @ Provides
91+ @ Singleton
92+ public MessageTranslationRepository provideMessageTranslationRepository (Jdbi jdbi , Persistence persistence ) {
93+ return persistence .isEnabled () ? jdbi .onDemand (MessageTranslationRepository .class ) : null ;
94+ }
95+
96+ @ Provides
97+ @ Singleton
98+ public MessageRegexPatternRepository provideMessageRegexPatternRepository (Jdbi jdbi , Persistence persistence ) {
99+ return persistence .isEnabled () ? jdbi .onDemand (MessageRegexPatternRepository .class ) : null ;
100+ }
101+
102+ @ Provides
103+ @ Singleton
104+ public MessageRegexPlaceholderRepository provideMessageRegexPlaceholderRepository (Jdbi jdbi , Persistence persistence ) {
105+ return persistence .isEnabled () ? jdbi .onDemand (MessageRegexPlaceholderRepository .class ) : null ;
106+ }
107+
108+ @ Provides
109+ @ Singleton
110+ public PlayerRepository providePlayerRepository (Jdbi jdbi , Persistence persistence ) {
111+ return persistence .isEnabled () ? jdbi .onDemand (PlayerRepository .class ) : null ;
71112 }
72113}
0 commit comments