1 Commits

Author SHA1 Message Date
32f62ec5ab Add validation to notification 2021-04-14 23:53:19 +02:00
2 changed files with 16 additions and 2 deletions

View File

@@ -11,6 +11,8 @@ import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import com.fasterxml.jackson.module.kotlin.readValue import com.fasterxml.jackson.module.kotlin.readValue
import fr.dcproject.common.entity.Entity import fr.dcproject.common.entity.Entity
import fr.dcproject.component.article.database.ArticleForView import fr.dcproject.component.article.database.ArticleForView
import io.konform.validation.Validation
import io.konform.validation.jsonschema.enum
import org.joda.time.DateTime import org.joda.time.DateTime
import java.util.concurrent.atomic.AtomicInteger import java.util.concurrent.atomic.AtomicInteger
@@ -50,6 +52,14 @@ open class Notification(
inline fun <reified T : Notification> fromString(raw: String): T = mapper.readValue(raw) inline fun <reified T : Notification> fromString(raw: String): T = mapper.readValue(raw)
} }
fun getValidation() = Validation<Notification> {
Notification::type {
enum(
"article"
)
}
}
} }
open class EntityNotification( open class EntityNotification(

View File

@@ -1,6 +1,7 @@
package fr.dcproject.component.notification package fr.dcproject.component.notification
import com.fasterxml.jackson.core.JsonProcessingException import com.fasterxml.jackson.core.JsonProcessingException
import fr.dcproject.application.http.badRequestIfNotValid
import fr.dcproject.component.auth.citizen import fr.dcproject.component.auth.citizen
import fr.dcproject.component.citizen.database.CitizenI import fr.dcproject.component.citizen.database.CitizenI
import io.ktor.http.cio.websocket.Frame import io.ktor.http.cio.websocket.Frame
@@ -28,7 +29,7 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
class NotificationsPush( class NotificationsPush (
private val redis: RedisAsyncCommands<String, String>, private val redis: RedisAsyncCommands<String, String>,
private val redisConnectionPubSub: StatefulRedisPubSubConnection<String, String>, private val redisConnectionPubSub: StatefulRedisPubSubConnection<String, String>,
citizen: CitizenI, citizen: CitizenI,
@@ -52,7 +53,10 @@ class NotificationsPush(
val incomingFlow: Flow<Notification> = ws.incoming.consumeAsFlow() val incomingFlow: Flow<Notification> = ws.incoming.consumeAsFlow()
.mapNotNull<Frame, Text> { it as? Frame.Text } .mapNotNull<Frame, Text> { it as? Frame.Text }
.map { it.readText() } .map { it.readText() }
.map { Notification.fromString(it) } .map {
Notification.fromString<Notification>(it)
.apply { getValidation().validate(this).badRequestIfNotValid() }
}
return build(ws.call.citizen, incomingFlow) { return build(ws.call.citizen, incomingFlow) {
ws.outgoing.send(Text(it.toString())) ws.outgoing.send(Text(it.toString()))