Add validation to notification
This commit is contained in:
@@ -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(
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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()))
|
||||||
|
|||||||
Reference in New Issue
Block a user