Skip to content

Commit b375873

Browse files
authored
Add form template inGroup endpoints (#270)
1 parent 2945a98 commit b375873

File tree

7 files changed

+111
-50
lines changed

7 files changed

+111
-50
lines changed

core/src/main/kotlin/org/taktik/icure/asyncdao/impl/FormTemplateDAOImpl.kt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import org.taktik.couchdb.queryViewIncludeDocsNoValue
2424
import org.taktik.icure.asyncdao.CouchDbDispatcher
2525
import org.taktik.icure.asyncdao.FormTemplateDAO
2626
import org.taktik.icure.cache.ConfiguredCacheProvider
27-
import org.taktik.icure.cache.EntityCacheFactory
2827
import org.taktik.icure.cache.getConfiguredCache
2928
import org.taktik.icure.config.DaoConfig
3029
import org.taktik.icure.datastore.IDatastoreInformation
@@ -125,11 +124,6 @@ internal class FormTemplateDAOImpl(
125124
)
126125
}
127126

128-
override suspend fun createFormTemplate(datastoreInformation: IDatastoreInformation, entity: FormTemplate): FormTemplate {
129-
super.save(datastoreInformation, true, entity)
130-
return entity
131-
}
132-
133127
/**
134128
* Note: we treat the attachments here instead of in logic because on the client side we don't treat this as an
135129
* entity with attachments. The fact we store part of its content as a couchdb attachment is an implementation

core/src/main/kotlin/org/taktik/icure/asynclogic/impl/FormTemplateLogicImpl.kt

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ package org.taktik.icure.asynclogic.impl
55

66
import kotlinx.coroutines.flow.Flow
77
import kotlinx.coroutines.flow.emitAll
8-
import kotlinx.coroutines.flow.firstOrNull
98
import kotlinx.coroutines.flow.flow
109
import kotlinx.coroutines.flow.onEmpty
1110
import org.springframework.context.annotation.Profile
@@ -33,16 +32,6 @@ class FormTemplateLogicImpl(
3332
emitAll(super.createEntities(entities))
3433
}
3534

36-
override suspend fun createFormTemplate(entity: FormTemplate) = fix(entity, isCreate = true) { fixedEntity ->
37-
val datastoreInformation = getInstanceAndGroup()
38-
formTemplateDAO.createFormTemplate(datastoreInformation, fixedEntity)
39-
}
40-
41-
override suspend fun getFormTemplate(formTemplateId: String): FormTemplate? {
42-
val datastoreInformation = getInstanceAndGroup()
43-
return formTemplateDAO.get(datastoreInformation, formTemplateId)
44-
}
45-
4635
@Deprecated("This method has unintuitive behaviour, read FormTemplateService.getFormTemplatesByGuid doc for more info")
4736
override fun getFormTemplatesByGuid(
4837
userId: String,
@@ -73,10 +62,5 @@ class FormTemplateLogicImpl(
7362
emitAll(formTemplateDAO.listFormTemplatesByUserGuid(datastoreInformation, userId, null, loadLayout))
7463
}
7564

76-
override suspend fun modifyFormTemplate(formTemplate: FormTemplate) = fix(formTemplate, isCreate = false) { fixedTemplate ->
77-
val datastoreInformation = getInstanceAndGroup()
78-
formTemplateDAO.save(datastoreInformation, fixedTemplate)
79-
}
80-
8165
override fun getGenericDAO(): FormTemplateDAO = formTemplateDAO
8266
}

core/src/main/kotlin/org/taktik/icure/services/external/rest/v1/controllers/core/FormController.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -379,9 +379,9 @@ class FormController(
379379
@DeleteMapping("/template/{formTemplateId}")
380380
fun deleteFormTemplate(
381381
@PathVariable formTemplateId: String,
382+
@RequestParam(required = false) rev: String?,
382383
) = mono {
383-
formTemplateService.deleteFormTemplates(setOf(formTemplateId)).firstOrNull()?.let { DocIdentifierDto(it.id, it.rev) }
384-
?: throw ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "Form deletion failed")
384+
formTemplateService.deleteFormTemplate(formTemplateId, rev).let { DocIdentifierDto(it.id, it.rev) }
385385
}
386386

387387
@Operation(summary = "Modify a form template with the current user", description = "Returns an instance of created form template.")
@@ -393,7 +393,6 @@ class FormController(
393393
val template = formTemplateMapper.map(ft).copy(id = formTemplateId)
394394
val formTemplate =
395395
formTemplateService.modifyFormTemplate(template)
396-
?: throw ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "Form modification failed")
397396
formTemplateMapper.map(formTemplate)
398397
}
399398

core/src/main/kotlin/org/taktik/icure/services/external/rest/v2/controllers/core/FormController.kt

Lines changed: 92 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -414,28 +414,106 @@ class FormController(
414414
formTemplateV2Mapper.map(formTemplate)
415415
}
416416

417-
@Operation(summary = "Delete a form template")
417+
@Operation(summary = "Modify a form template with the current user", description = "Returns an instance of created form template.")
418+
@PutMapping("/template", consumes = [APPLICATION_JSON_VALUE])
419+
fun modifyFormTemplate(
420+
@RequestBody ft: FormTemplateDto,
421+
): Mono<FormTemplateDto> = mono {
422+
val template = formTemplateV2Mapper.map(ft)
423+
val formTemplate = formTemplateService.modifyFormTemplate(template)
424+
425+
formTemplateV2Mapper.map(formTemplate)
426+
}
427+
428+
@Operation(summary = "Get form templates by their ids")
429+
@PostMapping("/template/byIds")
430+
fun getFormTemplates(
431+
@RequestBody formTemplateIds: ListOfIdsDto
432+
): Flux<FormTemplateDto> = formTemplateService.getFormTemplates(formTemplateIds.ids)
433+
.map(formTemplateV2Mapper::map)
434+
.injectReactorContext()
435+
436+
@Operation(summary = "Create a batch of form templates", description = "Returns instances of created form templates.")
437+
@PostMapping("/template/batch")
438+
fun createFormTemplates(
439+
@RequestBody formTemplates: List<FormTemplateDto>,
440+
): Flux<FormTemplateDto> = flow {
441+
emitAll(
442+
formTemplateService.createFormTemplates(
443+
formTemplates.map(formTemplateV2Mapper::map),
444+
emptyList()
445+
).map(formTemplateV2Mapper::map)
446+
)
447+
}.injectReactorContext()
448+
449+
@Operation(summary = "Modify a batch of form templates", description = "Returns instances of modified form templates.")
450+
@PutMapping("/template/batch")
451+
fun modifyFormTemplates(
452+
@RequestBody formTemplates: List<FormTemplateDto>,
453+
): Flux<FormTemplateDto> = formTemplateService.modifyFormTemplates(
454+
formTemplates.map(formTemplateV2Mapper::map)
455+
).map(formTemplateV2Mapper::map).injectReactorContext()
456+
457+
@Operation(summary = "Deletes a batch of FormTemplates if the current version matches the provided revs")
458+
@PostMapping("/template/delete/batch/withrev")
459+
fun deleteFormTemplates(
460+
@RequestBody formTemplateIds: ListOfIdsAndRevDto,
461+
): Flux<DocIdentifierDto> = formTemplateIds.ids.takeIf { it.isNotEmpty() }?.let { ids ->
462+
formTemplateService
463+
.deleteFormTemplatesWithRev(ids.map(idWithRevV2Mapper::map))
464+
.map { docIdentifierV2Mapper.map(DocIdentifier(it.id, it.rev)) }
465+
.injectCachedReactorContext(reactorCacheInjector, 100)
466+
}
467+
?: throw ResponseStatusException(HttpStatus.BAD_REQUEST, "A required query parameter was not specified for this request.").also {
468+
logger.error(it.message)
469+
}
470+
471+
@Operation(summary = "Deletes a FormTemplate")
418472
@DeleteMapping("/template/{formTemplateId}")
419473
fun deleteFormTemplate(
420474
@PathVariable formTemplateId: String,
421-
): Mono<DocIdentifierDto> = mono {
422-
formTemplateService.deleteFormTemplates(setOf(formTemplateId)).firstOrNull()?.let { DocIdentifierDto(it.id, it.rev) }
423-
?: throw ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "Form deletion failed")
475+
@RequestParam(required = false) rev: String?
476+
): Mono<DocIdentifierDto> = reactorCacheInjector.monoWithCachedContext(10) {
477+
formTemplateService.deleteFormTemplate(formTemplateId, rev)
478+
.let { docIdentifierV2Mapper.map(DocIdentifier(it.id, it.rev)) }
424479
}
425480

426-
@Operation(summary = "Modify a form template with the current user", description = "Returns an instance of created form template.")
427-
@PutMapping("/template/{formTemplateId}", consumes = [APPLICATION_JSON_VALUE])
428-
fun updateFormTemplate(
481+
@Operation(summary = "Undeletes a FormTemplate")
482+
@PostMapping("/template/undelete/{formTemplateId}")
483+
fun undeleteFormTemplate(
429484
@PathVariable formTemplateId: String,
430-
@RequestBody ft: FormTemplateDto,
431-
): Mono<FormTemplateDto> = mono {
432-
val template = formTemplateV2Mapper.map(ft).copy(id = formTemplateId)
433-
val formTemplate =
434-
formTemplateService.modifyFormTemplate(template)
435-
?: throw ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "Form modification failed")
436-
formTemplateV2Mapper.map(formTemplate)
485+
@RequestParam rev: String,
486+
): Mono<FormTemplateDto> = reactorCacheInjector.monoWithCachedContext(10) {
487+
formTemplateService.undeleteFormTemplate(formTemplateId, rev).let(formTemplateV2Mapper::map)
437488
}
438489

490+
@Operation(summary = "Undeletes a batch of FormTemplates")
491+
@PostMapping("/template/undelete/batch")
492+
fun undeleteFormTemplates(
493+
@RequestBody formTemplateIds: ListOfIdsAndRevDto,
494+
): Flux<FormTemplateDto> = formTemplateService
495+
.undeleteFormTemplates(formTemplateIds.ids.map(idWithRevV2Mapper::map))
496+
.map(formTemplateV2Mapper::map)
497+
.injectCachedReactorContext(reactorCacheInjector, 100)
498+
499+
@Operation(summary = "Purges a FormTemplate")
500+
@DeleteMapping("/template/purge/{formTemplateId}")
501+
fun purgeFormTemplate(
502+
@PathVariable formTemplateId: String,
503+
@RequestParam(required = true) rev: String,
504+
): Mono<DocIdentifierDto> = reactorCacheInjector.monoWithCachedContext(10) {
505+
formTemplateService.purgeFormTemplate(formTemplateId, rev).let(docIdentifierV2Mapper::map)
506+
}
507+
508+
@Operation(summary = "Purges a batch of FormTemplates")
509+
@PostMapping("/template/purge/batch")
510+
fun purgeFormTemplatesWithRev(
511+
@RequestBody formTemplateIds: ListOfIdsAndRevDto,
512+
): Flux<DocIdentifierDto> = formTemplateService
513+
.purgeFormTemplates(formTemplateIds.ids.map(idWithRevV2Mapper::map))
514+
.map(docIdentifierV2Mapper::map)
515+
.injectCachedReactorContext(reactorCacheInjector, 100)
516+
439517
@Operation(summary = "Update a form template's layout")
440518
@PutMapping("/template/{formTemplateId}/attachment/multipart", consumes = [MediaType.MULTIPART_FORM_DATA_VALUE])
441519
fun setTemplateAttachmentMulti(

dao/src/main/kotlin/org/taktik/icure/asyncdao/FormTemplateDAO.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,4 @@ interface FormTemplateDAO :
1616
fun listFormsByGuid(datastoreInformation: IDatastoreInformation, guid: String, loadLayout: Boolean): Flow<FormTemplate>
1717

1818
fun listFormsBySpecialtyAndGuid(datastoreInformation: IDatastoreInformation, specialityCode: String, guid: String?, loadLayout: Boolean): Flow<FormTemplate>
19-
20-
suspend fun createFormTemplate(datastoreInformation: IDatastoreInformation, entity: FormTemplate): FormTemplate
2119
}

logic/src/main/kotlin/org/taktik/icure/asynclogic/FormTemplateLogic.kt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,8 @@ import org.taktik.icure.entities.FormTemplate
1010
interface FormTemplateLogic : EntityPersister<FormTemplate> {
1111
fun createFormTemplates(entities: Collection<FormTemplate>, createdEntities: Collection<FormTemplate>): Flow<FormTemplate>
1212

13-
suspend fun createFormTemplate(entity: FormTemplate): FormTemplate
14-
15-
suspend fun getFormTemplate(formTemplateId: String): FormTemplate?
16-
1713
@Deprecated("This method has unintuitive behaviour, read FormTemplateService.getFormTemplatesByGuid doc for more info")
1814
fun getFormTemplatesByGuid(userId: String, specialityCode: String, formTemplateGuid: String): Flow<FormTemplate>
1915
fun getFormTemplatesBySpecialty(specialityCode: String, loadLayout: Boolean): Flow<FormTemplate>
2016
fun getFormTemplatesByUser(userId: String, loadLayout: Boolean): Flow<FormTemplate>
21-
22-
suspend fun modifyFormTemplate(formTemplate: FormTemplate): FormTemplate?
2317
}

service/src/main/kotlin/org/taktik/icure/asyncservice/FormTemplateService.kt

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,19 @@
55
package org.taktik.icure.asyncservice
66

77
import kotlinx.coroutines.flow.Flow
8+
import org.taktik.couchdb.DocIdentifier
9+
import org.taktik.couchdb.entity.IdAndRev
810
import org.taktik.icure.entities.FormTemplate
911

1012
interface FormTemplateService {
11-
fun createFormTemplates(entities: Collection<FormTemplate>, createdEntities: Collection<FormTemplate>): Flow<FormTemplate>
1213
suspend fun createFormTemplate(entity: FormTemplate): FormTemplate
1314
suspend fun getFormTemplate(formTemplateId: String): FormTemplate?
15+
suspend fun modifyFormTemplate(formTemplate: FormTemplate): FormTemplate
16+
17+
// Batch methods - standard (non-conflicting with base interface)
18+
fun createFormTemplates(entities: Collection<FormTemplate>, createdEntities: Collection<FormTemplate>): Flow<FormTemplate>
19+
fun modifyFormTemplates(formTemplates: List<FormTemplate>): Flow<FormTemplate>
20+
fun getFormTemplates(formTemplateIds: List<String>): Flow<FormTemplate>
1421

1522
/**
1623
* If there is any form template with author=[userId] and guid=[formTemplateGuid] returns them, regardless of
@@ -22,13 +29,20 @@ interface FormTemplateService {
2229
fun getFormTemplatesByGuid(userId: String, specialityCode: String, formTemplateGuid: String): Flow<FormTemplate>
2330
fun getFormTemplatesBySpecialty(specialityCode: String, loadLayout: Boolean): Flow<FormTemplate>
2431
fun getFormTemplatesByUser(userId: String, loadLayout: Boolean): Flow<FormTemplate>
25-
suspend fun modifyFormTemplate(formTemplate: FormTemplate): FormTemplate?
2632

2733
/**
2834
* Deletes [FormTemplate]s in batch.
2935
*
3036
* @param ids a [Set] containing the ids of the [FormTemplate]s to delete.
3137
* @return a [Flow] containing the deleted [FormTemplate]s.
3238
*/
33-
fun deleteFormTemplates(ids: Set<String>): Flow<FormTemplate>
39+
40+
suspend fun undeleteFormTemplate(formTemplateId: String, rev: String): FormTemplate
41+
suspend fun deleteFormTemplate(id: String, rev: String?): DocIdentifier
42+
fun deleteFormTemplates(ids: List<String>): Flow<FormTemplate>
43+
fun deleteFormTemplatesWithRev(formTemplateIds: List<IdAndRev>): Flow<DocIdentifier>
44+
fun undeleteFormTemplates(formTemplateIds: List<IdAndRev>): Flow<FormTemplate>
45+
suspend fun purgeFormTemplate(id: String, rev: String): DocIdentifier
46+
fun purgeFormTemplates(formTemplateIds: List<IdAndRev>): Flow<DocIdentifier>
47+
3448
}

0 commit comments

Comments
 (0)