#54 Can create article under the name of the Workgroup
This commit is contained in:
@@ -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 :
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
@@ -1334,6 +1334,8 @@ components:
|
||||
properties:
|
||||
user:
|
||||
$ref: '#/components/schemas/UserResponse'
|
||||
workgroups:
|
||||
$ref: '#/components/schemas/WorkgroupSimple'
|
||||
CitizenBase:
|
||||
type: object
|
||||
properties:
|
||||
@@ -1365,6 +1367,8 @@ components:
|
||||
properties:
|
||||
user:
|
||||
$ref: '#/components/schemas/UserRequest'
|
||||
workgroups:
|
||||
$ref: '#/components/schemas/UuidEntity'
|
||||
|
||||
RegisterRequest:
|
||||
$ref: '#/components/schemas/CitizenRequest'
|
||||
@@ -1419,6 +1423,11 @@ components:
|
||||
type: boolean
|
||||
required: false
|
||||
default: false
|
||||
workgroup:
|
||||
allOf:
|
||||
- $ref: '#/components/schemas/UuidEntity'
|
||||
- required: false
|
||||
- default: null
|
||||
- $ref: '#/components/schemas/versionId'
|
||||
ArticleResponse:
|
||||
type: object
|
||||
|
||||
@@ -7,9 +7,15 @@ begin
|
||||
from (
|
||||
select
|
||||
z.*,
|
||||
find_user_by_id(z.user_id) as "user"
|
||||
find_user_by_id(z.user_id) as "user",
|
||||
case when ciw.workgroup_id is null then '{}' else array_agg(json_build_object(
|
||||
'roles', ciw.roles,
|
||||
'workgroup', find_workgroup_by_id_simple(ciw.workgroup_id)
|
||||
)) end as "workgroups"
|
||||
from citizen as z
|
||||
left join citizen_in_workgroup ciw on z.id = ciw.citizen_id
|
||||
where z.user_id = _user_id
|
||||
group by z.id, ciw.workgroup_id
|
||||
) as t;
|
||||
end;
|
||||
$$;
|
||||
|
||||
@@ -58,7 +58,8 @@ internal class CommentVoterTest {
|
||||
content = "Hi",
|
||||
createdBy = einstein,
|
||||
description = "blablabla",
|
||||
title = "Super article"
|
||||
title = "Super article",
|
||||
workgroup = null
|
||||
).apply { deletedAt = DateTime.now() }
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user