1 module hunt.framework.provider.DatabaseServiceProvider;
2 
3 import hunt.framework.provider.ServiceProvider;
4 import hunt.framework.config.ApplicationConfig;
5 
6 import hunt.logging.ConsoleLogger;
7 import hunt.entity;
8 import poodinis;
9 
10 /**
11  * 
12  */
13 class DatabaseServiceProvider : ServiceProvider {
14     private bool _isEnabled = true;
15 
16     override void register() {
17         container.register!(EntityManagerFactory)(&buildEntityManagerFactory)
18             .singleInstance();
19     }
20 
21     private EntityManagerFactory buildEntityManagerFactory() {
22         ApplicationConfig appConfig = container.resolve!ApplicationConfig();
23         ApplicationConfig.DatabaseConf config = appConfig.database;
24 
25         if (config.enabled) {
26 
27             import hunt.entity.EntityOption;
28 
29             auto option = new EntityOption;
30 
31             // database options
32             option.database.driver = config.driver;
33             option.database.host = config.host;
34             option.database.username = config.username;
35             option.database.password = config.password;
36             option.database.port = config.port;
37             option.database.database = config.database;
38             option.database.charset = config.charset;
39             option.database.prefix = config.prefix;
40 
41             // database pool options
42             option.pool.minIdle = config.pool.minIdle;
43             option.pool.idleTimeout = config.pool.idleTimeout;
44             option.pool.maxPoolSize = config.pool.maxPoolSize;
45             option.pool.minPoolSize = config.pool.minPoolSize;
46             option.pool.maxLifetime = config.pool.maxLifetime;
47             option.pool.connectionTimeout = config.pool.connectionTimeout;
48             option.pool.maxConnection = config.pool.maxConnection;
49             option.pool.minConnection = config.pool.minConnection;
50 
51             version(HUNT_DEBUG) infof("Using database: %s", config.driver);
52             return Persistence.createEntityManagerFactory(option);
53         } else {
54             // version(HUNT_DEBUG) warning("The database is disabled.");
55             // return null;
56             throw new Exception("The database is disabled.");
57         }
58     }
59 
60     override void boot() {
61         ApplicationConfig appConfig = container.resolve!ApplicationConfig();
62         ApplicationConfig.DatabaseConf config = appConfig.database;
63         if(config.enabled) {
64             EntityManagerFactory factory = container.resolve!EntityManagerFactory();
65         }
66     }
67 }