Skip to content

Commit

Permalink
Add generated norm-eli columns to database
Browse files Browse the repository at this point in the history
We removed some tests from the TimeBoundaryControllerIntegrationTest
that where also covered by other tests in there. This reduces the
amount of maintenance these tests require.

RISDEV-5763
  • Loading branch information
malte-laukoetter committed Jan 20, 2025
1 parent 5d218c7 commit 4ed247f
Show file tree
Hide file tree
Showing 20 changed files with 193 additions and 1,058 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -46,16 +46,28 @@ public class NormDto {
private UUID guid;

@Generated(event = { INSERT, UPDATE })
@Column(name = "eli_work", updatable = false, insertable = false)
private String eliWork;
@Column(name = "eli_dokument_work", updatable = false, insertable = false)
private String eliDokumentWork;

@Generated(event = { INSERT, UPDATE })
@Column(name = "eli_expression", updatable = false, insertable = false)
private String eliExpression;
@Column(name = "eli_dokument_expression", updatable = false, insertable = false)
private String eliDokumentExpression;

@Generated(event = { INSERT, UPDATE })
@Column(name = "eli_manifestation", updatable = false, insertable = false)
private String eliManifestation;
@Column(name = "eli_dokument_manifestation", updatable = false, insertable = false)
private String eliDokumentManifestation;

@Generated(event = { INSERT, UPDATE })
@Column(name = "eli_norm_work", updatable = false, insertable = false)
private String eliNormWork;

@Generated(event = { INSERT, UPDATE })
@Column(name = "eli_norm_expression", updatable = false, insertable = false)
private String eliNormExpression;

@Generated(event = { INSERT, UPDATE })
@Column(name = "eli_norm_manifestation", updatable = false, insertable = false)
private String eliNormManifestation;

@NotNull
@Column
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public class ReleaseDto {
joinColumns = @JoinColumn(name = "release_id"),
inverseJoinColumns = @JoinColumn(
name = "norm_eli_manifestation",
referencedColumnName = "eli_manifestation"
referencedColumnName = "eli_dokument_manifestation"
)
)
@Builder.Default
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,17 @@ public interface NormRepository extends JpaRepository<NormDto, UUID> {
* @param expressionEli The ELI to search for.
* @return An {@link Optional} containing the found {@link NormDto} if exists, or empty if not found.
*/
Optional<NormDto> findFirstByEliExpressionOrderByEliManifestationDesc(final String expressionEli);
Optional<NormDto> findFirstByEliDokumentExpressionOrderByEliDokumentManifestationDesc(
final String expressionEli
);

/**
* Finds a {@link NormDto} by its manifestation ELI (European Legislation Identifier).
*
* @param manifestationEli The ELI to search for.
* @return An {@link Optional} containing the found {@link NormDto} if exists, or empty if not found.
*/
Optional<NormDto> findByEliManifestation(final String manifestationEli);
Optional<NormDto> findByEliDokumentManifestation(final String manifestationEli);

/**
* Finds a {@link NormDto} by its GUID.
Expand All @@ -42,7 +44,7 @@ public interface NormRepository extends JpaRepository<NormDto, UUID> {
* @param guid The GUID to search for.
* @return An {@link Optional} containing the found {@link NormDto} if exists, or empty if not found.
*/
Optional<NormDto> findFirstByGuidOrderByEliManifestation(final UUID guid);
Optional<NormDto> findFirstByGuidOrderByEliDokumentManifestation(final UUID guid);

/**
* Deletes all {@link NormDto} with the given GUID
Expand All @@ -58,7 +60,7 @@ public interface NormRepository extends JpaRepository<NormDto, UUID> {
* @param manifestationEli The ELI to search for.
* @param publishState The publishState to search for.
*/
void deleteByEliManifestationAndPublishState(
void deleteByEliDokumentManifestationAndPublishState(
final String manifestationEli,
final NormPublishState publishState
);
Expand All @@ -68,15 +70,17 @@ void deleteByEliManifestationAndPublishState(
* @param workEli The ELI to search for.
* @param publishState The publishState to search for.
*/
void deleteAllByEliWorkAndPublishState(final String workEli, final NormPublishState publishState);
void deleteAllByEliDokumentWorkAndPublishState(
final String workEli,
final NormPublishState publishState
);

/**
* Retrieves the ids of all {@link NormDto} with a specific {@link NormPublishState}.
*
* @param normPublishState the publish state to filter the norms by (e.g., {@link NormPublishState#QUEUED_FOR_PUBLISH})
* @return a {@link List} of {@link UUID}s of the {@link NormDto}s matching the specified publish state
*/

@Query("SELECT n.id FROM NormDto n WHERE n.publishState = :publishState")
List<UUID> findNormIdsByPublishState(
@Param("publishState") final NormPublishState normPublishState
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,9 @@ public DBService(
public Optional<Norm> loadNorm(LoadNormPort.Command command) {
return switch (command.eli()) {
case DokumentExpressionEli expressionEli -> normRepository
.findFirstByEliExpressionOrderByEliManifestationDesc(expressionEli.toString())
.findFirstByEliDokumentExpressionOrderByEliDokumentManifestationDesc(
expressionEli.toString()
)
.map(NormMapper::mapToDomain);
case DokumentManifestationEli manifestationEli -> {
if (!manifestationEli.hasPointInTimeManifestation()) {
Expand All @@ -79,7 +81,7 @@ public Optional<Norm> loadNorm(LoadNormPort.Command command) {
}

yield normRepository
.findByEliManifestation(manifestationEli.toString())
.findByEliDokumentManifestation(manifestationEli.toString())
.map(NormMapper::mapToDomain);
}
case DokumentWorkEli workEli -> throw new IllegalArgumentException(
Expand All @@ -91,7 +93,7 @@ public Optional<Norm> loadNorm(LoadNormPort.Command command) {
@Override
public Optional<Norm> loadNormByGuid(LoadNormByGuidPort.Command command) {
return normRepository
.findFirstByGuidOrderByEliManifestation(command.guid())
.findFirstByGuidOrderByEliDokumentManifestation(command.guid())
.map(NormMapper::mapToDomain);
}

Expand Down Expand Up @@ -122,7 +124,7 @@ public List<Announcement> loadAllAnnouncements() {
public Optional<Norm> updateNorm(UpdateNormPort.Command command) {
var normXml = XmlMapper.toString(command.norm().getDocument());
return normRepository
.findByEliManifestation(command.norm().getManifestationEli().toString())
.findByEliDokumentManifestation(command.norm().getManifestationEli().toString())
.map(normDto -> {
normDto.setXml(normXml);
normDto.setPublishState(command.norm().getPublishState());
Expand Down Expand Up @@ -173,7 +175,7 @@ public void deleteAnnouncementByNormEli(DeleteAnnouncementByNormEliPort.Command
@Override
@Transactional
public void deleteNorm(DeleteNormPort.Command command) {
normRepository.deleteByEliManifestationAndPublishState(
normRepository.deleteByEliDokumentManifestationAndPublishState(
command.eli().toString(),
command.publishState()
);
Expand All @@ -182,7 +184,7 @@ public void deleteNorm(DeleteNormPort.Command command) {
@Override
@Transactional
public void deleteQueuedForPublishNorms(DeleteQueuedNormsPort.Command command) {
normRepository.deleteAllByEliWorkAndPublishState(
normRepository.deleteAllByEliDokumentWorkAndPublishState(
command.eli().toString(),
NormPublishState.QUEUED_FOR_PUBLISH
);
Expand All @@ -208,7 +210,7 @@ public Release saveReleaseToAnnouncement(SaveReleaseToAnnouncementPort.Command c
.getPublishedNorms()
.forEach(norm ->
normRepository
.findByEliManifestation(norm.getManifestationEli().toString())
.findByEliDokumentManifestation(norm.getManifestationEli().toString())
.ifPresent(normDto -> releaseDto.getNorms().add(normDto))
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
-- TARGET LAW
DELETE
FROM norms
WHERE eli_expression = 'eli/bund/bgbl-1/1964/s593/1964-08-05/1/deu/regelungstext-1';
WHERE eli_dokument_expression = 'eli/bund/bgbl-1/1964/s593/1964-08-05/1/deu/regelungstext-1';

INSERT INTO norms (publish_state, xml)
VALUES ('PUBLISHED', '<?xml version="1.0" encoding="UTF-8"?>
Expand Down Expand Up @@ -177,4 +177,4 @@ VALUES ('PUBLISHED', '<?xml version="1.0" encoding="UTF-8"?>
</akn:blockContainer>
</akn:conclusions>
</akn:act>
</akn:akomaNtoso>');
</akn:akomaNtoso>');
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
-- TARGET LAW
DELETE
FROM norms
WHERE eli_expression = 'eli/bund/bgbl-1/1990/s2954/2022-12-19/1/deu/regelungstext-1';
WHERE eli_dokument_expression = 'eli/bund/bgbl-1/1990/s2954/2022-12-19/1/deu/regelungstext-1';

INSERT INTO norms (publish_state, xml)
VALUES ('PUBLISHED', '<?xml version="1.0" encoding="UTF-8"?>
Expand Down Expand Up @@ -1763,4 +1763,4 @@ VALUES ('PUBLISHED', '<?xml version="1.0" encoding="UTF-8"?>
</akn:blockContainer>
</akn:conclusions>
</akn:act>
</akn:akomaNtoso>');
</akn:akomaNtoso>');
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
-- TARGET LAW
DELETE
FROM norms
WHERE eli_expression = 'eli/bund/bgbl-1/1000/s1/1000-01-01/1/deu/regelungstext-1';
WHERE eli_dokument_expression = 'eli/bund/bgbl-1/1000/s1/1000-01-01/1/deu/regelungstext-1';

INSERT INTO norms (publish_state, xml)
VALUES ('PUBLISHED', '<akn:akomaNtoso xmlns:akn="http://Inhaltsdaten.LegalDocML.de/1.7.1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://Metadaten.LegalDocML.de/1.7.1/ ../../schema/legalDocML.de-metadaten.xsd http://MetadatenBundesregierung.LegalDocML.de/1.7.1/ ../../schema/legalDocML.de-metadaten-bundesregierung.xsd http://Inhaltsdaten.LegalDocML.de/1.7.1/ ../../schema/legalDocML.de-regelungstextverkuendungsfassung.xsd">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
-- TARGET LAW
DELETE
FROM norms
where eli_expression = 'eli/bund/bgbl-1/2024/108/2024-03-27/1/deu/regelungstext-1';
where eli_dokument_expression = 'eli/bund/bgbl-1/2024/108/2024-03-27/1/deu/regelungstext-1';

INSERT INTO norms (publish_state, xml)
VALUES ('PUBLISHED', '<?xml version="1.0" encoding="UTF-8"?>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
-- TARGET LAW
DELETE
FROM norms
WHERE eli_expression = 'eli/bund/bgbl-1/1001/1/1001-01-01/1/deu/regelungstext-1';
WHERE eli_dokument_expression = 'eli/bund/bgbl-1/1001/1/1001-01-01/1/deu/regelungstext-1';

INSERT INTO norms (publish_state, xml)
VALUES ('PUBLISHED', '<?xml version="1.0" encoding="UTF-8"?>
Expand Down Expand Up @@ -133,4 +133,4 @@ VALUES ('PUBLISHED', '<?xml version="1.0" encoding="UTF-8"?>
</akn:article>
</akn:body>
</akn:act>
</akn:akomaNtoso>');
</akn:akomaNtoso>');
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
-- TARGET LAW
DELETE
FROM norms
WHERE eli_expression = 'eli/bund/bgbl-1/1002/1/1002-01-01/1/deu/regelungstext-1';
WHERE eli_dokument_expression = 'eli/bund/bgbl-1/1002/1/1002-01-01/1/deu/regelungstext-1';

INSERT INTO norms (publish_state, xml)
VALUES ('PUBLISHED', '<?xml version="1.0" encoding="UTF-8"?>
Expand Down Expand Up @@ -681,4 +681,4 @@ VALUES ('PUBLISHED', '<?xml version="1.0" encoding="UTF-8"?>
</akn:attachment>
</akn:attachments>
</akn:act>
</akn:akomaNtoso>');
</akn:akomaNtoso>');
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
-- TARGET LAW
DELETE
FROM norms
WHERE eli_expression = 'eli/bund/bgbl-1/2021/s818/2021-04-16/1/deu/regelungstext-1';
WHERE eli_dokument_expression = 'eli/bund/bgbl-1/2021/s818/2021-04-16/1/deu/regelungstext-1';

INSERT INTO norms (publish_state, xml)
VALUES ('PUBLISHED', '<akn:akomaNtoso xmlns:akn="http://Inhaltsdaten.LegalDocML.de/1.7.1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://Metadaten.LegalDocML.de/1.7.1/ ../../schema/legalDocML.de-metadaten.xsd http://MetadatenBundesregierung.LegalDocML.de/1.7.1/ ../../schema/legalDocML.de-metadaten-bundesregierung.xsd http://Inhaltsdaten.LegalDocML.de/1.7.1/ ../../schema/legalDocML.de-regelungstextverkuendungsfassung.xsd">
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
ALTER TABLE norms RENAME COLUMN eli_manifestation TO eli_dokument_manifestation;
-- For the FRBRManifestation the FRBRuri contains the subtype and format, this is different, than for FRBRExpression or FRBRWork. Therefore, we need to additionally remove those part from it.
ALTER TABLE norms
ADD COLUMN eli_norm_manifestation text GENERATED ALWAYS AS (regexp_replace((xpath(
'(//*[local-name()="act"]/*[local-name()="meta"]/*[local-name()="identification"]/*[local-name()="FRBRManifestation"]/*[local-name()="FRBRuri"]/@value)',
xml))[1]::text, '/[^/]*$', '')) STORED NOT NULL;

ALTER TABLE norms RENAME COLUMN eli_expression TO eli_dokument_expression;
ALTER TABLE norms
ADD COLUMN eli_norm_expression text GENERATED ALWAYS AS ((xpath(
'//*[local-name()="act"]/*[local-name()="meta"]/*[local-name()="identification"]/*[local-name()="FRBRExpression"]/*[local-name()="FRBRuri"]/@value',
xml))[1]::text) STORED NOT NULL;

ALTER TABLE norms RENAME COLUMN eli_work TO eli_dokument_work;
ALTER TABLE norms
ADD COLUMN eli_norm_work text GENERATED ALWAYS AS ((xpath(
'//*[local-name()="act"]/*[local-name()="meta"]/*[local-name()="identification"]/*[local-name()="FRBRWork"]/*[local-name()="FRBRuri"]/@value',
xml))[1]::text) STORED NOT NULL;
Loading

0 comments on commit 4ed247f

Please sign in to comment.