Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package fr.gouv.cacem.monitorenv.domain.entities.natinf
package fr.gouv.cacem.monitorenv.domain.entities.natinf.v1

data class NatinfEntity(
val natinfCode: Int,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package fr.gouv.cacem.monitorenv.domain.entities.natinf.v1

data class RefNatinfEntity(
val id: Int,
val nature: String?,
val qualification: String?,
val definedBy: String?,
val repressedBy: String?,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package fr.gouv.cacem.monitorenv.domain.entities.natinf.v2

import fr.gouv.cacem.monitorenv.domain.entities.natinf.v1.RefNatinfEntity
import fr.gouv.cacem.monitorenv.domain.entities.themes.ThemeEntity

data class NatinfEntity(
val refNatinf: RefNatinfEntity,
val themes: List<ThemeEntity>,
)
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
package fr.gouv.cacem.monitorenv.domain.repositories

import fr.gouv.cacem.monitorenv.domain.entities.natinf.NatinfEntity
import fr.gouv.cacem.monitorenv.domain.entities.natinf.v1.NatinfEntity

interface INatinfRepository {
fun findAll(): List<NatinfEntity>

fun count(): Long

fun save(
natinf: fr.gouv.cacem.monitorenv.domain.entities.natinf.v2.NatinfEntity,
): fr.gouv.cacem.monitorenv.domain.entities.natinf.v2.NatinfEntity
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package fr.gouv.cacem.monitorenv.domain.repositories

import fr.gouv.cacem.monitorenv.domain.entities.natinf.v1.RefNatinfEntity

interface IRefNatinfRepository {
fun findAll(): List<RefNatinfEntity>
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
package fr.gouv.cacem.monitorenv.domain.use_cases.natinfs

import fr.gouv.cacem.monitorenv.config.UseCase
import fr.gouv.cacem.monitorenv.domain.entities.natinf.NatinfEntity
import fr.gouv.cacem.monitorenv.domain.entities.natinf.v1.NatinfEntity
import fr.gouv.cacem.monitorenv.domain.repositories.INatinfRepository
import org.slf4j.LoggerFactory

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package fr.gouv.cacem.monitorenv.domain.use_cases.natinfs

import fr.gouv.cacem.monitorenv.config.UseCase
import fr.gouv.cacem.monitorenv.domain.entities.natinf.v2.NatinfEntity
import fr.gouv.cacem.monitorenv.domain.repositories.INatinfRepository
import org.slf4j.LoggerFactory

@UseCase
class SaveNatinf(
private val natinfRepository: INatinfRepository,
) {
private val logger = LoggerFactory.getLogger(SaveNatinf::class.java)

fun execute(natinf: NatinfEntity): NatinfEntity {
logger.info("Attempt to SAVE natinf from refnatinf ${natinf.refNatinf.id}")
val savedNatinf = natinfRepository.save(natinf)
logger.info("Natinf saved")

return savedNatinf
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package fr.gouv.cacem.monitorenv.domain.use_cases.refNatinfs

import fr.gouv.cacem.monitorenv.config.UseCase
import fr.gouv.cacem.monitorenv.domain.entities.natinf.v1.RefNatinfEntity
import fr.gouv.cacem.monitorenv.domain.repositories.IRefNatinfRepository
import org.slf4j.LoggerFactory

@UseCase
class GetAllRefNatinfs(
private val refINatinfRepository: IRefNatinfRepository,
) {
private val logger = LoggerFactory.getLogger(GetAllRefNatinfs::class.java)

fun execute(): List<RefNatinfEntity> {
logger.info("Attempt to GET all referential natinfs")
val refNatinfs = refINatinfRepository.findAll()
logger.info("Found ${refNatinfs.size} referential natinfs")

return refNatinfs
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.inputs.natinfs

import fr.gouv.cacem.monitorenv.domain.entities.natinf.v2.NatinfEntity
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.inputs.themes.ThemeInput

data class NatinfInput(
val refNatinf: RefNatinfInput,
val themes: List<ThemeInput>,
) {
fun toNatinfEntity(): NatinfEntity =
NatinfEntity(
refNatinf = refNatinf.toRefNatinf(),
themes = themes.map { it.toThemeEntity() },
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.inputs.natinfs

import fr.gouv.cacem.monitorenv.domain.entities.natinf.v1.RefNatinfEntity
import kotlinx.serialization.Serializable

@Serializable
data class RefNatinfInput(
val id: Int,
val nature: String?,
val qualification: String?,
val definedBy: String?,
val repressedBy: String?,
) {
fun toRefNatinf(): RefNatinfEntity =
RefNatinfEntity(
id = id,
nature = nature,
qualification = qualification,
definedBy = definedBy,
repressedBy = repressedBy,
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs

import fr.gouv.cacem.monitorenv.domain.entities.natinf.v1.RefNatinfEntity

data class RefNatinfOutput(
val id: Int,
val nature: String?,
val qualification: String?,
val definedBy: String?,
val repressedBy: String?,
) {
companion object {
fun fromRefNatinf(refNatinf: RefNatinfEntity): RefNatinfOutput =
RefNatinfOutput(
id = refNatinf.id,
nature = refNatinf.nature,
qualification = refNatinf.qualification,
definedBy = refNatinf.definedBy,
repressedBy = refNatinf.repressedBy,
)
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs.natinfs.v1

import fr.gouv.cacem.monitorenv.domain.entities.natinf.NatinfEntity
import fr.gouv.cacem.monitorenv.domain.entities.natinf.v1.NatinfEntity

data class NatinfDataOutput(
val natinfCode: Int,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs.natinfs.v2

import fr.gouv.cacem.monitorenv.domain.entities.natinf.v2.NatinfEntity
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs.themes.ThemeOutput

data class NatinfOutput(
val id: Int,
val nature: String?,
val qualification: String?,
val definedBy: String?,
val repressedBy: String?,
val themes: List<ThemeOutput>,
) {
companion object {
fun fromNatinf(natinf: NatinfEntity): NatinfOutput =
NatinfOutput(
id = natinf.refNatinf.id,
nature = natinf.refNatinf.nature,
qualification = natinf.refNatinf.qualification,
definedBy = natinf.refNatinf.definedBy,
repressedBy = natinf.refNatinf.repressedBy,
themes = natinf.themes.map { ThemeOutput.fromThemeEntity(it) },
)
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.endpoints.bff.v1

import fr.gouv.cacem.monitorenv.domain.use_cases.natinfs.GetAllNatinfs
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs.NatinfDataOutput
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs.natinfs.v1.NatinfDataOutput
import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.tags.Tag
import org.springframework.web.bind.annotation.GetMapping
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.endpoints.bff.v2

import fr.gouv.cacem.monitorenv.domain.use_cases.natinfs.SaveNatinf
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.inputs.natinfs.NatinfInput
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs.natinfs.v2.NatinfOutput
import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.tags.Tag
import org.springframework.web.bind.annotation.PutMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController

@RestController("natinfsV2")
@RequestMapping("/bff/v2/natinfs")
@Tag(description = "API Natinf", name = "BFF.Natinf")
class Natinfs(
private val saveNatinf: SaveNatinf,
) {
@PutMapping("", consumes = ["application/json"])
@Operation(summary = "save a natinf")
fun create(
@RequestBody natinf: NatinfInput,
): NatinfOutput {
val natinf = saveNatinf.execute(natinf.toNatinfEntity())

return NatinfOutput.fromNatinf(natinf)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.endpoints.publicapi.v1

import fr.gouv.cacem.monitorenv.domain.use_cases.refNatinfs.GetAllRefNatinfs
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs.RefNatinfOutput
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs.RefNatinfOutput.Companion.fromRefNatinf
import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.tags.Tag
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController

@RestController
@RequestMapping("/api/v1/ref_natinfs")
@Tag(name = "Public.RefNatinfs")
class RefNatinfs(
private val getAllRefNatinfs: GetAllRefNatinfs,
) {
@GetMapping("")
@Operation(summary = "Get all referentials natinfs")
fun getAll(): List<RefNatinfOutput> = getAllRefNatinfs.execute().map { fromRefNatinf(it) }
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import jakarta.persistence.Table

@Entity
@Table(name = "naf")
data class NaflModel(
data class NafModel(
@Id
val code: String,
val label: String,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package fr.gouv.cacem.monitorenv.infrastructure.database.model

import fr.gouv.cacem.monitorenv.domain.entities.natinf.NatinfEntity
import fr.gouv.cacem.monitorenv.domain.entities.natinf.v1.NatinfEntity
import jakarta.persistence.Column
import jakarta.persistence.Entity
import jakarta.persistence.Id
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package fr.gouv.cacem.monitorenv.infrastructure.database.model

import fr.gouv.cacem.monitorenv.domain.entities.natinf.v1.RefNatinfEntity
import jakarta.persistence.Entity
import jakarta.persistence.Id
import jakarta.persistence.Table

@Entity
@Table(name = "ref_natinfs")
data class RefNatinfModel(
@Id
val id: Int,
val nature: String?,
val qualification: String?,
val definedBy: String?,
val repressedBy: String?,
) {
fun toRefNatinfEntity(): RefNatinfEntity =
RefNatinfEntity(
id = id,
nature = nature,
qualification = qualification,
definedBy = definedBy,
repressedBy = repressedBy,
)

companion object {
fun fromRefNatinfEntity(refNatinfEntity: RefNatinfEntity): RefNatinfModel =
RefNatinfModel(
id = refNatinfEntity.id,
nature = refNatinfEntity.nature,
qualification = refNatinfEntity.qualification,
definedBy = refNatinfEntity.definedBy,
repressedBy = refNatinfEntity.repressedBy,
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package fr.gouv.cacem.monitorenv.infrastructure.database.model

import fr.gouv.cacem.monitorenv.domain.entities.natinf.v2.NatinfEntity
import fr.gouv.cacem.monitorenv.domain.entities.themes.ThemeEntity
import jakarta.persistence.Embeddable
import jakarta.persistence.EmbeddedId
import jakarta.persistence.Entity
import jakarta.persistence.FetchType
import jakarta.persistence.JoinColumn
import jakarta.persistence.ManyToOne
import jakarta.persistence.MapsId
import jakarta.persistence.Table
import java.io.Serializable

@Entity
@Table(name = "themes_natinfs")
data class ThemeNatinfModel(
@EmbeddedId
val id: ThemeNatinfPk,
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "themes_id")
@MapsId("themeId")
val theme: ThemeModel,
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ref_natinfs_id")
@MapsId("refNatinfId")
val refNatinf: RefNatinfModel,
) {
companion object {
fun toThemeEntities(themes: List<ThemeNatinfModel>): List<ThemeEntity> {
val parents = themes.map { it.theme }.filter { it.parent === null }

return parents.map { parent ->
val subThemes = themes.filter { it.theme.parent?.id == parent.id }.map { it.theme }
parent.subThemes = subThemes
return@map parent.toThemeEntity()
}
}

fun toNatinfEntity(
themesNatinfs: List<ThemeNatinfModel>,
refNatinf: RefNatinfModel,
): NatinfEntity {
val themes = toThemeEntities(themesNatinfs)
return NatinfEntity(refNatinf = refNatinf.toRefNatinfEntity(), themes = themes)
}
}

@Embeddable
data class ThemeNatinfPk(
val themeId: Int,
val refNatinfId: Int,
) : Serializable
}
Loading
Loading