Skip to content

Commit ed6b230

Browse files
refactor(persistency): extract shared audit columns into AttributeAuditFields
SonarCloud flagged 5.6% new-code duplication (gate: <=3%) - the is_deleted/created_at/created_by/updated_at/updated_by block was copy-pasted identically across AttributeDefinition, AttributeDefinitionScope, and AttributeValue. Extracted into a @MappedSuperclass all three now extend; Hibernate still maps the fields into each entity's own table exactly as before, so no schema or behavior change.
1 parent 5c4809f commit ed6b230

4 files changed

Lines changed: 48 additions & 68 deletions

File tree

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* © Crown Copyright 2026. This work has been developed by the National Digital Twin Programme and is legally
4+
* attributed to the Department for Business and Trade (UK) as the governing entity.
5+
*/
6+
7+
package uk.gov.dbt.ndtp.ia.node.management.persistency.entity;
8+
9+
import jakarta.persistence.Column;
10+
import jakarta.persistence.MappedSuperclass;
11+
import jakarta.validation.constraints.NotNull;
12+
import jakarta.validation.constraints.Size;
13+
import java.sql.Timestamp;
14+
import lombok.Getter;
15+
import lombok.Setter;
16+
17+
/**
18+
* Shared soft-delete and audit columns for the policy attribute schema entities
19+
* ({@link AttributeDefinition}, {@link AttributeDefinitionScope}, {@link AttributeValue}).
20+
*/
21+
@Getter
22+
@Setter
23+
@MappedSuperclass
24+
public abstract class AttributeAuditFields {
25+
26+
@NotNull
27+
@Column(name = "is_deleted", nullable = false)
28+
private Boolean isDeleted = false;
29+
30+
@NotNull
31+
@Column(name = "created_at", nullable = false)
32+
private Timestamp createdAt;
33+
34+
@Size(max = 255)
35+
@NotNull
36+
@Column(name = "created_by", nullable = false, length = 255)
37+
private String createdBy;
38+
39+
@Column(name = "updated_at")
40+
private Timestamp updatedAt;
41+
42+
@Size(max = 255)
43+
@Column(name = "updated_by", length = 255)
44+
private String updatedBy;
45+
}

src/main/java/uk/gov/dbt/ndtp/ia/node/management/persistency/entity/AttributeDefinition.java

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import jakarta.persistence.*;
1010
import jakarta.validation.constraints.NotNull;
1111
import jakarta.validation.constraints.Size;
12-
import java.sql.Timestamp;
1312
import lombok.Getter;
1413
import lombok.Setter;
1514
import org.hibernate.annotations.JdbcTypeCode;
@@ -19,7 +18,7 @@
1918
@Setter
2019
@Entity
2120
@Table(name = "attribute_definition")
22-
public class AttributeDefinition {
21+
public class AttributeDefinition extends AttributeAuditFields {
2322
@Id
2423
@GeneratedValue(strategy = GenerationType.IDENTITY)
2524
@Column(name = "id", nullable = false)
@@ -67,24 +66,4 @@ public class AttributeDefinition {
6766
@NotNull
6867
@Column(name = "sensitive", nullable = false)
6968
private Boolean sensitive = false;
70-
71-
@NotNull
72-
@Column(name = "is_deleted", nullable = false)
73-
private Boolean isDeleted = false;
74-
75-
@NotNull
76-
@Column(name = "created_at", nullable = false)
77-
private Timestamp createdAt;
78-
79-
@Size(max = 255)
80-
@NotNull
81-
@Column(name = "created_by", nullable = false, length = 255)
82-
private String createdBy;
83-
84-
@Column(name = "updated_at")
85-
private Timestamp updatedAt;
86-
87-
@Size(max = 255)
88-
@Column(name = "updated_by", length = 255)
89-
private String updatedBy;
9069
}

src/main/java/uk/gov/dbt/ndtp/ia/node/management/persistency/entity/AttributeDefinitionScope.java

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88

99
import jakarta.persistence.*;
1010
import jakarta.validation.constraints.NotNull;
11-
import jakarta.validation.constraints.Size;
12-
import java.sql.Timestamp;
1311
import lombok.Getter;
1412
import lombok.Setter;
1513
import org.hibernate.annotations.JdbcTypeCode;
@@ -19,7 +17,7 @@
1917
@Setter
2018
@Entity
2119
@Table(name = "attribute_definition_scope")
22-
public class AttributeDefinitionScope {
20+
public class AttributeDefinitionScope extends AttributeAuditFields {
2321
@Id
2422
@GeneratedValue(strategy = GenerationType.IDENTITY)
2523
@Column(name = "id", nullable = false)
@@ -42,24 +40,4 @@ public class AttributeDefinitionScope {
4240
@JdbcTypeCode(SqlTypes.JSON)
4341
@Column(name = "default_value")
4442
private String defaultValue;
45-
46-
@NotNull
47-
@Column(name = "is_deleted", nullable = false)
48-
private Boolean isDeleted = false;
49-
50-
@NotNull
51-
@Column(name = "created_at", nullable = false)
52-
private Timestamp createdAt;
53-
54-
@Size(max = 255)
55-
@NotNull
56-
@Column(name = "created_by", nullable = false, length = 255)
57-
private String createdBy;
58-
59-
@Column(name = "updated_at")
60-
private Timestamp updatedAt;
61-
62-
@Size(max = 255)
63-
@Column(name = "updated_by", length = 255)
64-
private String updatedBy;
6543
}

src/main/java/uk/gov/dbt/ndtp/ia/node/management/persistency/entity/AttributeValue.java

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88

99
import jakarta.persistence.*;
1010
import jakarta.validation.constraints.NotNull;
11-
import jakarta.validation.constraints.Size;
12-
import java.sql.Timestamp;
1311
import lombok.Getter;
1412
import lombok.Setter;
1513
import org.hibernate.annotations.JdbcTypeCode;
@@ -19,7 +17,7 @@
1917
@Setter
2018
@Entity
2119
@Table(name = "attribute_value")
22-
public class AttributeValue {
20+
public class AttributeValue extends AttributeAuditFields {
2321
@Id
2422
@GeneratedValue(strategy = GenerationType.IDENTITY)
2523
@Column(name = "id", nullable = false)
@@ -44,24 +42,4 @@ public class AttributeValue {
4442
@JdbcTypeCode(SqlTypes.JSON)
4543
@Column(name = "value", nullable = false)
4644
private String value;
47-
48-
@NotNull
49-
@Column(name = "is_deleted", nullable = false)
50-
private Boolean isDeleted = false;
51-
52-
@NotNull
53-
@Column(name = "created_at", nullable = false)
54-
private Timestamp createdAt;
55-
56-
@Size(max = 255)
57-
@NotNull
58-
@Column(name = "created_by", nullable = false, length = 255)
59-
private String createdBy;
60-
61-
@Column(name = "updated_at")
62-
private Timestamp updatedAt;
63-
64-
@Size(max = 255)
65-
@Column(name = "updated_by", length = 255)
66-
private String updatedBy;
6745
}

0 commit comments

Comments
 (0)