Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ export const CodeTableKeys = {
SECONDARY_OBJECTIVE_TYPE_CODE: 'secondaryObjectiveTypeCode',
WILDFIRE_ORG_UNIT: 'wildfireOrgUnit',
WILDFIRE_ORG_UNIT_ID: 'wildfireOrgUnitId',
REPORTING_PERIOD_CODE: 'reportingPeriodCode',
};

export const CodeTableNames = {
Expand All @@ -77,7 +78,8 @@ export const CodeTableNames = {
BC_PARKS_REGION_CODE: 'bcParksRegionCodes',
BC_PARKS_SECTION_CODE: 'bcParksSectionCodes',
OBJECTIVE_TYPE_CODE: 'objectiveTypeCodes',
WILDFIRE_ORG_UNIT: 'wildfireOrgUnits'
WILDFIRE_ORG_UNIT: 'wildfireOrgUnits',
REPORTING_PERIOD_CODE: 'reportingPeriodCodes'
}

export const ProjectTypeCodes = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,5 @@ private CodeTables() {}
public static final String EVALUATION_CRITERIA_CODE = "evaluationCriteriaCodes";
public static final String PROJECT_STATUS_CODE = "projectStatusCodes";
public static final String WILDFIRE_ORG_UNIT = "wildfireOrgUnits";
public static final String REPORTING_PERIOD_CODE = "reportingPeriodCodes";
}
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ public ResponseEntity<CollectionModel<?>> getCodes(@PathVariable("codeTable") St
case CodeTables.EVALUATION_CRITERIA_CODE -> result = codesService.getAllEvaluationCriteriaCodes();
case CodeTables.PROJECT_STATUS_CODE -> result = codesService.getAllProjectStatusCodes();
case CodeTables.WILDFIRE_ORG_UNIT -> result = codesService.getAllWildfireOrgUnits();
case CodeTables.REPORTING_PERIOD_CODE -> result = codesService.getAllReportingPeriodCodes();

default -> {
log.error("Invalid code table: {}", codeTable);
Expand Down Expand Up @@ -166,6 +167,7 @@ private CommonModel<?> fetchCodeById(String codeTable, String id) throws Service
case CodeTables.EVALUATION_CRITERIA_CODE -> codesService.getEvaluationCriteriaCodeById(id);
case CodeTables.PROJECT_STATUS_CODE -> codesService.getProjectStatusCodeById(id);
case CodeTables.WILDFIRE_ORG_UNIT -> codesService.getWildfireOrgUnitById(id);
case CodeTables.REPORTING_PERIOD_CODE -> codesService.getReportingPeriodCodeById(id);
default -> null;
};
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package ca.bc.gov.nrs.wfprev.data.assemblers;

import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;
import org.springframework.hateoas.CollectionModel;
import org.springframework.hateoas.server.mvc.RepresentationModelAssemblerSupport;
import org.springframework.stereotype.Component;
import ca.bc.gov.nrs.wfprev.common.enums.CodeTables;
import ca.bc.gov.nrs.wfprev.controllers.CodesController;
import ca.bc.gov.nrs.wfprev.data.entities.ReportingPeriodCodeEntity;
import ca.bc.gov.nrs.wfprev.data.models.ReportingPeriodCodeModel;

@Component
public class ReportingPeriodCodeResourceAssembler extends RepresentationModelAssemblerSupport<ReportingPeriodCodeEntity, ReportingPeriodCodeModel> {

public ReportingPeriodCodeResourceAssembler() {
super(CodesController.class, ReportingPeriodCodeModel.class);
}

public ReportingPeriodCodeEntity toEntity(ReportingPeriodCodeModel resource) {
if (resource == null) {
return null;
}
ReportingPeriodCodeEntity entity = new ReportingPeriodCodeEntity();

entity.setReportingPeriodCode(resource.getReportingPeriodCode());
entity.setDescription(resource.getDescription());
entity.setDisplayOrder(resource.getDisplayOrder());
entity.setEffectiveDate(resource.getEffectiveDate());
entity.setExpiryDate(resource.getExpiryDate());
entity.setRevisionCount(resource.getRevisionCount());
entity.setCreateUser(resource.getCreateUser());
entity.setCreateDate(resource.getCreateDate());
entity.setUpdateUser(resource.getUpdateUser());
entity.setUpdateDate(resource.getUpdateDate());

return entity;
}

@Override
public ReportingPeriodCodeModel toModel(ReportingPeriodCodeEntity entity) {
ReportingPeriodCodeModel resource = instantiateModel(entity);

resource.add(linkTo(
methodOn(CodesController.class)
.getCodeById(CodeTables.REPORTING_PERIOD_CODE, entity.getReportingPeriodCode()))
.withSelfRel());

resource.setReportingPeriodCode(entity.getReportingPeriodCode());
resource.setDescription(entity.getDescription());
resource.setDisplayOrder(entity.getDisplayOrder());
resource.setEffectiveDate(entity.getEffectiveDate());
resource.setExpiryDate(entity.getExpiryDate());
resource.setRevisionCount(entity.getRevisionCount());
resource.setCreateUser(entity.getCreateUser());
resource.setCreateDate(entity.getCreateDate());
resource.setUpdateUser(entity.getUpdateUser());
resource.setUpdateDate(entity.getUpdateDate());

return resource;
}

@Override
public CollectionModel<ReportingPeriodCodeModel> toCollectionModel(Iterable<? extends ReportingPeriodCodeEntity> entities)
{
CollectionModel<ReportingPeriodCodeModel> resources = super.toCollectionModel(entities);

resources.add(linkTo(methodOn(CodesController.class).getCodes(CodeTables.REPORTING_PERIOD_CODE)).withSelfRel());

return resources;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package ca.bc.gov.nrs.wfprev.data.entities;

import java.io.Serializable;
import java.util.Date;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import jakarta.persistence.Id;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import jakarta.persistence.Version;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

@Entity
@Table(name = "reporting_period_code", schema = "wfprev")
@JsonIgnoreProperties(ignoreUnknown = false)
@Data
@EqualsAndHashCode(callSuper = false)
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ReportingPeriodCodeEntity implements Serializable {

@Id
@Column(name = "reporting_period_code", length = 10)
@NotNull
private String reportingPeriodCode;

@NotNull
@Column(name = "description", length = 200)
private String description;

@Column(name = "display_order")
private Integer displayOrder;

@NotNull
@Column(name = "effective_date")
private Date effectiveDate;

@NotNull
@Column(name = "expiry_date")
private Date expiryDate;

@Version
@Column(name = "revision_count", precision = 10, nullable = false)
private Integer revisionCount;

@CreatedBy
@Column(name = "create_user", length = 64, nullable = false)
private String createUser;

@CreatedDate
@Column(name = "create_date", nullable = false, columnDefinition = "DATE DEFAULT CURRENT_TIMESTAMP")
private Date createDate;

@LastModifiedBy
@Column(name = "update_user", length = 64, nullable = false)
private String updateUser;

@LastModifiedDate
@Column(name = "update_date", nullable = false, columnDefinition = "DATE DEFAULT CURRENT_TIMESTAMP")
private Date updateDate;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package ca.bc.gov.nrs.wfprev.data.models;

import java.util.Date;

import org.springframework.hateoas.server.core.Relation;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonRootName;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import ca.bc.gov.nrs.wfprev.common.entities.CommonModel;

@Data
@EqualsAndHashCode(callSuper = false)
@JsonRootName(value = "reportingPeriodCode")
@Relation(collectionRelation = "reportingPeriodCode")
@JsonInclude(Include.NON_NULL)
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ReportingPeriodCodeModel extends CommonModel<ReportingPeriodCodeModel> {
private String reportingPeriodCode;
private String description;
private Integer displayOrder;
private Date effectiveDate;
private Date expiryDate;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package ca.bc.gov.nrs.wfprev.data.repositories;

import org.springframework.data.rest.core.annotation.RepositoryRestResource;
import ca.bc.gov.nrs.wfprev.common.repository.CommonRepository;
import ca.bc.gov.nrs.wfprev.data.entities.ReportingPeriodCodeEntity;

@RepositoryRestResource(exported = false)
public interface ReportingPeriodCodeRepository extends CommonRepository<ReportingPeriodCodeEntity, String> {

}
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@ public class CodesService implements CommonService {
private final ProjectStatusCodeResourceAssembler projectStatusCodeResourceAssembler;
private final WildfireOrgUnitRepository wildfireOrgUnitRepository;
private final WildfireOrgUnitResourceAssembler wildfireOrgUnitResourceAssembler;
private final ReportingPeriodCodeRepository reportingPeriodCodeRepository;
private final ReportingPeriodCodeResourceAssembler reportingPeriodCodeResourceAssembler;


public CodesService(ForestAreaCodeRepository forestAreaCodeRepository, ForestAreaCodeResourceAssembler forestAreaCodeResourceAssembler,
Expand All @@ -89,7 +91,8 @@ public CodesService(ForestAreaCodeRepository forestAreaCodeRepository, ForestAre
SilvicultureMethodCodeResourceAssembler silvicultureMethodCodeResourceAssembler, SilvicultureMethodCodeRepository silvicultureMethodCodeRepository, SilvicultureTechniqueCodeResourceAssembler silvicultureTechniqueCodeResourceAssembler, SilvicultureTechniqueCodeRepository silvicultureTechniqueCodeRepository,
ProposalTypeCodeRepository proposalTypeCodeRepository, ProposalTypeCodeResourceAssembler proposalTypeCodeResourceAssembler, WUIRiskClassCodeRepository wuiRiskClassCodeRepository, WUIRiskClassCodeResourceAssembler wuiRiskClassCodeResourceAssembler,
EvaluationCriteriaCodeRepository evaluationCriteriaCodeRepository, EvaluationCriteriaCodeResourceAssembler evaluationCriteriaCodeResourceAssembler, ProjectStatusCodeRepository projectStatusCodeRepository, ProjectStatusCodeResourceAssembler projectStatusCodeResourceAssembler,
WildfireOrgUnitRepository wildfireOrgUnitRepository, WildfireOrgUnitResourceAssembler wildfireOrgUnitResourceAssembler) {
WildfireOrgUnitRepository wildfireOrgUnitRepository, WildfireOrgUnitResourceAssembler wildfireOrgUnitResourceAssembler,
ReportingPeriodCodeRepository reportingPeriodCodeRepository, ReportingPeriodCodeResourceAssembler reportingPeriodCodeResourceAssembler) {
this.forestAreaCodeRepository = forestAreaCodeRepository;
this.forestAreaCodeResourceAssembler = forestAreaCodeResourceAssembler;
this.generalScopeCodeRepository = generalScopeCodeRepository;
Expand Down Expand Up @@ -142,6 +145,8 @@ public CodesService(ForestAreaCodeRepository forestAreaCodeRepository, ForestAre
this.projectStatusCodeResourceAssembler = projectStatusCodeResourceAssembler;
this.wildfireOrgUnitRepository = wildfireOrgUnitRepository;
this.wildfireOrgUnitResourceAssembler = wildfireOrgUnitResourceAssembler;
this.reportingPeriodCodeRepository = reportingPeriodCodeRepository;
this.reportingPeriodCodeResourceAssembler = reportingPeriodCodeResourceAssembler;
}

/**
Expand Down Expand Up @@ -645,5 +650,22 @@ public WildfireOrgUnitModel getWildfireOrgUnitById(String id) throws ServiceExce
}
}

public CollectionModel<ReportingPeriodCodeModel> getAllReportingPeriodCodes() throws ServiceException {
try {
List<ReportingPeriodCodeEntity> entities = reportingPeriodCodeRepository.findAll();
return reportingPeriodCodeResourceAssembler.toCollectionModel(entities);
} catch (Exception e) {
throw new ServiceException(e.getLocalizedMessage(), e);
}
}

public ReportingPeriodCodeModel getReportingPeriodCodeById(String id) throws ServiceException {
try {
return reportingPeriodCodeRepository.findById(id).map(reportingPeriodCodeResourceAssembler::toModel).orElse(null);
} catch (Exception e) {
throw new ServiceException(e.getLocalizedMessage(), e);
}
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,13 @@
import ca.bc.gov.nrs.wfprev.data.models.PlanFiscalStatusCodeModel;
import ca.bc.gov.nrs.wfprev.data.models.ProjectStatusCodeModel;
import ca.bc.gov.nrs.wfprev.data.models.ProjectTypeCodeModel;
import ca.bc.gov.nrs.wfprev.data.models.ProposalTypeCodeModel;
import ca.bc.gov.nrs.wfprev.data.models.ReportingPeriodCodeModel;
import ca.bc.gov.nrs.wfprev.data.models.RiskRatingCodeModel;
import ca.bc.gov.nrs.wfprev.data.models.SilvicultureBaseCodeModel;
import ca.bc.gov.nrs.wfprev.data.models.SilvicultureMethodCodeModel;
import ca.bc.gov.nrs.wfprev.data.models.SilvicultureTechniqueCodeModel;
import ca.bc.gov.nrs.wfprev.data.models.SourceObjectNameCodeModel;
import ca.bc.gov.nrs.wfprev.data.models.ProposalTypeCodeModel;
import ca.bc.gov.nrs.wfprev.data.models.WUIRiskClassRankModel;
import ca.bc.gov.nrs.wfprev.data.models.WildfireOrgUnitModel;
import ca.bc.gov.nrs.wfprev.services.CodesService;
Expand Down Expand Up @@ -86,6 +87,7 @@ void testGetAllCodes() throws Exception {
testGetWuiRiskClassCodes();
testGetEvaluationCriteriaCodes();
testGetWildfireOrgUnits();
testGetReportingPeriodCodes();
}

void testGetForestAreaCodes() throws Exception {
Expand Down Expand Up @@ -473,6 +475,13 @@ void testGetWildfireOrgUnits() throws Exception {
.andExpect(status().isOk());
}

void testGetReportingPeriodCodes() throws Exception {
when(codesService.getAllReportingPeriodCodes()).thenReturn(CollectionModel.empty());
mockMvc.perform(get("/codes/{codeTable}", CodeTables.REPORTING_PERIOD_CODE)
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk());
}

@Test
@WithMockUser
void testGetCodesById() throws Exception {
Expand Down Expand Up @@ -881,19 +890,18 @@ void testGetProjectTypeAreaCodeById_VerifyServiceCall() throws Exception {
verifyNoMoreInteractions(codesService);
}

@Test
@WithMockUser
void testGetProposalTypeCodeById_VerifyServiceCall() throws Exception {
String id = UUID.randomUUID().toString();

mockMvc.perform(get("/codes/{codeTable}/{id}", CodeTables.PROPOSAL_TYPE_CODE, id)
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isNotFound());
@Test
@WithMockUser
void testGetProposalTypeCodeById_VerifyServiceCall() throws Exception {
String id = UUID.randomUUID().toString();

verify(codesService, times(1)).getProposalTypeCodeById(id);
verifyNoMoreInteractions(codesService);
}
mockMvc.perform(get("/codes/{codeTable}/{id}", CodeTables.PROPOSAL_TYPE_CODE, id)
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isNotFound());

verify(codesService, times(1)).getProposalTypeCodeById(id);
verifyNoMoreInteractions(codesService);
}

@Test
@WithMockUser
Expand Down Expand Up @@ -1161,4 +1169,17 @@ void testGetBCParksSectionCodesById_ServiceException() throws Exception {
.andExpect(status().isInternalServerError());
}

@Test
@WithMockUser
void testGetReportingPeriodCodeById_VerifyServiceCall() throws Exception {
String id = UUID.randomUUID().toString();
when(codesService.getReportingPeriodCodeById(id)).thenReturn(null);

mockMvc.perform(get("/codes/{codeTable}/{id}", CodeTables.REPORTING_PERIOD_CODE, id)
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isNotFound());

verify(codesService, times(1)).getReportingPeriodCodeById(id);
}

}
Loading
Loading