Skip to content

Commit

Permalink
[Missions] Fix missions control unit resources saving in Backend (#895)
Browse files Browse the repository at this point in the history
## Related Pull Requests & Issues

- #699

----

- [ ] Tests E2E (Cypress)
  • Loading branch information
ivangabriele committed Oct 24, 2023
2 parents 27346d5 + e65b3f9 commit cc5c521
Show file tree
Hide file tree
Showing 33 changed files with 204 additions and 197 deletions.
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ dev-check-config:
dev-run-back-with-infra: dev-erase-db dev-run-infra dev-clean-target-env dev-run-back

dev-run-back:
cd backend && ./gradlew bootRun --args='--spring.profiles.active=dev --spring.config.additional-location=$(BACKEND_CONFIGURATION_FOLDER)'
cd backend && ./mvnw spring-boot:run -Dspring-boot.run.arguments="--spring.config.additional-location="$(BACKEND_CONFIGURATION_FOLDER)"" -Dspring-boot.run.profiles="dev"

dev-run-infra:
@echo "Preparing database"
Expand Down Expand Up @@ -223,5 +223,5 @@ logs-db:

.PHONY: dev lint-back

dev: dev-run-back-with-infra
dev: dev-run-back
lint-back: dev-lint-backend
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ data class ControlUnitResourceEntity(
val id: Int? = null,
val baseId: Int,
val controlUnitId: Int,
val isArchived: Boolean,
val name: String,
val note: String? = null,
val photo: ByteArray? = byteArrayOf(),
Expand All @@ -17,6 +18,7 @@ data class ControlUnitResourceEntity(
if (id != other.id) return false
if (baseId != other.baseId) return false
if (controlUnitId != other.controlUnitId) return false
if (isArchived != other.isArchived) return false
if (name != other.name) return false
if (note != other.note) return false
if (photo != null) {
Expand All @@ -32,11 +34,19 @@ data class ControlUnitResourceEntity(
var result = id ?: 0
result = 31 * result + baseId
result = 31 * result + controlUnitId
result = 31 * result + isArchived.hashCode()
result = 31 * result + name.hashCode()
result = 31 * result + (note?.hashCode() ?: 0)
result = 31 * result + (photo?.contentHashCode() ?: 0)
result = 31 * result + type.hashCode()

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,21 +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,
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 @@ -7,6 +7,7 @@ data class CreateOrUpdateControlUnitResourceDataInput(
val id: Int? = null,
val baseId: Int,
val controlUnitId: Int,
val isArchived: Boolean,
val name: String,
val note: String? = null,
val photo: ByteArray? = byteArrayOf(),
Expand All @@ -17,6 +18,7 @@ data class CreateOrUpdateControlUnitResourceDataInput(
id = this.id,
baseId = this.baseId,
controlUnitId = this.controlUnitId,
isArchived = this.isArchived,
name = this.name,
note = this.note,
photo = this.photo,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ data class ControlUnitResourceDataOutput(
val id: Int,
val baseId: Int,
val controlUnitId: Int,
val isArchived: Boolean,
val name: String,
val note: String? = null,
val photo: ByteArray? = byteArrayOf(),
Expand All @@ -17,6 +18,7 @@ data class ControlUnitResourceDataOutput(
id = requireNotNull(controlUnitResource.id),
baseId = controlUnitResource.baseId,
controlUnitId = controlUnitResource.controlUnitId,
isArchived = controlUnitResource.isArchived,
name = controlUnitResource.name,
note = controlUnitResource.note,
photo = controlUnitResource.photo,
Expand Down
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 All @@ -29,6 +30,9 @@ data class ControlUnitResourceModel(
@JsonBackReference
val controlUnit: ControlUnitModel,

@Column(name = "is_archived", nullable = false)
val isArchived: Boolean,

@Column(name = "name", nullable = false)
val name: String,

Expand Down Expand Up @@ -60,6 +64,7 @@ data class ControlUnitResourceModel(
if (id != other.id) return false
if (base != other.base) return false
if (controlUnit != other.controlUnit) return false
if (isArchived != other.isArchived) return false
if (name != other.name) return false
if (note != other.note) return false
if (photo != null) {
Expand All @@ -83,6 +88,7 @@ data class ControlUnitResourceModel(
id = controlUnitResource.id,
base = baseModel,
controlUnit = controlUnitModel,
isArchived = controlUnitResource.isArchived,
name = controlUnitResource.name,
note = controlUnitResource.note,
photo = controlUnitResource.photo,
Expand All @@ -95,6 +101,7 @@ data class ControlUnitResourceModel(
var result = id ?: 0
result = 31 * result + base.hashCode()
result = 31 * result + controlUnit.hashCode()
result = 31 * result + isArchived.hashCode()
result = 31 * result + name.hashCode()
result = 31 * result + (note?.hashCode() ?: 0)
result = 31 * result + (photo?.contentHashCode() ?: 0)
Expand All @@ -110,6 +117,7 @@ data class ControlUnitResourceModel(
id,
baseId = requireNotNull(base.id),
controlUnitId = requireNotNull(controlUnit.id),
isArchived,
name,
note,
photo,
Expand All @@ -124,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,37 +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,
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),
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,
)
}
}
Loading

0 comments on commit cc5c521

Please sign in to comment.