diff --git a/openespi-common/src/main/java/org/greenbuttonalliance/espi/common/mapper/usage/PnodeRefMapper.java b/openespi-common/src/main/java/org/greenbuttonalliance/espi/common/mapper/usage/PnodeRefMapper.java
index 7aff365e..fc3433b9 100644
--- a/openespi-common/src/main/java/org/greenbuttonalliance/espi/common/mapper/usage/PnodeRefMapper.java
+++ b/openespi-common/src/main/java/org/greenbuttonalliance/espi/common/mapper/usage/PnodeRefMapper.java
@@ -23,7 +23,6 @@
import org.greenbuttonalliance.espi.common.dto.usage.PnodeRefDto;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
-import org.mapstruct.MappingTarget;
/**
* MapStruct mapper for converting between PnodeRefEntity and PnodeRefDto.
@@ -60,13 +59,4 @@ public interface PnodeRefMapper {
@Mapping(target = "endEffectiveDate", source = "endEffectiveDate")
PnodeRefEntity toEntity(PnodeRefDto dto);
- /**
- * Updates an existing PnodeRefEntity with data from a PnodeRefDto.
- *
- * @param dto the source DTO
- * @param entity the target entity to update
- */
- @Mapping(target = "id", ignore = true)
- @Mapping(target = "usagePoint", ignore = true)
- void updateEntity(PnodeRefDto dto, @MappingTarget PnodeRefEntity entity);
}
\ No newline at end of file
diff --git a/openespi-common/src/main/java/org/greenbuttonalliance/espi/common/repositories/usage/PnodeRefRepository.java b/openespi-common/src/main/java/org/greenbuttonalliance/espi/common/repositories/usage/PnodeRefRepository.java
index f9829f60..059f78f3 100644
--- a/openespi-common/src/main/java/org/greenbuttonalliance/espi/common/repositories/usage/PnodeRefRepository.java
+++ b/openespi-common/src/main/java/org/greenbuttonalliance/espi/common/repositories/usage/PnodeRefRepository.java
@@ -20,7 +20,6 @@
package org.greenbuttonalliance.espi.common.repositories.usage;
import org.greenbuttonalliance.espi.common.domain.usage.PnodeRefEntity;
-import org.greenbuttonalliance.espi.common.domain.usage.UsagePointEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
@@ -34,92 +33,13 @@
*
* PnodeRef extends Object (not IdentifiedObject) in ESPI 4.0 XSD,
* so it uses Long ID (not UUID).
- *
- * Provides CRUD operations and custom queries for pricing node references.
*/
@Repository
public interface PnodeRefRepository extends JpaRepository {
- /**
- * Find all pricing node references for a specific usage point.
- *
- * @param usagePoint the usage point
- * @return list of pricing node references
- */
- List findByUsagePoint(UsagePointEntity usagePoint);
-
- /**
- * Find pricing node references by usage point ID.
- *
- * @param usagePointId the usage point ID (UUID for UsagePoint which extends IdentifiedObject)
- * @return list of pricing node references
- */
- List findByUsagePointId(UUID usagePointId);
-
- /**
- * Find pricing node references by type.
- *
- * @param apnodeType the pricing node type
- * @return list of pricing node references
- */
- List findByApnodeType(String apnodeType);
-
- /**
- * Find pricing node references by usage point and type.
- *
- * @param usagePoint the usage point
- * @param apnodeType the pricing node type
- * @return list of pricing node references
- */
- List findByUsagePointAndApnodeType(UsagePointEntity usagePoint, String apnodeType);
-
- /**
- * Find pricing node references by reference identifier.
- *
- * @param ref the reference identifier
- * @return list of pricing node references
- */
- List findByRef(String ref);
-
- /**
- * Find currently valid pricing node references for a usage point.
- *
- * @param usagePointId the usage point ID
- * @param currentTime current time in epoch seconds
- * @return list of valid pricing node references
- */
- @Query("SELECT p FROM PnodeRefEntity p WHERE p.usagePoint.id = :usagePointId " +
- "AND (p.startEffectiveDate IS NULL OR p.startEffectiveDate <= :currentTime) " +
- "AND (p.endEffectiveDate IS NULL OR p.endEffectiveDate >= :currentTime)")
- List findValidByUsagePointId(@Param("usagePointId") UUID usagePointId,
- @Param("currentTime") Long currentTime);
-
- /**
- * Find currently valid pricing node references by type.
- *
- * @param apnodeType the pricing node type
- * @param currentTime current time in epoch seconds
- * @return list of valid pricing node references
- */
- @Query("SELECT p FROM PnodeRefEntity p WHERE p.apnodeType = :apnodeType " +
- "AND (p.startEffectiveDate IS NULL OR p.startEffectiveDate <= :currentTime) " +
- "AND (p.endEffectiveDate IS NULL OR p.endEffectiveDate >= :currentTime)")
- List findValidByApnodeType(@Param("apnodeType") String apnodeType,
- @Param("currentTime") Long currentTime);
-
- /**
- * Delete all pricing node references for a usage point.
- *
- * @param usagePoint the usage point
- * @return number of deleted records
- */
- Long deleteByUsagePoint(UsagePointEntity usagePoint);
+ @Query("SELECT p.id FROM PnodeRefEntity p")
+ List findAllIds();
- /**
- * Delete pricing node references by usage point ID.
- *
- * @param usagePointId the usage point ID
- * @return number of deleted records
- */
- Long deleteByUsagePointId(UUID usagePointId);
+ @Query("SELECT p FROM PnodeRefEntity p WHERE p.usagePoint.id = :usagePointId")
+ List findAllByUsagePointId(@Param("usagePointId") UUID usagePointId);
}
\ No newline at end of file
diff --git a/openespi-common/src/test/java/org/greenbuttonalliance/espi/common/repositories/usage/PnodeRefRepositoryTest.java b/openespi-common/src/test/java/org/greenbuttonalliance/espi/common/repositories/usage/PnodeRefRepositoryTest.java
index ee9f8e4a..a2cec5d6 100644
--- a/openespi-common/src/test/java/org/greenbuttonalliance/espi/common/repositories/usage/PnodeRefRepositoryTest.java
+++ b/openespi-common/src/test/java/org/greenbuttonalliance/espi/common/repositories/usage/PnodeRefRepositoryTest.java
@@ -112,235 +112,52 @@ void shouldSavePricingNodeRefWithEffectiveDates() {
class CustomQueryMethodsTest {
@Test
- @DisplayName("Should find pricing node refs by usage point")
- void shouldFindPricingNodeRefsByUsagePoint() {
+ @DisplayName("Should find all IDs")
+ void shouldFindAllIds() {
// Arrange
UsagePointEntity usagePoint = TestDataBuilders.createValidUsagePoint();
UsagePointEntity savedUsagePoint = usagePointRepository.save(usagePoint);
-
+
PnodeRefEntity pnodeRef1 = new PnodeRefEntity("HUB", "HUB_1", savedUsagePoint);
PnodeRefEntity pnodeRef2 = new PnodeRefEntity("LOAD_ZONE", "ZONE_1", savedUsagePoint);
-
- pnodeRefRepository.save(pnodeRef1);
- pnodeRefRepository.save(pnodeRef2);
+
+ PnodeRefEntity saved1 = pnodeRefRepository.save(pnodeRef1);
+ PnodeRefEntity saved2 = pnodeRefRepository.save(pnodeRef2);
flushAndClear();
// Act
- List pnodeRefs = pnodeRefRepository.findByUsagePoint(savedUsagePoint);
+ List allIds = pnodeRefRepository.findAllIds();
// Assert
- assertThat(pnodeRefs).hasSize(2);
- assertThat(pnodeRefs).extracting(PnodeRefEntity::getRef)
- .containsExactlyInAnyOrder("HUB_1", "ZONE_1");
+ assertThat(allIds).contains(saved1.getId(), saved2.getId());
}
@Test
- @DisplayName("Should find pricing node refs by usage point ID")
- void shouldFindPricingNodeRefsByUsagePointId() {
+ @DisplayName("Should find all pricing node refs by usage point ID")
+ void shouldFindAllPricingNodeRefsByUsagePointId() {
// Arrange
UsagePointEntity usagePoint1 = TestDataBuilders.createValidUsagePoint();
UsagePointEntity usagePoint2 = TestDataBuilders.createValidUsagePoint();
UsagePointEntity savedUsagePoint1 = usagePointRepository.save(usagePoint1);
UsagePointEntity savedUsagePoint2 = usagePointRepository.save(usagePoint2);
-
+
PnodeRefEntity pnodeRef1 = new PnodeRefEntity("HUB", "HUB_1", savedUsagePoint1);
PnodeRefEntity pnodeRef2 = new PnodeRefEntity("HUB", "HUB_2", savedUsagePoint1);
PnodeRefEntity pnodeRef3 = new PnodeRefEntity("HUB", "HUB_3", savedUsagePoint2);
-
+
pnodeRefRepository.save(pnodeRef1);
pnodeRefRepository.save(pnodeRef2);
pnodeRefRepository.save(pnodeRef3);
flushAndClear();
// Act
- List pnodeRefs = pnodeRefRepository.findByUsagePointId(savedUsagePoint1.getId());
+ List pnodeRefs = pnodeRefRepository.findAllByUsagePointId(savedUsagePoint1.getId());
// Assert
assertThat(pnodeRefs).hasSize(2);
assertThat(pnodeRefs).extracting(PnodeRefEntity::getRef)
.containsExactlyInAnyOrder("HUB_1", "HUB_2");
}
-
- @Test
- @DisplayName("Should find pricing node refs by apnode type")
- void shouldFindPricingNodeRefsByApnodeType() {
- // Arrange
- UsagePointEntity usagePoint = TestDataBuilders.createValidUsagePoint();
- UsagePointEntity savedUsagePoint = usagePointRepository.save(usagePoint);
-
- PnodeRefEntity pnodeRef1 = new PnodeRefEntity("HUB", "HUB_1", savedUsagePoint);
- PnodeRefEntity pnodeRef2 = new PnodeRefEntity("HUB", "HUB_2", savedUsagePoint);
- PnodeRefEntity pnodeRef3 = new PnodeRefEntity("LOAD_ZONE", "ZONE_1", savedUsagePoint);
-
- pnodeRefRepository.save(pnodeRef1);
- pnodeRefRepository.save(pnodeRef2);
- pnodeRefRepository.save(pnodeRef3);
- flushAndClear();
-
- // Act
- List hubRefs = pnodeRefRepository.findByApnodeType("HUB");
-
- // Assert
- assertThat(hubRefs).hasSize(2);
- assertThat(hubRefs).extracting(PnodeRefEntity::getRef)
- .containsExactlyInAnyOrder("HUB_1", "HUB_2");
- }
-
- @Test
- @DisplayName("Should find pricing node refs by usage point and apnode type")
- void shouldFindPricingNodeRefsByUsagePointAndApnodeType() {
- // Arrange
- UsagePointEntity usagePoint = TestDataBuilders.createValidUsagePoint();
- UsagePointEntity savedUsagePoint = usagePointRepository.save(usagePoint);
-
- PnodeRefEntity pnodeRef1 = new PnodeRefEntity("HUB", "HUB_1", savedUsagePoint);
- PnodeRefEntity pnodeRef2 = new PnodeRefEntity("LOAD_ZONE", "ZONE_1", savedUsagePoint);
-
- pnodeRefRepository.save(pnodeRef1);
- pnodeRefRepository.save(pnodeRef2);
- flushAndClear();
-
- // Act
- List hubRefs = pnodeRefRepository.findByUsagePointAndApnodeType(savedUsagePoint, "HUB");
-
- // Assert
- assertThat(hubRefs).hasSize(1);
- assertThat(hubRefs.get(0).getRef()).isEqualTo("HUB_1");
- }
-
- @Test
- @DisplayName("Should find pricing node refs by ref")
- void shouldFindPricingNodeRefsByRef() {
- // Arrange
- UsagePointEntity usagePoint = TestDataBuilders.createValidUsagePoint();
- UsagePointEntity savedUsagePoint = usagePointRepository.save(usagePoint);
-
- PnodeRefEntity pnodeRef1 = new PnodeRefEntity("HUB", "UNIQUE_HUB", savedUsagePoint);
- PnodeRefEntity pnodeRef2 = new PnodeRefEntity("LOAD_ZONE", "COMMON_REF", savedUsagePoint);
-
- pnodeRefRepository.save(pnodeRef1);
- pnodeRefRepository.save(pnodeRef2);
- flushAndClear();
-
- // Act
- List refs = pnodeRefRepository.findByRef("UNIQUE_HUB");
-
- // Assert
- assertThat(refs).hasSize(1);
- assertThat(refs.get(0).getApnodeType()).isEqualTo("HUB");
- }
-
- @Test
- @DisplayName("Should find valid pricing node refs by usage point ID")
- void shouldFindValidPricingNodeRefsByUsagePointId() {
- // Arrange
- UsagePointEntity usagePoint = TestDataBuilders.createValidUsagePoint();
- UsagePointEntity savedUsagePoint = usagePointRepository.save(usagePoint);
-
- long currentTime = System.currentTimeMillis() / 1000;
- long pastTime = currentTime - 3600; // 1 hour ago
- long futureTime = currentTime + 3600; // 1 hour from now
-
- // Valid: no dates set (always valid)
- PnodeRefEntity validRef1 = new PnodeRefEntity("HUB", "ALWAYS_VALID", savedUsagePoint);
-
- // Valid: started in past, no end date
- PnodeRefEntity validRef2 = new PnodeRefEntity("HUB", "STARTED_VALID", pastTime, null, savedUsagePoint);
-
- // Invalid: starts in future
- PnodeRefEntity invalidRef = new PnodeRefEntity("HUB", "FUTURE_START", futureTime, null, savedUsagePoint);
-
- pnodeRefRepository.save(validRef1);
- pnodeRefRepository.save(validRef2);
- pnodeRefRepository.save(invalidRef);
- flushAndClear();
-
- // Act
- List validRefs = pnodeRefRepository.findValidByUsagePointId(savedUsagePoint.getId(), currentTime);
-
- // Assert
- assertThat(validRefs).hasSize(2);
- assertThat(validRefs).extracting(PnodeRefEntity::getRef)
- .containsExactlyInAnyOrder("ALWAYS_VALID", "STARTED_VALID");
- }
-
- @Test
- @DisplayName("Should find valid pricing node refs by apnode type")
- void shouldFindValidPricingNodeRefsByApnodeType() {
- // Arrange
- UsagePointEntity usagePoint = TestDataBuilders.createValidUsagePoint();
- UsagePointEntity savedUsagePoint = usagePointRepository.save(usagePoint);
-
- long currentTime = System.currentTimeMillis() / 1000;
- long pastTime = currentTime - 3600; // 1 hour ago
- long futureTime = currentTime + 3600; // 1 hour from now
-
- // Valid HUB
- PnodeRefEntity validHub = new PnodeRefEntity("HUB", "VALID_HUB", pastTime, futureTime, savedUsagePoint);
-
- // Invalid HUB (expired)
- PnodeRefEntity expiredHub = new PnodeRefEntity("HUB", "EXPIRED_HUB", pastTime, pastTime + 1800, savedUsagePoint);
-
- // Valid LOAD_ZONE
- PnodeRefEntity validZone = new PnodeRefEntity("LOAD_ZONE", "VALID_ZONE", savedUsagePoint);
-
- pnodeRefRepository.save(validHub);
- pnodeRefRepository.save(expiredHub);
- pnodeRefRepository.save(validZone);
- flushAndClear();
-
- // Act
- List validHubs = pnodeRefRepository.findValidByApnodeType("HUB", currentTime);
-
- // Assert
- assertThat(validHubs).hasSize(1);
- assertThat(validHubs.get(0).getRef()).isEqualTo("VALID_HUB");
- }
-
- @Test
- @DisplayName("Should delete pricing node refs by usage point")
- void shouldDeletePricingNodeRefsByUsagePoint() {
- // Arrange
- UsagePointEntity usagePoint = TestDataBuilders.createValidUsagePoint();
- UsagePointEntity savedUsagePoint = usagePointRepository.save(usagePoint);
-
- PnodeRefEntity pnodeRef1 = new PnodeRefEntity("HUB", "HUB_1", savedUsagePoint);
- PnodeRefEntity pnodeRef2 = new PnodeRefEntity("HUB", "HUB_2", savedUsagePoint);
-
- pnodeRefRepository.save(pnodeRef1);
- pnodeRefRepository.save(pnodeRef2);
- flushAndClear();
-
- // Act
- Long deletedCount = pnodeRefRepository.deleteByUsagePoint(savedUsagePoint);
- flushAndClear();
-
- // Assert
- assertThat(deletedCount).isEqualTo(2L);
- List remainingRefs = pnodeRefRepository.findByUsagePoint(savedUsagePoint);
- assertThat(remainingRefs).isEmpty();
- }
-
- @Test
- @DisplayName("Should delete pricing node refs by usage point ID")
- void shouldDeletePricingNodeRefsByUsagePointId() {
- // Arrange
- UsagePointEntity usagePoint = TestDataBuilders.createValidUsagePoint();
- UsagePointEntity savedUsagePoint = usagePointRepository.save(usagePoint);
-
- PnodeRefEntity pnodeRef = new PnodeRefEntity("HUB", "DELETE_TEST", savedUsagePoint);
- pnodeRefRepository.save(pnodeRef);
- flushAndClear();
-
- // Act
- Long deletedCount = pnodeRefRepository.deleteByUsagePointId(savedUsagePoint.getId());
- flushAndClear();
-
- // Assert
- assertThat(deletedCount).isEqualTo(1L);
- List remainingRefs = pnodeRefRepository.findByUsagePointId(savedUsagePoint.getId());
- assertThat(remainingRefs).isEmpty();
- }
}
@Nested