unit_ca5/src/main/scala/db/DatabaseLayer.scala

58 lines
1.6 KiB
Scala

/*
UNIT_CA5 - Stream management bot
Copyright (C) 2024 digimint
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package db
import modules.uac.UACModule
import modules.executor.ExecutorModule
import scala.concurrent.Future
import slick.jdbc.JdbcProfile
import scala.concurrent.ExecutionContext
class DatabaseLayer(
val uac: UACModule,
val exec: ExecutorModule
)
object DatabaseLayer:
def setup(
profile: JdbcProfile,
config_loc: String = "db_conf"
)(implicit ec: ExecutionContext): Future[DatabaseLayer] =
import profile.api._
val database = Database.forConfig(config_loc)
// Construct and initialize modules
val uacModule = UACModule(profile, database)
val uacSetupActions = uacModule.setup
val executorModule = ExecutorModule(profile, database)
val executorSetupOptions = executorModule.setup
// Run initialization actions
val initActions = DBIO.seq(
uacSetupActions,
executorSetupOptions
)
database.run(initActions).map(_ =>
DatabaseLayer(uacModule, executorModule)
)