Skip to content

Commit

Permalink
WFPREV-259 Change project entity to use ObjectiveTypeCodeModel for JPA (
Browse files Browse the repository at this point in the history
  • Loading branch information
ssylver93 authored Jan 17, 2025
1 parent d7a033f commit 5f96986
Show file tree
Hide file tree
Showing 9 changed files with 143 additions and 78 deletions.
1 change: 1 addition & 0 deletions .github/workflows/build-full-environment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ jobs:
with:
DEFAULT_APPLICATION_ENVIRONMENT: dev
IMAGE_TAG: latest
RUN_LIQUIBASE: true
secrets: inherit

wfprev-ui:
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/terragrunt-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ on:
IMAGE_TAG:
required: true
type: string
RUN_LIQUIBASE:
required: true
type: string
workflow_dispatch:
inputs:
DEFAULT_APPLICATION_ENVIRONMENT:
Expand Down
4 changes: 2 additions & 2 deletions postman/Prevention.postman_collection.json
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@
"header": [],
"body": {
"mode": "raw",
"raw": "{\n \"projectTypeCode\": {\n \"projectTypeCode\": \"FUEL_MGMT\"\n },\n \"siteUnitName\": \"Vancouver Forest Unit\",\n \"forestAreaCode\": {\n \"forestAreaCode\": \"WEST\"\n },\n \"generalScopeCode\": {\n \"generalScopeCode\": \"SL_ACT\"\n },\n \"project_status_code\": \"ACTIVE\",\n \"programAreaGuid\": \"27602cd9-4b6e-9be0-e063-690a0a0afb50\",\n \"projectName\": \"Sample Forest Management Project\",\n \"projectLead\": \"Jane Smith\",\n \"projectLeadEmailAddress\": \"[email protected]\",\n \"projectDescription\": \"This is a comprehensive forest management project focusing on sustainable practices\",\n \"closestCommunityName\": \"Vancouver\",\n \"totalEstimatedCostAmount\": 100000.00,\n \"totalForecastAmount\": 95000.00,\n \"totalPlannedProjectSizeHa\": 500.00,\n \"totalPlannedCostPerHectare\": 200.00,\n \"totalActualAmount\": 0.00,\n \"isMultiFiscalYearProj\": false,\n \"forestRegionOrgUnitId\": 1001,\n \"forestDistrictOrgUnitId\": 2001,\n \"fireCentreOrgUnitId\": 3001,\n \"bcParksRegionOrgUnitId\": 4001,\n \"bcParksSectionOrgUnitId\": 5001,\n \"primaryObjectiveTypeCode\": \"WRR\",\n \"secondaryObjectiveTypeCode\": \"CRIT_INFRA\",\n \"tertiaryObjectiveTypeCode\": \"ECO_REST\"}",
"raw": "{\n \"projectTypeCode\": {\n \"projectTypeCode\": \"FUEL_MGMT\"\n },\n \"siteUnitName\": \"Vancouver Forest Unit\",\n \"forestAreaCode\": {\n \"forestAreaCode\": \"WEST\"\n },\n \"generalScopeCode\": {\n \"generalScopeCode\": \"SL_ACT\"\n },\n \"project_status_code\": \"ACTIVE\",\n \"programAreaGuid\": \"27602cd9-4b6e-9be0-e063-690a0a0afb50\",\n \"projectName\": \"Sample Forest Management Project\",\n \"projectLead\": \"Jane Smith\",\n \"projectLeadEmailAddress\": \"[email protected]\",\n \"projectDescription\": \"This is a comprehensive forest management project focusing on sustainable practices\",\n \"closestCommunityName\": \"Vancouver\",\n \"totalEstimatedCostAmount\": 100000.00,\n \"totalForecastAmount\": 95000.00,\n \"totalPlannedProjectSizeHa\": 500.00,\n \"totalPlannedCostPerHectare\": 200.00,\n \"totalActualAmount\": 0.00,\n \"isMultiFiscalYearProj\": false,\n \"forestRegionOrgUnitId\": 1001,\n \"forestDistrictOrgUnitId\": 2001,\n \"fireCentreOrgUnitId\": 3001,\n \"bcParksRegionOrgUnitId\": 4001,\n \"bcParksSectionOrgUnitId\": 5001,\n \"primaryObjectiveTypeCode\": {\n \"objectiveTypeCode\": \"CRIT_INFRA\"\n },\n \"secondaryObjectiveTypeCode\": {\n \"objectiveTypeCode\": \"WRR\"\n },\n \"tertiaryObjectiveTypeCode\": {\n \"objectiveTypeCode\": \"ECO_REST\"\n } \n}",
"options": {
"raw": {
"language": "json"
Expand Down Expand Up @@ -417,7 +417,7 @@
"header": [],
"body": {
"mode": "raw",
"raw": "{\n \"projectGuid\": \"{{projectGuid}}\",\n \"projectTypeCode\": {\n \"projectTypeCode\": \"FUEL_MGMT\"\n },\n \"siteUnitName\": \"Vancouver Forest Unit\",\n \"forestAreaCode\": {\n \"forestAreaCode\": \"COAST\"\n },\n \"generalScopeCode\": {\n \"generalScopeCode\": \"SL_ACT\"\n },\n \"project_status_code\": \"ACTIVE\",\n \"programAreaGuid\": \"27602cd9-4b6e-9be0-e063-690a0a0afb50\",\n \"projectName\": \"Test 3\",\n \"projectLead\": \"Jane Smith\",\n \"projectLeadEmailAddress\": \"[email protected]\",\n \"projectDescription\": \"This is a comprehensive forest management project focusing on sustainable practices\",\n \"closestCommunityName\": \"Vancouver\",\n \"totalEstimatedCostAmount\": 177000.00,\n \"totalForecastAmount\": 125000.00,\n \"totalPlannedProjectSizeHa\": 500.00,\n \"totalPlannedCostPerHectare\": 200.00,\n \"totalActualAmount\": 0.00,\n \"isMultiFiscalYearProj\": false,\n \"forestRegionOrgUnitId\": 1001,\n \"forestDistrictOrgUnitId\": 2001,\n \"fireCentreOrgUnitId\": 3001,\n \"bcParksRegionOrgUnitId\": 4001,\n \"bcParksSectionOrgUnitId\": 5001,\n \"primaryObjectiveTypeCode\": \"WRR\",\n \"secondaryObjectiveTypeCode\": \"CRIT_INFRA\",\n \"tertiaryObjectiveTypeCode\": \"ECO_REST\"}",
"raw": "{\n \"projectGuid\": \"{{projectGuid}}\",\n \"projectTypeCode\": {\n \"projectTypeCode\": \"FUEL_MGMT\"\n },\n \"siteUnitName\": \"Vancouver Forest Unit\",\n \"forestAreaCode\": {\n \"forestAreaCode\": \"COAST\"\n },\n \"generalScopeCode\": {\n \"generalScopeCode\": \"SL_ACT\"\n },\n \"project_status_code\": \"ACTIVE\",\n \"programAreaGuid\": \"27602cd9-4b6e-9be0-e063-690a0a0afb50\",\n \"projectName\": \"Test 3\",\n \"projectLead\": \"Jane Smith\",\n \"projectLeadEmailAddress\": \"[email protected]\",\n \"projectDescription\": \"This is a comprehensive forest management project focusing on sustainable practices\",\n \"closestCommunityName\": \"Vancouver\",\n \"totalEstimatedCostAmount\": 177000.00,\n \"totalForecastAmount\": 125000.00,\n \"totalPlannedProjectSizeHa\": 500.00,\n \"totalPlannedCostPerHectare\": 200.00,\n \"totalActualAmount\": 0.00,\n \"isMultiFiscalYearProj\": false,\n \"forestRegionOrgUnitId\": 1001,\n \"forestDistrictOrgUnitId\": 2001,\n \"fireCentreOrgUnitId\": 3001,\n \"bcParksRegionOrgUnitId\": 4001,\n \"bcParksSectionOrgUnitId\": 5001,\n \"primaryObjectiveTypeCode\": {\n \"objectiveTypeCode\": \"RECONCIL\"\n },\n \"secondaryObjectiveTypeCode\": {\n \"objectiveTypeCode\": \"HAZ_ABATE\"\n },\n \"tertiaryObjectiveTypeCode\": {\n \"objectiveTypeCode\": \"FOR_HEALTH\"\n } \n}",
"options": {
"raw": {
"language": "json"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,8 @@
package ca.bc.gov.nrs.wfprev.data.assemblers;

import ca.bc.gov.nrs.wfprev.controllers.ProjectController;
import ca.bc.gov.nrs.wfprev.data.entities.ForestAreaCodeEntity;
import ca.bc.gov.nrs.wfprev.data.entities.GeneralScopeCodeEntity;
import ca.bc.gov.nrs.wfprev.data.entities.ProjectEntity;
import ca.bc.gov.nrs.wfprev.data.entities.ProjectTypeCodeEntity;
import ca.bc.gov.nrs.wfprev.data.models.ForestAreaCodeModel;
import ca.bc.gov.nrs.wfprev.data.models.GeneralScopeCodeModel;
import ca.bc.gov.nrs.wfprev.data.models.ProjectModel;
import ca.bc.gov.nrs.wfprev.data.models.ProjectTypeCodeModel;
import ca.bc.gov.nrs.wfprev.data.entities.*;
import ca.bc.gov.nrs.wfprev.data.models.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.hateoas.CollectionModel;
import org.springframework.hateoas.server.mvc.RepresentationModelAssemblerSupport;
Expand Down Expand Up @@ -48,6 +42,15 @@ public ProjectEntity toEntity(ProjectModel resource) {
if (resource.getProgramAreaGuid() != null) {
entity.setProgramAreaGuid(UUID.fromString(resource.getProgramAreaGuid()));
}
if (resource.getPrimaryObjectiveTypeCode() != null) {
entity.setPrimaryObjectiveTypeCode(toObjectiveTypeCodeEntity(resource.getPrimaryObjectiveTypeCode()));
}
if (resource.getSecondaryObjectiveTypeCode() != null) {
entity.setSecondaryObjectiveTypeCode(toObjectiveTypeCodeEntity(resource.getSecondaryObjectiveTypeCode()));
}
if (resource.getTertiaryObjectiveTypeCode() != null) {
entity.setTertiaryObjectiveTypeCode(toObjectiveTypeCodeEntity(resource.getTertiaryObjectiveTypeCode()));
}
entity.setForestRegionOrgUnitId(resource.getForestRegionOrgUnitId());
entity.setForestDistrictOrgUnitId(resource.getForestDistrictOrgUnitId());
entity.setFireCentreOrgUnitId(resource.getFireCentreOrgUnitId());
Expand All @@ -74,9 +77,6 @@ public ProjectEntity toEntity(ProjectModel resource) {
entity.setCreateDate(resource.getCreateDate());
entity.setUpdateUser(resource.getUpdateUser());
entity.setUpdateDate(resource.getUpdateDate());
entity.setPrimaryObjectiveTypeCode(resource.getPrimaryObjectiveTypeCode());
entity.setSecondaryObjectiveTypeCode(resource.getSecondaryObjectiveTypeCode());
entity.setTertiaryObjectiveTypeCode(resource.getTertiaryObjectiveTypeCode());

return entity;
}
Expand All @@ -100,6 +100,15 @@ public ProjectModel toModel(ProjectEntity entity) {
if (entity.getGeneralScopeCode() != null) {
resource.setGeneralScopeCode(toGeneralScopeCodeModel(entity.getGeneralScopeCode()));
}
if (entity.getPrimaryObjectiveTypeCode() != null) {
resource.setPrimaryObjectiveTypeCode(toObjectiveTypeCodeModel(entity.getPrimaryObjectiveTypeCode()));
}
if (entity.getSecondaryObjectiveTypeCode() != null) {
resource.setSecondaryObjectiveTypeCode(toObjectiveTypeCodeModel(entity.getSecondaryObjectiveTypeCode()));
}
if (entity.getTertiaryObjectiveTypeCode() != null) {
resource.setTertiaryObjectiveTypeCode(toObjectiveTypeCodeModel(entity.getTertiaryObjectiveTypeCode()));
}
resource.setProgramAreaGuid(entity.getProgramAreaGuid().toString());
resource.setForestRegionOrgUnitId(entity.getForestRegionOrgUnitId());
resource.setForestDistrictOrgUnitId(entity.getForestDistrictOrgUnitId());
Expand Down Expand Up @@ -127,9 +136,6 @@ public ProjectModel toModel(ProjectEntity entity) {
resource.setCreateDate(entity.getCreateDate());
resource.setUpdateUser(entity.getUpdateUser());
resource.setUpdateDate(entity.getUpdateDate());
resource.setPrimaryObjectiveTypeCode(entity.getPrimaryObjectiveTypeCode());
resource.setSecondaryObjectiveTypeCode(entity.getSecondaryObjectiveTypeCode());
resource.setTertiaryObjectiveTypeCode(entity.getTertiaryObjectiveTypeCode());

return resource;
}
Expand Down Expand Up @@ -172,6 +178,21 @@ private GeneralScopeCodeEntity toGeneralScopeCodeEntity(GeneralScopeCodeModel co
return ra.toEntity(code);
}

private ProjectStatusCodeEntity toProjectStatusCodeEntity(ProjectStatusCodeModel code) {
ProjectStatusCodeResourceAssembler ra = new ProjectStatusCodeResourceAssembler();
return ra.toEntity(code);
}

private ObjectiveTypeCodeModel toObjectiveTypeCodeModel(ObjectiveTypeCodeEntity code) {
ObjectiveTypeCodeResourceAssembler ra = new ObjectiveTypeCodeResourceAssembler();
return ra.toModel(code);
}

private ObjectiveTypeCodeEntity toObjectiveTypeCodeEntity (ObjectiveTypeCodeModel code) {
ObjectiveTypeCodeResourceAssembler ra = new ObjectiveTypeCodeResourceAssembler();
return ra.toEntity(code);
}

public ProjectEntity updateEntity(ProjectModel model, ProjectEntity existingEntity) {
log.debug(">> updateEntity");
System.out.println("In updateEntity");
Expand All @@ -191,7 +212,7 @@ public ProjectEntity updateEntity(ProjectModel model, ProjectEntity existingEnti
entity.setLongitude(nonNullOrDefault(model.getLongitude(), existingEntity.getLongitude()));
entity.setForestAreaCode(nonNullOrDefault(toForestAreaCodeEntity(model.getForestAreaCode()), existingEntity.getForestAreaCode()));
entity.setRevisionCount(nonNullOrDefault(model.getRevisionCount(), existingEntity.getRevisionCount()));
entity.setProjectStatusCode(existingEntity.getProjectStatusCode());
entity.setProjectStatusCode(nonNullOrDefault(toProjectStatusCodeEntity(model.getProjectStatusCode()), existingEntity.getProjectStatusCode()));
entity.setSiteUnitName(nonNullOrDefault(model.getSiteUnitName(), existingEntity.getSiteUnitName()));
entity.setProgramAreaGuid(
nonNullOrDefault(
Expand All @@ -212,9 +233,12 @@ public ProjectEntity updateEntity(ProjectModel model, ProjectEntity existingEnti
entity.setCreateDate(existingEntity.getCreateDate());
entity.setUpdateUser(existingEntity.getUpdateUser());
entity.setUpdateDate(existingEntity.getUpdateDate());
entity.setProjectTypeCode(existingEntity.getProjectTypeCode());
entity.setGeneralScopeCode(existingEntity.getGeneralScopeCode());
entity.setProjectTypeCode(nonNullOrDefault(toProjectTypeCodeEntity(model.getProjectTypeCode()), existingEntity.getProjectTypeCode()));
entity.setGeneralScopeCode(nonNullOrDefault(toGeneralScopeCodeEntity(model.getGeneralScopeCode()), existingEntity.getGeneralScopeCode()));
entity.setProjectNumber(existingEntity.getProjectNumber());
entity.setPrimaryObjectiveTypeCode(nonNullOrDefault(toObjectiveTypeCodeEntity(model.getPrimaryObjectiveTypeCode()), existingEntity.getPrimaryObjectiveTypeCode()));
entity.setSecondaryObjectiveTypeCode(nonNullOrDefault(toObjectiveTypeCodeEntity(model.getSecondaryObjectiveTypeCode()), existingEntity.getSecondaryObjectiveTypeCode()));
entity.setTertiaryObjectiveTypeCode(nonNullOrDefault(toObjectiveTypeCodeEntity(model.getTertiaryObjectiveTypeCode()), existingEntity.getTertiaryObjectiveTypeCode()));

log.error("Updated entity: " + entity);
return entity;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -170,12 +170,15 @@ public class ProjectEntity implements Serializable {
@Column(name = "update_date")
private Date updateDate;

@Column(name = "primary_objective_type_code")
private String primaryObjectiveTypeCode;
@ManyToOne(fetch = FetchType.EAGER, optional = true)
@JoinColumn(name = "primary_objective_type_code")
private ObjectiveTypeCodeEntity primaryObjectiveTypeCode;

@Column(name = "secondary_objective_type_code")
private String secondaryObjectiveTypeCode;
@ManyToOne(fetch = FetchType.EAGER, optional = true)
@JoinColumn(name = "secondary_objective_type_code")
private ObjectiveTypeCodeEntity secondaryObjectiveTypeCode;

@Column(name = "tertiary_objective_type_code")
private String tertiaryObjectiveTypeCode;
@ManyToOne(fetch = FetchType.EAGER, optional = true)
@JoinColumn(name = "tertiary_objective_type_code")
private ObjectiveTypeCodeEntity tertiaryObjectiveTypeCode;
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.math.BigDecimal;
import java.util.Date;

import ca.bc.gov.nrs.wfprev.data.entities.ObjectiveTypeCodeEntity;
import org.springframework.hateoas.server.core.Relation;

import com.fasterxml.jackson.annotation.JsonInclude;
Expand Down Expand Up @@ -54,8 +55,8 @@ public class ProjectModel extends CommonModel<ProjectModel> {
private BigDecimal latitude;
private BigDecimal longitude;
private Date lastProgressUpdateTimestamp;
private String primaryObjectiveTypeCode;
private String secondaryObjectiveTypeCode;
private String tertiaryObjectiveTypeCode;
private ObjectiveTypeCodeModel primaryObjectiveTypeCode;
private ObjectiveTypeCodeModel secondaryObjectiveTypeCode;
private ObjectiveTypeCodeModel tertiaryObjectiveTypeCode;

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,9 @@
import ca.bc.gov.nrs.wfprev.SpringSecurityAuditorAware;
import ca.bc.gov.nrs.wfprev.common.services.CommonService;
import ca.bc.gov.nrs.wfprev.data.assemblers.ProjectResourceAssembler;
import ca.bc.gov.nrs.wfprev.data.entities.ForestAreaCodeEntity;
import ca.bc.gov.nrs.wfprev.data.entities.GeneralScopeCodeEntity;
import ca.bc.gov.nrs.wfprev.data.entities.ProjectEntity;
import ca.bc.gov.nrs.wfprev.data.entities.ProjectStatusCodeEntity;
import ca.bc.gov.nrs.wfprev.data.entities.ProjectTypeCodeEntity;
import ca.bc.gov.nrs.wfprev.data.entities.*;
import ca.bc.gov.nrs.wfprev.data.models.ProjectModel;
import ca.bc.gov.nrs.wfprev.data.repositories.ForestAreaCodeRepository;
import ca.bc.gov.nrs.wfprev.data.repositories.GeneralScopeCodeRepository;
import ca.bc.gov.nrs.wfprev.data.repositories.ProjectRepository;
import ca.bc.gov.nrs.wfprev.data.repositories.ProjectStatusCodeRepository;
import ca.bc.gov.nrs.wfprev.data.repositories.ProjectTypeCodeRepository;
import ca.bc.gov.nrs.wfprev.data.repositories.*;
import jakarta.persistence.EntityNotFoundException;
import jakarta.transaction.Transactional;
import jakarta.validation.ConstraintViolationException;
Expand All @@ -36,6 +28,7 @@ public class ProjectService implements CommonService {
private final ProjectTypeCodeRepository projectTypeCodeRepository;
private final GeneralScopeCodeRepository generalScopeCodeRepository;
private final ProjectStatusCodeRepository projectStatusCodeRepository;
private final ObjectiveTypeCodeRepository objectiveTypeCodeRepository;


public ProjectService(
Expand All @@ -44,13 +37,15 @@ public ProjectService(
ForestAreaCodeRepository forestAreaCodeRepository,
ProjectTypeCodeRepository projectTypeCodeRepository,
GeneralScopeCodeRepository generalScopeCodeRepository,
ProjectStatusCodeRepository projectStatusCodeRepository) {
ProjectStatusCodeRepository projectStatusCodeRepository,
ObjectiveTypeCodeRepository objectiveTypeCodeRepository) {
this.projectRepository = projectRepository;
this.projectResourceAssembler = projectResourceAssembler;
this.forestAreaCodeRepository = forestAreaCodeRepository;
this.projectTypeCodeRepository = projectTypeCodeRepository;
this.generalScopeCodeRepository = generalScopeCodeRepository;
this.projectStatusCodeRepository = projectStatusCodeRepository;
this.objectiveTypeCodeRepository = objectiveTypeCodeRepository;
}

public CollectionModel<ProjectModel> getAllProjects() throws ServiceException {
Expand Down Expand Up @@ -125,6 +120,17 @@ private void assignAssociatedEntities(ProjectModel resource, ProjectEntity entit
entity.setGeneralScopeCode(loadGeneralScopeCode(resource.getGeneralScopeCode().getGeneralScopeCode()));
}

if (resource.getPrimaryObjectiveTypeCode() != null && resource.getPrimaryObjectiveTypeCode().getObjectiveTypeCode() != null) {
entity.setPrimaryObjectiveTypeCode(loadObjectiveTypeCode(resource.getPrimaryObjectiveTypeCode().getObjectiveTypeCode()));
}

if (resource.getSecondaryObjectiveTypeCode() != null && resource.getSecondaryObjectiveTypeCode().getObjectiveTypeCode() != null) {
entity.setSecondaryObjectiveTypeCode(loadObjectiveTypeCode(resource.getSecondaryObjectiveTypeCode().getObjectiveTypeCode()));
}
if (resource.getTertiaryObjectiveTypeCode() != null && resource.getTertiaryObjectiveTypeCode().getObjectiveTypeCode() != null) {
entity.setTertiaryObjectiveTypeCode(loadObjectiveTypeCode(resource.getTertiaryObjectiveTypeCode().getObjectiveTypeCode()));
}

String projectStatusCode1 = resource.getProjectStatusCode() != null
? resource.getProjectStatusCode().getProjectStatusCode()
: null;
Expand Down Expand Up @@ -152,6 +158,12 @@ private GeneralScopeCodeEntity loadGeneralScopeCode(String generalScopeCode) {
.orElseThrow(() -> new EntityNotFoundException("General Scope Code not found: " + generalScopeCode));
}

private ObjectiveTypeCodeEntity loadObjectiveTypeCode(String objectiveTypeCode) {
return objectiveTypeCodeRepository
.findById(objectiveTypeCode)
.orElseThrow(() -> new EntityNotFoundException("Objective Type Code not found: " + objectiveTypeCode));
}

private ProjectStatusCodeEntity loadOrSetDefaultProjectStatusCode(String projectStatusCode) {
if (projectStatusCode == null) {
return projectStatusCodeRepository
Expand Down
Loading

0 comments on commit 5f96986

Please sign in to comment.