From 060c9d5c295e2e167f2f893747815f23010a0a51 Mon Sep 17 00:00:00 2001 From: sstewart Date: Mon, 9 Mar 2026 12:24:22 +0000 Subject: [PATCH 1/6] HDPI-5180: Create basic event to persist a citizen General Application --- .../reform/pcs/ccd/domain/GenAppType.java | 10 ++ .../hmcts/reform/pcs/ccd/domain/PCSCase.java | 4 + .../domain/citizen/CitizenGenAppRequest.java | 17 +++ .../reform/pcs/ccd/entity/GenAppEntity.java | 52 +++++++ .../reform/pcs/ccd/entity/PcsCaseEntity.java | 10 ++ .../hmcts/reform/pcs/ccd/event/EventId.java | 1 + .../event/citizen/CitizenCreateGenApp.java | 73 ++++++++++ .../pcs/ccd/repository/GenAppRepository.java | 12 ++ .../migration/V063__general_application.sql | 6 + .../citizen/CitizenCreateGenAppTest.java | 132 ++++++++++++++++++ 10 files changed, 317 insertions(+) create mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/GenAppType.java create mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/citizen/CitizenGenAppRequest.java create mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/GenAppEntity.java create mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/citizen/CitizenCreateGenApp.java create mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/GenAppRepository.java create mode 100644 src/main/resources/db/migration/V063__general_application.sql create mode 100644 src/test/java/uk/gov/hmcts/reform/pcs/ccd/event/citizen/CitizenCreateGenAppTest.java diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/GenAppType.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/GenAppType.java new file mode 100644 index 0000000000..d450c19c8c --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/GenAppType.java @@ -0,0 +1,10 @@ +package uk.gov.hmcts.reform.pcs.ccd.domain; + +public enum GenAppType { + + SUSPEND, + ADJOURN, + SET_ASIDE, + SOMETHING_ELSE + +} diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/PCSCase.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/PCSCase.java index d9a4598fcf..8f46c31d4c 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/PCSCase.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/PCSCase.java @@ -17,6 +17,7 @@ import uk.gov.hmcts.reform.pcs.ccd.accesscontrol.ClaimantAccess; import uk.gov.hmcts.reform.pcs.ccd.accesscontrol.DefendantAccess; import uk.gov.hmcts.reform.pcs.ccd.accesscontrol.GlobalSearchAccess; +import uk.gov.hmcts.reform.pcs.ccd.domain.citizen.CitizenGenAppRequest; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; import uk.gov.hmcts.reform.pcs.ccd.domain.grounds.AssuredNoArrearsPossessionGrounds; import uk.gov.hmcts.reform.pcs.ccd.domain.grounds.AssuredRentArrearsPossessionGrounds; @@ -501,4 +502,7 @@ public class PCSCase { @SuppressWarnings("MemberName") // Field name is case-sensitive in CCD private SearchCriteria searchCriteria; + @CCD(access = DefendantAccess.class) + private CitizenGenAppRequest citizenGenAppRequest; + } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/citizen/CitizenGenAppRequest.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/citizen/CitizenGenAppRequest.java new file mode 100644 index 0000000000..b19f51a119 --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/citizen/CitizenGenAppRequest.java @@ -0,0 +1,17 @@ +package uk.gov.hmcts.reform.pcs.ccd.domain.citizen; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import uk.gov.hmcts.reform.pcs.ccd.domain.GenAppType; + +@Builder +@Data +@NoArgsConstructor +@AllArgsConstructor +public class CitizenGenAppRequest { + + private GenAppType applicationType; + +} diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/GenAppEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/GenAppEntity.java new file mode 100644 index 0000000000..c7c52b1d83 --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/GenAppEntity.java @@ -0,0 +1,52 @@ +package uk.gov.hmcts.reform.pcs.ccd.entity; + +import com.fasterxml.jackson.annotation.JsonBackReference; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import uk.gov.hmcts.reform.pcs.ccd.domain.GenAppType; +import uk.gov.hmcts.reform.pcs.ccd.entity.party.PartyEntity; + +import java.util.UUID; + +import static jakarta.persistence.FetchType.EAGER; +import static jakarta.persistence.FetchType.LAZY; + +@Entity +@Builder +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "general_application") +public class GenAppEntity { + + @Id + @GeneratedValue(strategy = GenerationType.UUID) + private UUID id; + + @ManyToOne(fetch = LAZY) + @JoinColumn(name = "case_id") + @JsonBackReference + private PcsCaseEntity pcsCase; + + @Enumerated(EnumType.STRING) + private GenAppType type; + + @ManyToOne(fetch = EAGER) + @JoinColumn(name = "party_id") + @JsonBackReference + private PartyEntity party; + +} diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/PcsCaseEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/PcsCaseEntity.java index 01e9816540..df3ada3972 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/PcsCaseEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/PcsCaseEntity.java @@ -72,6 +72,11 @@ public class PcsCaseEntity { @JsonManagedReference private List claims = new ArrayList<>(); + @OneToMany(mappedBy = "pcsCase", fetch = LAZY, cascade = ALL) + @Builder.Default + @JsonManagedReference + private Set genApps = new HashSet<>(); + @OneToMany(mappedBy = "pcsCase", fetch = LAZY, cascade = ALL, orphanRemoval = true) @Builder.Default @JsonManagedReference @@ -94,6 +99,11 @@ public void addClaim(ClaimEntity claim) { claim.setPcsCase(this); } + public void addGenApp(GenAppEntity genApp) { + genApps.add(genApp); + genApp.setPcsCase(this); + } + public void addParty(PartyEntity party) { parties.add(party); party.setPcsCase(this); diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/EventId.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/EventId.java index 3a84e15878..d6572b3b62 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/EventId.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/EventId.java @@ -7,5 +7,6 @@ public enum EventId { enforceTheOrder, respondPossessionClaim, submitDefendantResponse, + citizenCreateGenApp, createTestCase } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/citizen/CitizenCreateGenApp.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/citizen/CitizenCreateGenApp.java new file mode 100644 index 0000000000..0489a0f872 --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/citizen/CitizenCreateGenApp.java @@ -0,0 +1,73 @@ +package uk.gov.hmcts.reform.pcs.ccd.event.citizen; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import uk.gov.hmcts.ccd.sdk.api.CCDConfig; +import uk.gov.hmcts.ccd.sdk.api.DecentralisedConfigBuilder; +import uk.gov.hmcts.ccd.sdk.api.EventPayload; +import uk.gov.hmcts.ccd.sdk.api.Permission; +import uk.gov.hmcts.ccd.sdk.api.callback.SubmitResponse; +import uk.gov.hmcts.reform.pcs.ccd.ShowConditions; +import uk.gov.hmcts.reform.pcs.ccd.accesscontrol.UserRole; +import uk.gov.hmcts.reform.pcs.ccd.domain.PCSCase; +import uk.gov.hmcts.reform.pcs.ccd.domain.State; +import uk.gov.hmcts.reform.pcs.ccd.domain.citizen.CitizenGenAppRequest; +import uk.gov.hmcts.reform.pcs.ccd.entity.GenAppEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.PcsCaseEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.party.PartyEntity; +import uk.gov.hmcts.reform.pcs.ccd.repository.GenAppRepository; +import uk.gov.hmcts.reform.pcs.ccd.service.PcsCaseService; +import uk.gov.hmcts.reform.pcs.ccd.service.party.PartyService; +import uk.gov.hmcts.reform.pcs.security.SecurityContextService; + +import java.util.UUID; + +import static uk.gov.hmcts.reform.pcs.ccd.event.EventId.citizenCreateGenApp; + +@Slf4j +@Component +@AllArgsConstructor +public class CitizenCreateGenApp implements CCDConfig { + + private final PcsCaseService pcsCaseService; + private final PartyService partyService; + private final SecurityContextService securityContextService; + private final GenAppRepository genAppRepository; + + @Override + public void configureDecentralised(DecentralisedConfigBuilder configBuilder) { + configBuilder + .decentralisedEvent(citizenCreateGenApp.name(), this::submit) + .forStates() // TODO: Adjust once target states are known and available + .name("Create a General Application") + .showCondition(ShowConditions.NEVER_SHOW) + .grant(Permission.CRUD, UserRole.DEFENDANT) + .showSummary(); + } + + private SubmitResponse submit(EventPayload eventPayload) { + long caseReference = eventPayload.caseReference(); + PCSCase caseData = eventPayload.caseData(); + + PcsCaseEntity pcsCaseEntity = pcsCaseService.loadCase(caseReference); + + UUID currentUserId = securityContextService.getCurrentUserId(); + PartyEntity applicantParty = partyService.getPartyEntityByIdamId(currentUserId, caseReference); + + CitizenGenAppRequest citizenCreateGenApp = caseData.getCitizenGenAppRequest(); + + GenAppEntity genAppEntity = GenAppEntity.builder() + .type(citizenCreateGenApp.getApplicationType()) + .party(applicantParty) + .build(); + + genAppRepository.save(genAppEntity); + + pcsCaseEntity.addGenApp(genAppEntity); + + return SubmitResponse.builder() + .build(); + } + +} diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/GenAppRepository.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/GenAppRepository.java new file mode 100644 index 0000000000..bfa3e3db8c --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/GenAppRepository.java @@ -0,0 +1,12 @@ +package uk.gov.hmcts.reform.pcs.ccd.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +import uk.gov.hmcts.reform.pcs.ccd.entity.GenAppEntity; + +import java.util.UUID; + +@Repository +public interface GenAppRepository extends JpaRepository { + +} diff --git a/src/main/resources/db/migration/V063__general_application.sql b/src/main/resources/db/migration/V063__general_application.sql new file mode 100644 index 0000000000..057f05dbec --- /dev/null +++ b/src/main/resources/db/migration/V063__general_application.sql @@ -0,0 +1,6 @@ +CREATE TABLE general_application ( + id UUID PRIMARY KEY, + case_id UUID REFERENCES public.pcs_case (id), + type VARCHAR(50), + party_id UUID REFERENCES public.party (id) +) diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/event/citizen/CitizenCreateGenAppTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/event/citizen/CitizenCreateGenAppTest.java new file mode 100644 index 0000000000..cd2db81d32 --- /dev/null +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/event/citizen/CitizenCreateGenAppTest.java @@ -0,0 +1,132 @@ +package uk.gov.hmcts.reform.pcs.ccd.event.citizen; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import uk.gov.hmcts.reform.pcs.ccd.domain.GenAppType; +import uk.gov.hmcts.reform.pcs.ccd.domain.PCSCase; +import uk.gov.hmcts.reform.pcs.ccd.domain.citizen.CitizenGenAppRequest; +import uk.gov.hmcts.reform.pcs.ccd.entity.GenAppEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.PcsCaseEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.party.PartyEntity; +import uk.gov.hmcts.reform.pcs.ccd.event.BaseEventTest; +import uk.gov.hmcts.reform.pcs.ccd.repository.GenAppRepository; +import uk.gov.hmcts.reform.pcs.ccd.service.PcsCaseService; +import uk.gov.hmcts.reform.pcs.ccd.service.party.PartyService; +import uk.gov.hmcts.reform.pcs.security.SecurityContextService; + +import java.util.UUID; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.same; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +@ExtendWith(MockitoExtension.class) +class CitizenCreateGenAppTest extends BaseEventTest { + + @Mock + private PcsCaseService pcsCaseService; + @Mock + private PartyService partyService; + @Mock + private SecurityContextService securityContextService; + @Mock + private GenAppRepository genAppRepository; + + @BeforeEach + void setUp() { + CitizenCreateGenApp underTest = new CitizenCreateGenApp(pcsCaseService, partyService, + securityContextService, genAppRepository); + + setEventUnderTest(underTest); + } + + @Nested + @DisplayName("Submit event tests") + class SubmitTests { + + @Mock + private PcsCaseEntity pcsCaseEntity; + + @BeforeEach + void setUp() { + given(pcsCaseService.loadCase(TEST_CASE_REFERENCE)).willReturn(pcsCaseEntity); + } + + @ParameterizedTest + @EnumSource(value = GenAppType.class) + void shouldSetGeneralApplicationType(GenAppType genAppType) { + // Given + CitizenGenAppRequest genAppRequest = CitizenGenAppRequest.builder() + .applicationType(genAppType) + .build(); + + PCSCase caseData = PCSCase.builder() + .citizenGenAppRequest(genAppRequest) + .build(); + + // When + callSubmitHandler(caseData); + + // Then + ArgumentCaptor genAppEntityCaptor = ArgumentCaptor.forClass(GenAppEntity.class); + verify(genAppRepository).save(genAppEntityCaptor.capture()); + + assertThat(genAppEntityCaptor.getValue().getType()).isEqualTo(genAppType); + } + + @Test + void shouldSetApplicantParty() { + // Given + final PartyEntity applicantParty = mock(PartyEntity.class); + + CitizenGenAppRequest genAppRequest = CitizenGenAppRequest.builder() + .applicationType(GenAppType.SUSPEND) + .build(); + + PCSCase caseData = PCSCase.builder() + .citizenGenAppRequest(genAppRequest) + .build(); + + UUID currentUserId = UUID.randomUUID(); + given(securityContextService.getCurrentUserId()).willReturn(currentUserId); + given(partyService.getPartyEntityByIdamId(currentUserId, TEST_CASE_REFERENCE)).willReturn(applicantParty); + + // When + callSubmitHandler(caseData); + + // Then + ArgumentCaptor genAppEntityCaptor = ArgumentCaptor.forClass(GenAppEntity.class); + verify(genAppRepository).save(genAppEntityCaptor.capture()); + + assertThat(genAppEntityCaptor.getValue().getParty()).isEqualTo(applicantParty); + } + + @Test + void shouldCreateGenAppAndAddToCaseEntity() { + // Given + PCSCase caseData = PCSCase.builder() + .citizenGenAppRequest(CitizenGenAppRequest.builder().build()) + .build(); + + // When + callSubmitHandler(caseData); + + // Then + ArgumentCaptor genAppEntityCaptor = ArgumentCaptor.forClass(GenAppEntity.class); + verify(genAppRepository).save(genAppEntityCaptor.capture()); + + verify(pcsCaseEntity).addGenApp(same(genAppEntityCaptor.getValue())); + } + + } +} From be62c021594e03048d6533be750f3f009747faa4 Mon Sep 17 00:00:00 2001 From: sstewart Date: Wed, 25 Mar 2026 10:20:01 +0000 Subject: [PATCH 2/6] HDPI-5180: Fix applicable states for citizen gen app event --- .../hmcts/reform/pcs/ccd/event/citizen/CitizenCreateGenApp.java | 2 +- ...0__general_application.sql => V071__general_application.sql} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename src/main/resources/db/migration/{V070__general_application.sql => V071__general_application.sql} (100%) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/citizen/CitizenCreateGenApp.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/citizen/CitizenCreateGenApp.java index 0489a0f872..d64ff82686 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/citizen/CitizenCreateGenApp.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/citizen/CitizenCreateGenApp.java @@ -39,7 +39,7 @@ public class CitizenCreateGenApp implements CCDConfig public void configureDecentralised(DecentralisedConfigBuilder configBuilder) { configBuilder .decentralisedEvent(citizenCreateGenApp.name(), this::submit) - .forStates() // TODO: Adjust once target states are known and available + .forAllStates() // TODO: Adjust once target states are known and available .name("Create a General Application") .showCondition(ShowConditions.NEVER_SHOW) .grant(Permission.CRUD, UserRole.DEFENDANT) diff --git a/src/main/resources/db/migration/V070__general_application.sql b/src/main/resources/db/migration/V071__general_application.sql similarity index 100% rename from src/main/resources/db/migration/V070__general_application.sql rename to src/main/resources/db/migration/V071__general_application.sql From 32ec663d5055fe6b32214510e1e3adbc5dab29eb Mon Sep 17 00:00:00 2001 From: sstewart Date: Wed, 25 Mar 2026 17:36:11 +0000 Subject: [PATCH 3/6] HDPI-5180: Add initial state to gen app --- .../hmcts/reform/pcs/ccd/domain/PCSCase.java | 2 +- .../CitizenGenAppRequest.java | 2 +- .../pcs/ccd/domain/genapp/GenAppState.java | 8 +++++++ .../reform/pcs/ccd/entity/GenAppEntity.java | 4 ++++ .../event/citizen/CitizenCreateGenApp.java | 4 +++- .../migration/V071__general_application.sql | 1 + .../citizen/CitizenCreateGenAppTest.java | 23 ++++++++++++++++++- 7 files changed, 40 insertions(+), 4 deletions(-) rename src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/{citizen => genapp}/CitizenGenAppRequest.java (85%) create mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/genapp/GenAppState.java diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/PCSCase.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/PCSCase.java index 5d5ab7913f..5d44d02eaa 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/PCSCase.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/PCSCase.java @@ -18,7 +18,7 @@ import uk.gov.hmcts.reform.pcs.ccd.accesscontrol.ClaimantAccess; import uk.gov.hmcts.reform.pcs.ccd.accesscontrol.DefendantAccess; import uk.gov.hmcts.reform.pcs.ccd.accesscontrol.GlobalSearchAccess; -import uk.gov.hmcts.reform.pcs.ccd.domain.citizen.CitizenGenAppRequest; +import uk.gov.hmcts.reform.pcs.ccd.domain.genapp.CitizenGenAppRequest; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; import uk.gov.hmcts.reform.pcs.ccd.domain.grounds.AssuredNoArrearsPossessionGrounds; import uk.gov.hmcts.reform.pcs.ccd.domain.grounds.AssuredRentArrearsPossessionGrounds; diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/citizen/CitizenGenAppRequest.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/genapp/CitizenGenAppRequest.java similarity index 85% rename from src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/citizen/CitizenGenAppRequest.java rename to src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/genapp/CitizenGenAppRequest.java index b19f51a119..adc0fb1603 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/citizen/CitizenGenAppRequest.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/genapp/CitizenGenAppRequest.java @@ -1,4 +1,4 @@ -package uk.gov.hmcts.reform.pcs.ccd.domain.citizen; +package uk.gov.hmcts.reform.pcs.ccd.domain.genapp; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/genapp/GenAppState.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/genapp/GenAppState.java new file mode 100644 index 0000000000..e115065067 --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/genapp/GenAppState.java @@ -0,0 +1,8 @@ +package uk.gov.hmcts.reform.pcs.ccd.domain.genapp; + +public enum GenAppState { + + PENDING_SUBMISSION, + SUBMITTED + +} diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/GenAppEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/GenAppEntity.java index c7c52b1d83..3ad23b2ebe 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/GenAppEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/GenAppEntity.java @@ -16,6 +16,7 @@ import lombok.NoArgsConstructor; import lombok.Setter; import uk.gov.hmcts.reform.pcs.ccd.domain.GenAppType; +import uk.gov.hmcts.reform.pcs.ccd.domain.genapp.GenAppState; import uk.gov.hmcts.reform.pcs.ccd.entity.party.PartyEntity; import java.util.UUID; @@ -44,6 +45,9 @@ public class GenAppEntity { @Enumerated(EnumType.STRING) private GenAppType type; + @Enumerated(EnumType.STRING) + private GenAppState state; + @ManyToOne(fetch = EAGER) @JoinColumn(name = "party_id") @JsonBackReference diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/citizen/CitizenCreateGenApp.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/citizen/CitizenCreateGenApp.java index d64ff82686..0670a6c8c0 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/citizen/CitizenCreateGenApp.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/citizen/CitizenCreateGenApp.java @@ -12,7 +12,8 @@ import uk.gov.hmcts.reform.pcs.ccd.accesscontrol.UserRole; import uk.gov.hmcts.reform.pcs.ccd.domain.PCSCase; import uk.gov.hmcts.reform.pcs.ccd.domain.State; -import uk.gov.hmcts.reform.pcs.ccd.domain.citizen.CitizenGenAppRequest; +import uk.gov.hmcts.reform.pcs.ccd.domain.genapp.CitizenGenAppRequest; +import uk.gov.hmcts.reform.pcs.ccd.domain.genapp.GenAppState; import uk.gov.hmcts.reform.pcs.ccd.entity.GenAppEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.PcsCaseEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.party.PartyEntity; @@ -60,6 +61,7 @@ private SubmitResponse submit(EventPayload eventPayload) GenAppEntity genAppEntity = GenAppEntity.builder() .type(citizenCreateGenApp.getApplicationType()) .party(applicantParty) + .state(GenAppState.SUBMITTED) .build(); genAppRepository.save(genAppEntity); diff --git a/src/main/resources/db/migration/V071__general_application.sql b/src/main/resources/db/migration/V071__general_application.sql index 057f05dbec..94e6ab5032 100644 --- a/src/main/resources/db/migration/V071__general_application.sql +++ b/src/main/resources/db/migration/V071__general_application.sql @@ -2,5 +2,6 @@ CREATE TABLE general_application ( id UUID PRIMARY KEY, case_id UUID REFERENCES public.pcs_case (id), type VARCHAR(50), + state VARCHAR(30), party_id UUID REFERENCES public.party (id) ) diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/event/citizen/CitizenCreateGenAppTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/event/citizen/CitizenCreateGenAppTest.java index cd2db81d32..037b2b88e0 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/event/citizen/CitizenCreateGenAppTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/event/citizen/CitizenCreateGenAppTest.java @@ -12,7 +12,8 @@ import org.mockito.junit.jupiter.MockitoExtension; import uk.gov.hmcts.reform.pcs.ccd.domain.GenAppType; import uk.gov.hmcts.reform.pcs.ccd.domain.PCSCase; -import uk.gov.hmcts.reform.pcs.ccd.domain.citizen.CitizenGenAppRequest; +import uk.gov.hmcts.reform.pcs.ccd.domain.genapp.CitizenGenAppRequest; +import uk.gov.hmcts.reform.pcs.ccd.domain.genapp.GenAppState; import uk.gov.hmcts.reform.pcs.ccd.entity.GenAppEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.PcsCaseEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.party.PartyEntity; @@ -84,6 +85,26 @@ void shouldSetGeneralApplicationType(GenAppType genAppType) { assertThat(genAppEntityCaptor.getValue().getType()).isEqualTo(genAppType); } + @Test + void shouldSetInitialState() { + // Given + CitizenGenAppRequest genAppRequest = CitizenGenAppRequest.builder() + .build(); + + PCSCase caseData = PCSCase.builder() + .citizenGenAppRequest(genAppRequest) + .build(); + + // When + callSubmitHandler(caseData); + + // Then + ArgumentCaptor genAppEntityCaptor = ArgumentCaptor.forClass(GenAppEntity.class); + verify(genAppRepository).save(genAppEntityCaptor.capture()); + + assertThat(genAppEntityCaptor.getValue().getState()).isEqualTo(GenAppState.SUBMITTED); + } + @Test void shouldSetApplicantParty() { // Given From 94bb818b22d1839f9f85dee9bef8e213016c0907 Mon Sep 17 00:00:00 2001 From: sstewart Date: Thu, 26 Mar 2026 09:55:16 +0000 Subject: [PATCH 4/6] HDPI-5180: Update DB migration number --- ...071__general_application.sql => V072__general_application.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/resources/db/migration/{V071__general_application.sql => V072__general_application.sql} (100%) diff --git a/src/main/resources/db/migration/V071__general_application.sql b/src/main/resources/db/migration/V072__general_application.sql similarity index 100% rename from src/main/resources/db/migration/V071__general_application.sql rename to src/main/resources/db/migration/V072__general_application.sql From f0b788f8eead9eb57ef5bd180c41ab6f0938a9e6 Mon Sep 17 00:00:00 2001 From: sstewart Date: Fri, 27 Mar 2026 14:12:07 +0000 Subject: [PATCH 5/6] HDPI-5180: Move GenAppType to genapp package --- .../reform/pcs/ccd/domain/genapp/CitizenGenAppRequest.java | 1 - .../hmcts/reform/pcs/ccd/domain/{ => genapp}/GenAppType.java | 2 +- .../java/uk/gov/hmcts/reform/pcs/ccd/entity/GenAppEntity.java | 2 +- .../reform/pcs/ccd/event/citizen/CitizenCreateGenAppTest.java | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) rename src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/{ => genapp}/GenAppType.java (63%) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/genapp/CitizenGenAppRequest.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/genapp/CitizenGenAppRequest.java index adc0fb1603..4580b5b682 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/genapp/CitizenGenAppRequest.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/genapp/CitizenGenAppRequest.java @@ -4,7 +4,6 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import uk.gov.hmcts.reform.pcs.ccd.domain.GenAppType; @Builder @Data diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/GenAppType.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/genapp/GenAppType.java similarity index 63% rename from src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/GenAppType.java rename to src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/genapp/GenAppType.java index d450c19c8c..bd01b1a883 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/GenAppType.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/genapp/GenAppType.java @@ -1,4 +1,4 @@ -package uk.gov.hmcts.reform.pcs.ccd.domain; +package uk.gov.hmcts.reform.pcs.ccd.domain.genapp; public enum GenAppType { diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/GenAppEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/GenAppEntity.java index 3ad23b2ebe..fe97bc1e38 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/GenAppEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/GenAppEntity.java @@ -15,7 +15,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import uk.gov.hmcts.reform.pcs.ccd.domain.GenAppType; +import uk.gov.hmcts.reform.pcs.ccd.domain.genapp.GenAppType; import uk.gov.hmcts.reform.pcs.ccd.domain.genapp.GenAppState; import uk.gov.hmcts.reform.pcs.ccd.entity.party.PartyEntity; diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/event/citizen/CitizenCreateGenAppTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/event/citizen/CitizenCreateGenAppTest.java index 037b2b88e0..cc25eba523 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/event/citizen/CitizenCreateGenAppTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/event/citizen/CitizenCreateGenAppTest.java @@ -10,7 +10,7 @@ import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import uk.gov.hmcts.reform.pcs.ccd.domain.GenAppType; +import uk.gov.hmcts.reform.pcs.ccd.domain.genapp.GenAppType; import uk.gov.hmcts.reform.pcs.ccd.domain.PCSCase; import uk.gov.hmcts.reform.pcs.ccd.domain.genapp.CitizenGenAppRequest; import uk.gov.hmcts.reform.pcs.ccd.domain.genapp.GenAppState; From 615decea1d54b37a8e92c578f8b51c6c759fb9e3 Mon Sep 17 00:00:00 2001 From: sstewart Date: Wed, 1 Apr 2026 14:12:42 +0100 Subject: [PATCH 6/6] HDPI-5180: Update DB migration version number --- ...072__general_application.sql => V075__general_application.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/resources/db/migration/{V072__general_application.sql => V075__general_application.sql} (100%) diff --git a/src/main/resources/db/migration/V072__general_application.sql b/src/main/resources/db/migration/V075__general_application.sql similarity index 100% rename from src/main/resources/db/migration/V072__general_application.sql rename to src/main/resources/db/migration/V075__general_application.sql