diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/LimitsPropertyModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/LimitsPropertyModificationEntity.java new file mode 100644 index 000000000..0783d83d9 --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/LimitsPropertyModificationEntity.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2025, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.entities.equipment.modification; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.gridsuite.modification.dto.LimitsPropertyInfos; + +import java.util.UUID; + +/** + * @author El Cheikh Bassel + */ + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "limits_property_modification") +public class LimitsPropertyModificationEntity { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(name = "id") + private UUID id; + + @Column(name = "name", nullable = false) + private String name; + + @Column(name = "property_value", nullable = false) + private String propertyValue; + + public static LimitsPropertyModificationEntity fromLimitsPropertyInfos(LimitsPropertyInfos propertyInfos) { + return new LimitsPropertyModificationEntity(null, propertyInfos.name(), propertyInfos.value()); + } + + public LimitsPropertyInfos toLimitsPropertyInfos() { + return new LimitsPropertyInfos(name, propertyValue); + } +} diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/OperationalLimitsGroupModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/OperationalLimitsGroupModificationEntity.java index 6b8328a0a..116497e39 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/OperationalLimitsGroupModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/OperationalLimitsGroupModificationEntity.java @@ -11,12 +11,14 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.NonNull; +import org.gridsuite.modification.dto.LimitsPropertyInfos; import org.gridsuite.modification.dto.OperationalLimitsGroupInfos; import org.gridsuite.modification.dto.OperationalLimitsGroupModificationInfos; import org.gridsuite.modification.dto.OperationalLimitsGroupModificationType; import org.gridsuite.modification.dto.TemporaryLimitModificationType; import org.springframework.util.CollectionUtils; +import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.UUID; @@ -49,11 +51,11 @@ public class OperationalLimitsGroupModificationEntity { )) private CurrentLimitsModificationEntity currentLimits; - @Column(name = "modificationType") + @Column(name = "modification_type") @Enumerated(EnumType.STRING) private OperationalLimitsGroupModificationType modificationType; - @Column(name = "temporaryLimitsModificationType") + @Column(name = "temporary_limits_modification_type") @Enumerated(EnumType.STRING) private TemporaryLimitModificationType temporaryLimitsModificationType; @@ -61,6 +63,18 @@ public class OperationalLimitsGroupModificationEntity { @Enumerated(EnumType.STRING) private OperationalLimitsGroupInfos.Applicability applicability; + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) + @JoinColumn(name = "operational_limit_group_id", foreignKey = @ForeignKey(name = "operational_limit_group_modification_id_fk")) + private List limitsProperties; + + private static List toLimitPropertyEntities(List properties) { + List result = new ArrayList<>(); + if (!CollectionUtils.isEmpty(properties)) { + result = properties.stream().map(LimitsPropertyModificationEntity::fromLimitsPropertyInfos).toList(); + } + return result; + } + public static List toOperationalLimitsGroupsEntities(@NonNull List limitsGroups) { return limitsGroups.stream() .filter(Objects::nonNull) @@ -71,10 +85,9 @@ public static List toOperationalLimits new CurrentLimitsModificationEntity(limitsGroup.getCurrentLimits()), limitsGroup.getModificationType(), limitsGroup.getTemporaryLimitsModificationType(), - limitsGroup.getApplicability() - ) - ) - .toList(); + limitsGroup.getApplicability(), + toLimitPropertyEntities(limitsGroup.getLimitsProperties())) + ).toList(); } public static List fromOperationalLimitsGroupsEntities(List limitsGroupsEntities) { @@ -87,6 +100,8 @@ public static List fromOperationalLimit .modificationType(limitsGroupEntity.getModificationType()) .temporaryLimitsModificationType(limitsGroupEntity.getTemporaryLimitsModificationType()) .applicability(limitsGroupEntity.getApplicability()) + .limitsProperties(limitsGroupEntity.getLimitsProperties().stream().map( + LimitsPropertyModificationEntity::toLimitsPropertyInfos).toList()) .build() ) .collect(Collectors.toList()); diff --git a/src/main/resources/db/changelog/changesets/changelog_20251022T114823Z.xml b/src/main/resources/db/changelog/changesets/changelog_20251022T114823Z.xml new file mode 100644 index 000000000..9e86c59bc --- /dev/null +++ b/src/main/resources/db/changelog/changesets/changelog_20251022T114823Z.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/db/changelog/db.changelog-master.yaml b/src/main/resources/db/changelog/db.changelog-master.yaml index e8242272c..3c5aa476e 100644 --- a/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/src/main/resources/db/changelog/db.changelog-master.yaml @@ -426,3 +426,6 @@ databaseChangeLog: - include: file: changesets/changelog_20251009T130154Z.xml relativeToChangelogFile: true + - include: + file: changesets/changelog_20251022T114823Z.xml + relativeToChangelogFile: true