#54 Can create article under the name of the Workgroup

This commit is contained in:
2020-07-10 15:41:39 +02:00
parent 3d319605de
commit 01c3d85a17
6 changed files with 40 additions and 9 deletions

View File

@@ -16,10 +16,11 @@ class Article(
override var tags: List<String> = emptyList(),
draft: Boolean = false,
override var lastVersion: Boolean = false,
override val createdBy: CitizenBasic
override val createdBy: CitizenBasic,
workgroup: WorkgroupSimple<CitizenRef>? = null
) : ArticleFull,
ArticleAuthI<CitizenBasicI>,
ArticleSimple(id, title, createdBy, draft),
ArticleSimple(id, title, createdBy, draft, workgroup),
Viewable by ViewableImp() {
init {
tags = tags.distinct()
@@ -30,7 +31,8 @@ open class ArticleSimple(
id: UUID = UUID.randomUUID(),
override var title: String,
override val createdBy: CitizenBasic,
override var draft: Boolean = false
override var draft: Boolean = false,
override var workgroup: WorkgroupSimple<CitizenRef>? = null
) : ArticleSimpleI,
ArticleAuthI<CitizenBasicI>,
ArticleRefVersioning(id),
@@ -61,6 +63,7 @@ interface ArticleSimpleI :
EntityDeletedAt,
Votable {
var title: String
var workgroup: WorkgroupSimple<CitizenRef>?
}
interface ArticleBasicI :

View File

@@ -2,9 +2,13 @@ package fr.dcproject.routes
import fr.dcproject.citizen
import fr.dcproject.citizenOrNull
import fr.dcproject.entity.CitizenRef
import fr.dcproject.entity.WorkgroupRef
import fr.dcproject.entity.WorkgroupSimple
import fr.dcproject.event.ArticleUpdate
import fr.dcproject.event.raiseEvent
import fr.dcproject.repository.Article.Filter
import fr.dcproject.repository.Workgroup as WorkgroupRepository
import fr.dcproject.security.voter.ArticleVoter.Action.CREATE
import fr.dcproject.security.voter.ArticleVoter.Action.VIEW
import fr.dcproject.views.ArticleViewManager
@@ -20,6 +24,8 @@ import io.ktor.request.receive
import io.ktor.response.respond
import io.ktor.routing.Route
import kotlinx.coroutines.launch
import org.koin.core.KoinComponent
import org.koin.core.inject
import java.util.*
import fr.dcproject.entity.Article as ArticleEntity
import fr.dcproject.repository.Article as ArticleRepository
@@ -56,7 +62,7 @@ object ArticlesPaths {
}
@Location("/articles")
class PostArticleRequest {
class PostArticleRequest: KoinComponent {
class Article(
val id: UUID?,
val title: String,
@@ -65,9 +71,12 @@ object ArticlesPaths {
val description: String,
val tags: List<String> = emptyList(),
val draft: Boolean = false,
val versionId: UUID?
val versionId: UUID?,
val workgroup: WorkgroupRef?
)
private val workgroupRepository: WorkgroupRepository by inject()
suspend fun getNewArticle(call: ApplicationCall): ArticleEntity = call.receive<Article>().run {
ArticleEntity(
id ?: UUID.randomUUID(),
@@ -77,7 +86,8 @@ object ArticlesPaths {
description,
tags,
draft,
createdBy = call.citizen
createdBy = call.citizen,
workgroup = if (workgroup != null) workgroupRepository.findById(workgroup.id) as WorkgroupSimple<CitizenRef> else null
).also {
it.versionId = versionId ?: UUID.randomUUID()
}