Try to fix login POST failure
authorTheSaminator <TheSaminator@users.noreply.github.com>
Sun, 6 Feb 2022 21:56:44 +0000 (16:56 -0500)
committerTheSaminator <TheSaminator@users.noreply.github.com>
Sun, 6 Feb 2022 21:56:44 +0000 (16:56 -0500)
src/jvmMain/kotlin/starshipfights/data/data_documents.kt
src/jvmMain/kotlin/starshipfights/data/data_routines.kt

index cacfb990bd6999da108820ffcb87df6b6ecb955e..096517c9036fb06705fe8495e3266b21f8e3ce2d 100644 (file)
@@ -35,6 +35,8 @@ object DocumentIdController : IdController {
 }
 
 interface DocumentTable<T : DataDocument<T>> {
+       fun initialize()
+       
        suspend fun index(vararg properties: KProperty1<T, *>)
        suspend fun unique(vararg properties: KProperty1<T, *>)
        
@@ -57,15 +59,17 @@ interface DocumentTable<T : DataDocument<T>> {
                        logger.error("Caught unhandled exception from initializing $name!", ex)
                }
                
-               fun <T : DataDocument<T>> create(kclass: KClass<T>, initFunc: suspend DocumentTable<T>.() -> Unit = {}): DocumentTable<T> = DocumentTableImpl(kclass).also {
-                       launch { it.initFunc() }
+               fun <T : DataDocument<T>> create(kclass: KClass<T>, initFunc: suspend DocumentTable<T>.() -> Unit = {}): DocumentTable<T> = DocumentTableImpl(kclass) {
+                       runBlocking {
+                               it.initFunc()
+                       }
                }
                
                inline fun <reified T : DataDocument<T>> create(noinline initFunc: suspend DocumentTable<T>.() -> Unit = {}) = create(T::class, initFunc)
        }
 }
 
-private class DocumentTableImpl<T : DataDocument<T>>(val kclass: KClass<T>) : DocumentTable<T> {
+private class DocumentTableImpl<T : DataDocument<T>>(val kclass: KClass<T>, private val initFunc: (DocumentTable<T>) -> Unit) : DocumentTable<T> {
        private var collection: CoroutineCollection<T>? = null
        suspend fun collection() =
                collection
@@ -73,6 +77,10 @@ private class DocumentTableImpl<T : DataDocument<T>>(val kclass: KClass<T>) : Do
                                collection = it
                        }
        
+       override fun initialize() {
+               initFunc(this)
+       }
+       
        override suspend fun index(vararg properties: KProperty1<T, *>) {
                collection().ensureIndex(*properties)
        }
index 2f8a1d62a688cef2a934ee70202a0ee9f14bbbf6..064c6c68ecbab2af7677270dd6615de505ebe758 100644 (file)
@@ -2,6 +2,10 @@ package starshipfights.data
 
 import kotlinx.coroutines.*
 import org.litote.kmongo.lte
+import starshipfights.data.admiralty.Admiral
+import starshipfights.data.admiralty.BattleRecord
+import starshipfights.data.admiralty.ShipInDrydock
+import starshipfights.data.auth.User
 import starshipfights.data.auth.UserSession
 import starshipfights.sfLogger
 import kotlin.coroutines.CoroutineContext
@@ -12,13 +16,22 @@ object DataRoutines : CoroutineScope {
                sfLogger.error("Caught unhandled exception in $coroutine", ex)
        }
        
-       fun initializeRoutines() = launch {
-               launch {
-                       while (currentCoroutineContext().isActive) {
-                               launch {
-                                       UserSession.remove(UserSession::expirationMillis lte System.currentTimeMillis())
+       fun initializeRoutines(): Job {
+               // Initialize tables by referring to them
+               Admiral.initialize()
+               BattleRecord.initialize()
+               ShipInDrydock.initialize()
+               User.initialize()
+               UserSession.initialize()
+               
+               return launch {
+                       launch {
+                               while (currentCoroutineContext().isActive) {
+                                       launch {
+                                               UserSession.remove(UserSession::expirationMillis lte System.currentTimeMillis())
+                                       }
+                                       delay(3600_000)
                                }
-                               delay(3600_000)
                        }
                }
        }