import io.ktor.sessions.*
import io.ktor.util.*
import kotlinx.coroutines.coroutineScope
+import kotlinx.coroutines.flow.filter
+import kotlinx.coroutines.flow.singleOrNull
import kotlinx.coroutines.launch
import kotlinx.html.*
-import org.litote.kmongo.eq
import starshipfights.CurrentConfiguration
import starshipfights.data.Id
import starshipfights.data.admiralty.Admiral
val userAgent = request.userAgent()
if (userAgent != null && credentials.name.isValidUsername() && credentials.password == TEST_PASSWORD) {
sfLogger.info("Attempting to find user ${credentials.name}")
- val user = User.locate(User::username eq credentials.name)
+ // TODO find out why java mongodb driver is such a piece of shit
+ //val user = User.locate(User::username eq credentials.name)
+ val user = User.all().filter { it.username == credentials.name }.singleOrNull()
?: User(username = credentials.name).also {
sfLogger.info("Attempting to add user with name ${credentials.name}")
User.put(it)
package starshipfights.data
-import com.mongodb.ConnectionString
-import com.mongodb.MongoClientSettings
-import com.mongodb.event.CommandFailedEvent
-import com.mongodb.event.CommandListener
-import com.mongodb.event.CommandStartedEvent
-import com.mongodb.event.CommandSucceededEvent
import de.flapdoodle.embed.mongo.MongodExecutable
import de.flapdoodle.embed.mongo.MongodStarter
import de.flapdoodle.embed.mongo.config.MongoCmdOptions
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import starshipfights.game.MomentSerializer
-import starshipfights.sfLogger
import java.io.File
import java.net.ServerSocket
import kotlin.system.exitProcess
registerSerializer(MomentSerializer)
databaseName = db
- clientDeferred.complete(
- KMongo.createClient(
- MongoClientSettings
- .builder()
- .applyConnectionString(ConnectionString(conn.createUrl()))
- .addCommandListener(object : CommandListener {
- override fun commandStarted(event: CommandStartedEvent) {
- sfLogger.info("Started Mongo command ${event.commandName}")
- }
-
- override fun commandSucceeded(event: CommandSucceededEvent) {
- sfLogger.info("Succeeded Mongo command ${event.commandName}")
- }
-
- override fun commandFailed(event: CommandFailedEvent) {
- sfLogger.info("Failed Mongo command ${event.commandName}")
- }
- })
- .build()
- ).coroutine
- )
+ clientDeferred.complete(KMongo.createClient(conn.createUrl()).coroutine)
}
}
suspend fun put(doc: T)
suspend fun get(id: Id<T>): T?
suspend fun del(id: Id<T>)
+ suspend fun all(): Flow<T>
suspend fun select(bson: Bson): Flow<T>
suspend fun locate(bson: Bson): T?
collection().deleteOneById(id)
}
+ override suspend fun all(): Flow<T> {
+ return collection().find().toFlow()
+ }
+
override suspend fun select(bson: Bson): Flow<T> {
return collection().find(bson).toFlow()
}