Skip to content

Commit

Permalink
Fix missions control unit resources saving in Backend
Browse files Browse the repository at this point in the history
  • Loading branch information
ivangabriele committed Oct 23, 2023
1 parent 91df6b3 commit 721c842
Show file tree
Hide file tree
Showing 21 changed files with 140 additions and 194 deletions.
6 changes: 4 additions & 2 deletions backend/pom.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
Expand Down Expand Up @@ -325,7 +325,9 @@
</executions>
<configuration>
<compilerArgument>-parameters</compilerArgument>
</configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,11 @@ data class ControlUnitResourceEntity(

return result
}

fun toLegacyControlUnitEntity(): LegacyControlUnitResourceEntity {
return LegacyControlUnitResourceEntity(
id = requireNotNull(id),
name,
)
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package fr.gouv.cacem.monitorenv.domain.entities.controlUnit

// TODO Replace this entity with `FullControlUnitEntity`. It's left for `MissionEntity.units` backward compatibility.
// TODO Replace this entity with `ControlUnitEntity`. It's left for `MissionEntity.units` backward compatibility.
data class LegacyControlUnitEntity(
val id: Int,
val administration: String,
val isArchived: Boolean,
val name: String,
val resources: List<ControlUnitResourceEntity>,
val resources: List<LegacyControlUnitResourceEntity>,
val contact: String? = null,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package fr.gouv.cacem.monitorenv.domain.entities.controlUnit

// TODO Replace this entity with `ControlUnitResourceEntity`. It's left for `MissionEntity.units` backward compatibility.
data class LegacyControlUnitResourceEntity(
val id: Int,
val name: String,
)

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,7 @@ interface IControlUnitResourceRepository {

fun findAll(): List<FullControlUnitResourceDTO>

fun findAllById(controlUnitResourceIds: List<Int>): List<FullControlUnitResourceDTO>

fun save(controlUnitResource: ControlUnitResourceEntity): ControlUnitResourceEntity
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ data class FullControlUnitDTO(
administration = administration.name,
isArchived = controlUnit.isArchived,
name = controlUnit.name,
resources = controlUnitResources.map { it.toControlUnitResource() },
resources = controlUnitResources.map { it.toLegacyControlUnitResource() },
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,17 @@ package fr.gouv.cacem.monitorenv.domain.use_cases.controlUnit.dtos
import fr.gouv.cacem.monitorenv.domain.entities.base.BaseEntity
import fr.gouv.cacem.monitorenv.domain.entities.controlUnit.ControlUnitEntity
import fr.gouv.cacem.monitorenv.domain.entities.controlUnit.ControlUnitResourceEntity
import fr.gouv.cacem.monitorenv.domain.entities.controlUnit.LegacyControlUnitResourceEntity

data class FullControlUnitResourceDTO(
val base: BaseEntity,
val controlUnit: ControlUnitEntity,
val controlUnitResource: ControlUnitResourceEntity,
) {
fun toControlUnitResource(): ControlUnitResourceEntity {
return ControlUnitResourceEntity(
id = controlUnitResource.id,
baseId = controlUnitResource.baseId,
controlUnitId = controlUnitResource.controlUnitId,
isArchived = controlUnitResource.isArchived,
fun toLegacyControlUnitResource(): LegacyControlUnitResourceEntity {
return LegacyControlUnitResourceEntity(
id = requireNotNull(controlUnitResource.id),
name = controlUnitResource.name,
note = controlUnitResource.note,
photo = controlUnitResource.photo,
type = controlUnitResource.type,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,15 @@ data class LegacyControlUnitDataOutput(
val resources: List<LegacyControlUnitResourceDataOutput>,
) {
companion object {
fun fromLegacyControlUnit(legacyControlUnit: LegacyControlUnitEntity) = LegacyControlUnitDataOutput(
id = legacyControlUnit.id,
administration = legacyControlUnit.administration,
name = legacyControlUnit.name,
isArchived = legacyControlUnit.isArchived,
resources = legacyControlUnit.resources.map {
LegacyControlUnitResourceDataOutput.fromControlResourceEntity(it)
},
)
fun fromLegacyControlUnit(legacyControlUnit: LegacyControlUnitEntity) =
LegacyControlUnitDataOutput(
id = legacyControlUnit.id,
administration = legacyControlUnit.administration,
name = legacyControlUnit.name,
isArchived = legacyControlUnit.isArchived,
resources = legacyControlUnit.resources.map {
LegacyControlUnitResourceDataOutput.fromLegacyControlResourceEntity(it)
},
)
}
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs

import fr.gouv.cacem.monitorenv.domain.entities.controlUnit.ControlUnitResourceEntity
import fr.gouv.cacem.monitorenv.domain.entities.controlUnit.LegacyControlUnitResourceEntity

data class LegacyControlUnitResourceDataOutput(
val id: Int,
val name: String,
) {
companion object {
fun fromControlResourceEntity(controlUnitResource: ControlUnitResourceEntity) =
fun fromLegacyControlResourceEntity(
legacyControlUnitResource: LegacyControlUnitResourceEntity,
) =
LegacyControlUnitResourceDataOutput(
id = requireNotNull(controlUnitResource.id),
name = controlUnitResource.name,
id = requireNotNull(legacyControlUnitResource.id),
name = legacyControlUnitResource.name,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ class ApiLegacyControlUnitsController(
@GetMapping("")
@Operation(summary = "Get legacy control units")
fun getControlResourcesController(): List<LegacyControlUnitDataOutput> {
return getLegacyControlUnits.execute().map { LegacyControlUnitDataOutput.fromLegacyControlUnit(it) }
return getLegacyControlUnits.execute().map {
LegacyControlUnitDataOutput.fromLegacyControlUnit(it)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,28 @@ data class ControlUnitModel(
termsNote = controlUnit.termsNote,
)
}

/**
* @param controlUnitContactModels Return control unit contacts relations when provided.
* @param controlUnitResourceModels Return control unit resources relations when provided.
*/
fun fromFullControlUnit(
fullControlUnit: FullControlUnitDTO,
controlUnitContactModels: List<ControlUnitContactModel>? = null,
controlUnitResourceModels: List<ControlUnitResourceModel>? = null,
): ControlUnitModel {
return ControlUnitModel(
id = fullControlUnit.controlUnit.id,
areaNote = fullControlUnit.controlUnit.areaNote,
administration = AdministrationModel.fromAdministration(fullControlUnit.administration),
controlUnitContacts = controlUnitContactModels,
controlUnitResources = controlUnitResourceModels,
departmentArea = fullControlUnit.departmentArea?.let { DepartmentAreaModel.fromDepartmentArea(it) },
isArchived = fullControlUnit.controlUnit.isArchived,
name = fullControlUnit.controlUnit.name,
termsNote = fullControlUnit.controlUnit.termsNote,
)
}
}

fun toControlUnit(): ControlUnitEntity {
Expand Down Expand Up @@ -110,7 +132,7 @@ data class ControlUnitModel(
administration = administration.name,
isArchived,
name,
resources = requireNotNull(controlUnitResources).map { it.toControlUnitResource() },
resources = requireNotNull(controlUnitResources).map { it.toLegacyControlUnitResource() },
contact = "",
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package fr.gouv.cacem.monitorenv.infrastructure.database.model
import com.fasterxml.jackson.annotation.JsonBackReference
import fr.gouv.cacem.monitorenv.domain.entities.controlUnit.ControlUnitResourceEntity
import fr.gouv.cacem.monitorenv.domain.entities.controlUnit.ControlUnitResourceType
import fr.gouv.cacem.monitorenv.domain.entities.controlUnit.LegacyControlUnitResourceEntity
import fr.gouv.cacem.monitorenv.domain.use_cases.controlUnit.dtos.FullControlUnitResourceDTO
import io.hypersistence.utils.hibernate.type.basic.PostgreSQLEnumType
import jakarta.persistence.*
Expand Down Expand Up @@ -131,4 +132,11 @@ data class ControlUnitResourceModel(
controlUnitResource = toControlUnitResource(),
)
}

fun toLegacyControlUnitResource(): LegacyControlUnitResourceEntity {
return LegacyControlUnitResourceEntity(
id = requireNotNull(id),
name,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,39 +17,18 @@ data class MissionControlResourceModel(

@ManyToOne(fetch = FetchType.LAZY, optional = false, cascade = [CascadeType.MERGE])
@JoinColumn(name = "control_resource_id")
var ressource: ControlUnitResourceModel,
var resource: ControlUnitResourceModel,
) {
companion object {
fun fromControlUnitResource(
controlUnitResource: ControlUnitResourceEntity,
baseModel: BaseModel,
missionModel: MissionModel,
controlUnitModel: ControlUnitModel,
) = MissionControlResourceModel(
ressource = ControlUnitResourceModel(
id = requireNotNull(controlUnitResource.id),
base = baseModel,
controlUnit = controlUnitModel,
isArchived = controlUnitResource.isArchived,
name = controlUnitResource.name,
note = controlUnitResource.note,
photo = controlUnitResource.photo,
type = controlUnitResource.type,
),
mission = missionModel,
)
}

fun toControlUnitResource(): ControlUnitResourceEntity {
return ControlUnitResourceEntity(
id = ressource.id,
baseId = requireNotNull(ressource.base.id),
controlUnitId = requireNotNull(ressource.controlUnit.id),
isArchived = ressource.isArchived,
name = ressource.name,
note = ressource.note,
id = resource.id,
baseId = requireNotNull(resource.base.id),
controlUnitId = requireNotNull(resource.controlUnit.id),
isArchived = resource.isArchived,
name = resource.name,
note = resource.note,
photo = byteArrayOf(),
type = ressource.type,
type = resource.type,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,7 @@ import fr.gouv.cacem.monitorenv.utils.mapOrElseEmpty
import io.hypersistence.utils.hibernate.type.array.ListArrayType
import io.hypersistence.utils.hibernate.type.array.internal.AbstractArrayType.SQL_ARRAY_TYPE
import io.hypersistence.utils.hibernate.type.basic.PostgreSQLEnumType
import jakarta.persistence.Basic
import jakarta.persistence.CascadeType
import jakarta.persistence.Column
import jakarta.persistence.Entity
import jakarta.persistence.EnumType
import jakarta.persistence.Enumerated
import jakarta.persistence.FetchType
import jakarta.persistence.GeneratedValue
import jakarta.persistence.GenerationType
import jakarta.persistence.Id
import jakarta.persistence.OneToMany
import jakarta.persistence.Table
import jakarta.persistence.*
import org.hibernate.Hibernate
import org.hibernate.annotations.Fetch
import org.hibernate.annotations.FetchMode
Expand Down Expand Up @@ -140,16 +129,11 @@ data class MissionModel(
) {
fun toMissionEntity(objectMapper: ObjectMapper): MissionEntity {
val controlUnits = controlUnits.mapOrElseEmpty { missionControlUnitModel ->
val maybeMissionControlResourceModels = controlResources
?.filter { missionControlResourceModel ->
missionControlResourceModel.ressource.controlUnit.id == missionControlUnitModel.unit.id
}

val controlUnitResources = maybeMissionControlResourceModels.mapOrElseEmpty { it.toControlUnitResource() }
val controlUnitResources = controlResources.mapOrElseEmpty { it.toControlUnitResource() }

missionControlUnitModel.unit.toLegacyControlUnit().copy(
contact = missionControlUnitModel.contact,
resources = controlUnitResources,
resources = controlUnitResources.map { it.toLegacyControlUnitEntity() },
)
}

Expand Down Expand Up @@ -186,7 +170,7 @@ data class MissionModel(
fun fromMissionEntity(
mission: MissionEntity,
mapper: ObjectMapper,
baseModelMap: Map<Int, BaseModel>,
controlUnitResourceModelMap: Map<Int, ControlUnitResourceModel>,
): MissionModel {
val missionModel = MissionModel(
id = mission.id,
Expand All @@ -212,20 +196,19 @@ data class MissionModel(
}

mission.controlUnits.map {
val controlUnitModel = MissionControlUnitModel.fromLegacyControlUnit(
val missionControlUnitModel = MissionControlUnitModel.fromLegacyControlUnit(
it,
missionModel,
)
missionModel.controlUnits?.add(controlUnitModel)
missionModel.controlUnits?.add(missionControlUnitModel)

val missionControlUnitResourceModels = it.resources.map { controlUnitResource ->
val baseModel = requireNotNull(baseModelMap[controlUnitResource.baseId])
val controlUnitResourceModel = requireNotNull(controlUnitResourceModelMap[controlUnitResource.id])

MissionControlResourceModel.fromControlUnitResource(
controlUnitResource,
baseModel,
missionModel,
controlUnitModel.unit,
MissionControlResourceModel(
id = mission.id,
resource = controlUnitResourceModel,
mission = missionModel,
)
}
missionModel.controlResources?.addAll(missionControlUnitResourceModels)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,12 @@ class JpaControlUnitResourceRepository(
return dbControlUnitResourceRepository.findAll().map { it.toFullControlUnitResource() }
}

override fun findAllById(controlUnitResourceIds: List<Int>): List<FullControlUnitResourceDTO> {
return dbControlUnitResourceRepository.findAllById(controlUnitResourceIds).map {
it.toFullControlUnitResource()
}
}

override fun findById(controlUnitResourceId: Int): FullControlUnitResourceDTO {
return dbControlUnitResourceRepository.findById(controlUnitResourceId).get().toFullControlUnitResource()
}
Expand Down
Loading

0 comments on commit 721c842

Please sign in to comment.