Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WFPREV-259 Change project entity to use ObjectiveTypeCodeModel for JPA #427

Merged
merged 12 commits into from
Jan 17, 2025
Merged
Show file tree
Hide file tree
Changes from 11 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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.*;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we generally want to avoid wildcard imports (I think I've been guilty of doing this myself). I'm beting your intellij setting is doing this. YOu can turn up the number of imports much higher than the default that it allows before it starts converting to use imports.

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
Loading