Skip to content

Commit c40c4e5

Browse files
authored
Add code table API for reporting period (#1105)
1 parent b1321ed commit c40c4e5

File tree

10 files changed

+308
-16
lines changed

10 files changed

+308
-16
lines changed

client/wfprev-war/src/main/angular/src/app/utils/constants.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ export const CodeTableKeys = {
6464
SECONDARY_OBJECTIVE_TYPE_CODE: 'secondaryObjectiveTypeCode',
6565
WILDFIRE_ORG_UNIT: 'wildfireOrgUnit',
6666
WILDFIRE_ORG_UNIT_ID: 'wildfireOrgUnitId',
67+
REPORTING_PERIOD_CODE: 'reportingPeriodCode',
6768
};
6869

6970
export const CodeTableNames = {
@@ -77,7 +78,8 @@ export const CodeTableNames = {
7778
BC_PARKS_REGION_CODE: 'bcParksRegionCodes',
7879
BC_PARKS_SECTION_CODE: 'bcParksSectionCodes',
7980
OBJECTIVE_TYPE_CODE: 'objectiveTypeCodes',
80-
WILDFIRE_ORG_UNIT: 'wildfireOrgUnits'
81+
WILDFIRE_ORG_UNIT: 'wildfireOrgUnits',
82+
REPORTING_PERIOD_CODE: 'reportingPeriodCodes'
8183
}
8284

8385
export const ProjectTypeCodes = {

server/wfprev-api/src/main/java/ca/bc/gov/nrs/wfprev/common/enums/CodeTables.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,5 @@ private CodeTables() {}
2929
public static final String EVALUATION_CRITERIA_CODE = "evaluationCriteriaCodes";
3030
public static final String PROJECT_STATUS_CODE = "projectStatusCodes";
3131
public static final String WILDFIRE_ORG_UNIT = "wildfireOrgUnits";
32+
public static final String REPORTING_PERIOD_CODE = "reportingPeriodCodes";
3233
}

server/wfprev-api/src/main/java/ca/bc/gov/nrs/wfprev/controllers/CodesController.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ public ResponseEntity<CollectionModel<?>> getCodes(@PathVariable("codeTable") St
7373
case CodeTables.EVALUATION_CRITERIA_CODE -> result = codesService.getAllEvaluationCriteriaCodes();
7474
case CodeTables.PROJECT_STATUS_CODE -> result = codesService.getAllProjectStatusCodes();
7575
case CodeTables.WILDFIRE_ORG_UNIT -> result = codesService.getAllWildfireOrgUnits();
76+
case CodeTables.REPORTING_PERIOD_CODE -> result = codesService.getAllReportingPeriodCodes();
7677

7778
default -> {
7879
log.error("Invalid code table: {}", codeTable);
@@ -166,6 +167,7 @@ private CommonModel<?> fetchCodeById(String codeTable, String id) throws Service
166167
case CodeTables.EVALUATION_CRITERIA_CODE -> codesService.getEvaluationCriteriaCodeById(id);
167168
case CodeTables.PROJECT_STATUS_CODE -> codesService.getProjectStatusCodeById(id);
168169
case CodeTables.WILDFIRE_ORG_UNIT -> codesService.getWildfireOrgUnitById(id);
170+
case CodeTables.REPORTING_PERIOD_CODE -> codesService.getReportingPeriodCodeById(id);
169171
default -> null;
170172
};
171173
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package ca.bc.gov.nrs.wfprev.data.assemblers;
2+
3+
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
4+
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;
5+
import org.springframework.hateoas.CollectionModel;
6+
import org.springframework.hateoas.server.mvc.RepresentationModelAssemblerSupport;
7+
import org.springframework.stereotype.Component;
8+
import ca.bc.gov.nrs.wfprev.common.enums.CodeTables;
9+
import ca.bc.gov.nrs.wfprev.controllers.CodesController;
10+
import ca.bc.gov.nrs.wfprev.data.entities.ReportingPeriodCodeEntity;
11+
import ca.bc.gov.nrs.wfprev.data.models.ReportingPeriodCodeModel;
12+
13+
@Component
14+
public class ReportingPeriodCodeResourceAssembler extends RepresentationModelAssemblerSupport<ReportingPeriodCodeEntity, ReportingPeriodCodeModel> {
15+
16+
public ReportingPeriodCodeResourceAssembler() {
17+
super(CodesController.class, ReportingPeriodCodeModel.class);
18+
}
19+
20+
public ReportingPeriodCodeEntity toEntity(ReportingPeriodCodeModel resource) {
21+
if (resource == null) {
22+
return null;
23+
}
24+
ReportingPeriodCodeEntity entity = new ReportingPeriodCodeEntity();
25+
26+
entity.setReportingPeriodCode(resource.getReportingPeriodCode());
27+
entity.setDescription(resource.getDescription());
28+
entity.setDisplayOrder(resource.getDisplayOrder());
29+
entity.setEffectiveDate(resource.getEffectiveDate());
30+
entity.setExpiryDate(resource.getExpiryDate());
31+
entity.setRevisionCount(resource.getRevisionCount());
32+
entity.setCreateUser(resource.getCreateUser());
33+
entity.setCreateDate(resource.getCreateDate());
34+
entity.setUpdateUser(resource.getUpdateUser());
35+
entity.setUpdateDate(resource.getUpdateDate());
36+
37+
return entity;
38+
}
39+
40+
@Override
41+
public ReportingPeriodCodeModel toModel(ReportingPeriodCodeEntity entity) {
42+
ReportingPeriodCodeModel resource = instantiateModel(entity);
43+
44+
resource.add(linkTo(
45+
methodOn(CodesController.class)
46+
.getCodeById(CodeTables.REPORTING_PERIOD_CODE, entity.getReportingPeriodCode()))
47+
.withSelfRel());
48+
49+
resource.setReportingPeriodCode(entity.getReportingPeriodCode());
50+
resource.setDescription(entity.getDescription());
51+
resource.setDisplayOrder(entity.getDisplayOrder());
52+
resource.setEffectiveDate(entity.getEffectiveDate());
53+
resource.setExpiryDate(entity.getExpiryDate());
54+
resource.setRevisionCount(entity.getRevisionCount());
55+
resource.setCreateUser(entity.getCreateUser());
56+
resource.setCreateDate(entity.getCreateDate());
57+
resource.setUpdateUser(entity.getUpdateUser());
58+
resource.setUpdateDate(entity.getUpdateDate());
59+
60+
return resource;
61+
}
62+
63+
@Override
64+
public CollectionModel<ReportingPeriodCodeModel> toCollectionModel(Iterable<? extends ReportingPeriodCodeEntity> entities)
65+
{
66+
CollectionModel<ReportingPeriodCodeModel> resources = super.toCollectionModel(entities);
67+
68+
resources.add(linkTo(methodOn(CodesController.class).getCodes(CodeTables.REPORTING_PERIOD_CODE)).withSelfRel());
69+
70+
return resources;
71+
}
72+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package ca.bc.gov.nrs.wfprev.data.entities;
2+
3+
import java.io.Serializable;
4+
import java.util.Date;
5+
import org.springframework.data.annotation.CreatedBy;
6+
import org.springframework.data.annotation.CreatedDate;
7+
import org.springframework.data.annotation.LastModifiedBy;
8+
import org.springframework.data.annotation.LastModifiedDate;
9+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
10+
import jakarta.persistence.Id;
11+
import jakarta.persistence.Column;
12+
import jakarta.persistence.Entity;
13+
import jakarta.persistence.Table;
14+
import jakarta.persistence.Version;
15+
import jakarta.validation.constraints.NotNull;
16+
import lombok.AllArgsConstructor;
17+
import lombok.Builder;
18+
import lombok.Data;
19+
import lombok.EqualsAndHashCode;
20+
import lombok.NoArgsConstructor;
21+
22+
@Entity
23+
@Table(name = "reporting_period_code", schema = "wfprev")
24+
@JsonIgnoreProperties(ignoreUnknown = false)
25+
@Data
26+
@EqualsAndHashCode(callSuper = false)
27+
@Builder
28+
@AllArgsConstructor
29+
@NoArgsConstructor
30+
public class ReportingPeriodCodeEntity implements Serializable {
31+
32+
@Id
33+
@Column(name = "reporting_period_code", length = 10)
34+
@NotNull
35+
private String reportingPeriodCode;
36+
37+
@NotNull
38+
@Column(name = "description", length = 200)
39+
private String description;
40+
41+
@Column(name = "display_order")
42+
private Integer displayOrder;
43+
44+
@NotNull
45+
@Column(name = "effective_date")
46+
private Date effectiveDate;
47+
48+
@NotNull
49+
@Column(name = "expiry_date")
50+
private Date expiryDate;
51+
52+
@Version
53+
@Column(name = "revision_count", precision = 10, nullable = false)
54+
private Integer revisionCount;
55+
56+
@CreatedBy
57+
@Column(name = "create_user", length = 64, nullable = false)
58+
private String createUser;
59+
60+
@CreatedDate
61+
@Column(name = "create_date", nullable = false, columnDefinition = "DATE DEFAULT CURRENT_TIMESTAMP")
62+
private Date createDate;
63+
64+
@LastModifiedBy
65+
@Column(name = "update_user", length = 64, nullable = false)
66+
private String updateUser;
67+
68+
@LastModifiedDate
69+
@Column(name = "update_date", nullable = false, columnDefinition = "DATE DEFAULT CURRENT_TIMESTAMP")
70+
private Date updateDate;
71+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package ca.bc.gov.nrs.wfprev.data.models;
2+
3+
import java.util.Date;
4+
5+
import org.springframework.hateoas.server.core.Relation;
6+
7+
import com.fasterxml.jackson.annotation.JsonInclude;
8+
import com.fasterxml.jackson.annotation.JsonInclude.Include;
9+
import com.fasterxml.jackson.annotation.JsonRootName;
10+
11+
import lombok.AllArgsConstructor;
12+
import lombok.Builder;
13+
import lombok.Data;
14+
import lombok.EqualsAndHashCode;
15+
import lombok.NoArgsConstructor;
16+
import ca.bc.gov.nrs.wfprev.common.entities.CommonModel;
17+
18+
@Data
19+
@EqualsAndHashCode(callSuper = false)
20+
@JsonRootName(value = "reportingPeriodCode")
21+
@Relation(collectionRelation = "reportingPeriodCode")
22+
@JsonInclude(Include.NON_NULL)
23+
@Builder
24+
@AllArgsConstructor
25+
@NoArgsConstructor
26+
public class ReportingPeriodCodeModel extends CommonModel<ReportingPeriodCodeModel> {
27+
private String reportingPeriodCode;
28+
private String description;
29+
private Integer displayOrder;
30+
private Date effectiveDate;
31+
private Date expiryDate;
32+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package ca.bc.gov.nrs.wfprev.data.repositories;
2+
3+
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
4+
import ca.bc.gov.nrs.wfprev.common.repository.CommonRepository;
5+
import ca.bc.gov.nrs.wfprev.data.entities.ReportingPeriodCodeEntity;
6+
7+
@RepositoryRestResource(exported = false)
8+
public interface ReportingPeriodCodeRepository extends CommonRepository<ReportingPeriodCodeEntity, String> {
9+
10+
}

server/wfprev-api/src/main/java/ca/bc/gov/nrs/wfprev/services/CodesService.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ public class CodesService implements CommonService {
7171
private final ProjectStatusCodeResourceAssembler projectStatusCodeResourceAssembler;
7272
private final WildfireOrgUnitRepository wildfireOrgUnitRepository;
7373
private final WildfireOrgUnitResourceAssembler wildfireOrgUnitResourceAssembler;
74+
private final ReportingPeriodCodeRepository reportingPeriodCodeRepository;
75+
private final ReportingPeriodCodeResourceAssembler reportingPeriodCodeResourceAssembler;
7476

7577

7678
public CodesService(ForestAreaCodeRepository forestAreaCodeRepository, ForestAreaCodeResourceAssembler forestAreaCodeResourceAssembler,
@@ -89,7 +91,8 @@ public CodesService(ForestAreaCodeRepository forestAreaCodeRepository, ForestAre
8991
SilvicultureMethodCodeResourceAssembler silvicultureMethodCodeResourceAssembler, SilvicultureMethodCodeRepository silvicultureMethodCodeRepository, SilvicultureTechniqueCodeResourceAssembler silvicultureTechniqueCodeResourceAssembler, SilvicultureTechniqueCodeRepository silvicultureTechniqueCodeRepository,
9092
ProposalTypeCodeRepository proposalTypeCodeRepository, ProposalTypeCodeResourceAssembler proposalTypeCodeResourceAssembler, WUIRiskClassCodeRepository wuiRiskClassCodeRepository, WUIRiskClassCodeResourceAssembler wuiRiskClassCodeResourceAssembler,
9193
EvaluationCriteriaCodeRepository evaluationCriteriaCodeRepository, EvaluationCriteriaCodeResourceAssembler evaluationCriteriaCodeResourceAssembler, ProjectStatusCodeRepository projectStatusCodeRepository, ProjectStatusCodeResourceAssembler projectStatusCodeResourceAssembler,
92-
WildfireOrgUnitRepository wildfireOrgUnitRepository, WildfireOrgUnitResourceAssembler wildfireOrgUnitResourceAssembler) {
94+
WildfireOrgUnitRepository wildfireOrgUnitRepository, WildfireOrgUnitResourceAssembler wildfireOrgUnitResourceAssembler,
95+
ReportingPeriodCodeRepository reportingPeriodCodeRepository, ReportingPeriodCodeResourceAssembler reportingPeriodCodeResourceAssembler) {
9396
this.forestAreaCodeRepository = forestAreaCodeRepository;
9497
this.forestAreaCodeResourceAssembler = forestAreaCodeResourceAssembler;
9598
this.generalScopeCodeRepository = generalScopeCodeRepository;
@@ -142,6 +145,8 @@ public CodesService(ForestAreaCodeRepository forestAreaCodeRepository, ForestAre
142145
this.projectStatusCodeResourceAssembler = projectStatusCodeResourceAssembler;
143146
this.wildfireOrgUnitRepository = wildfireOrgUnitRepository;
144147
this.wildfireOrgUnitResourceAssembler = wildfireOrgUnitResourceAssembler;
148+
this.reportingPeriodCodeRepository = reportingPeriodCodeRepository;
149+
this.reportingPeriodCodeResourceAssembler = reportingPeriodCodeResourceAssembler;
145150
}
146151

147152
/**
@@ -645,5 +650,22 @@ public WildfireOrgUnitModel getWildfireOrgUnitById(String id) throws ServiceExce
645650
}
646651
}
647652

653+
public CollectionModel<ReportingPeriodCodeModel> getAllReportingPeriodCodes() throws ServiceException {
654+
try {
655+
List<ReportingPeriodCodeEntity> entities = reportingPeriodCodeRepository.findAll();
656+
return reportingPeriodCodeResourceAssembler.toCollectionModel(entities);
657+
} catch (Exception e) {
658+
throw new ServiceException(e.getLocalizedMessage(), e);
659+
}
660+
}
661+
662+
public ReportingPeriodCodeModel getReportingPeriodCodeById(String id) throws ServiceException {
663+
try {
664+
return reportingPeriodCodeRepository.findById(id).map(reportingPeriodCodeResourceAssembler::toModel).orElse(null);
665+
} catch (Exception e) {
666+
throw new ServiceException(e.getLocalizedMessage(), e);
667+
}
668+
}
669+
648670

649671
}

server/wfprev-api/src/test/java/ca/bc/gov/nrs/wfprev/CodesControllerTest.java

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,13 @@
1818
import ca.bc.gov.nrs.wfprev.data.models.PlanFiscalStatusCodeModel;
1919
import ca.bc.gov.nrs.wfprev.data.models.ProjectStatusCodeModel;
2020
import ca.bc.gov.nrs.wfprev.data.models.ProjectTypeCodeModel;
21+
import ca.bc.gov.nrs.wfprev.data.models.ProposalTypeCodeModel;
22+
import ca.bc.gov.nrs.wfprev.data.models.ReportingPeriodCodeModel;
2123
import ca.bc.gov.nrs.wfprev.data.models.RiskRatingCodeModel;
2224
import ca.bc.gov.nrs.wfprev.data.models.SilvicultureBaseCodeModel;
2325
import ca.bc.gov.nrs.wfprev.data.models.SilvicultureMethodCodeModel;
2426
import ca.bc.gov.nrs.wfprev.data.models.SilvicultureTechniqueCodeModel;
2527
import ca.bc.gov.nrs.wfprev.data.models.SourceObjectNameCodeModel;
26-
import ca.bc.gov.nrs.wfprev.data.models.ProposalTypeCodeModel;
2728
import ca.bc.gov.nrs.wfprev.data.models.WUIRiskClassRankModel;
2829
import ca.bc.gov.nrs.wfprev.data.models.WildfireOrgUnitModel;
2930
import ca.bc.gov.nrs.wfprev.services.CodesService;
@@ -86,6 +87,7 @@ void testGetAllCodes() throws Exception {
8687
testGetWuiRiskClassCodes();
8788
testGetEvaluationCriteriaCodes();
8889
testGetWildfireOrgUnits();
90+
testGetReportingPeriodCodes();
8991
}
9092

9193
void testGetForestAreaCodes() throws Exception {
@@ -473,6 +475,13 @@ void testGetWildfireOrgUnits() throws Exception {
473475
.andExpect(status().isOk());
474476
}
475477

478+
void testGetReportingPeriodCodes() throws Exception {
479+
when(codesService.getAllReportingPeriodCodes()).thenReturn(CollectionModel.empty());
480+
mockMvc.perform(get("/codes/{codeTable}", CodeTables.REPORTING_PERIOD_CODE)
481+
.contentType(MediaType.APPLICATION_JSON))
482+
.andExpect(status().isOk());
483+
}
484+
476485
@Test
477486
@WithMockUser
478487
void testGetCodesById() throws Exception {
@@ -881,19 +890,18 @@ void testGetProjectTypeAreaCodeById_VerifyServiceCall() throws Exception {
881890
verifyNoMoreInteractions(codesService);
882891
}
883892

884-
@Test
885-
@WithMockUser
886-
void testGetProposalTypeCodeById_VerifyServiceCall() throws Exception {
887-
String id = UUID.randomUUID().toString();
888-
889-
mockMvc.perform(get("/codes/{codeTable}/{id}", CodeTables.PROPOSAL_TYPE_CODE, id)
890-
.contentType(MediaType.APPLICATION_JSON))
891-
.andExpect(status().isNotFound());
893+
@Test
894+
@WithMockUser
895+
void testGetProposalTypeCodeById_VerifyServiceCall() throws Exception {
896+
String id = UUID.randomUUID().toString();
892897

893-
verify(codesService, times(1)).getProposalTypeCodeById(id);
894-
verifyNoMoreInteractions(codesService);
895-
}
898+
mockMvc.perform(get("/codes/{codeTable}/{id}", CodeTables.PROPOSAL_TYPE_CODE, id)
899+
.contentType(MediaType.APPLICATION_JSON))
900+
.andExpect(status().isNotFound());
896901

902+
verify(codesService, times(1)).getProposalTypeCodeById(id);
903+
verifyNoMoreInteractions(codesService);
904+
}
897905

898906
@Test
899907
@WithMockUser
@@ -1161,4 +1169,17 @@ void testGetBCParksSectionCodesById_ServiceException() throws Exception {
11611169
.andExpect(status().isInternalServerError());
11621170
}
11631171

1172+
@Test
1173+
@WithMockUser
1174+
void testGetReportingPeriodCodeById_VerifyServiceCall() throws Exception {
1175+
String id = UUID.randomUUID().toString();
1176+
when(codesService.getReportingPeriodCodeById(id)).thenReturn(null);
1177+
1178+
mockMvc.perform(get("/codes/{codeTable}/{id}", CodeTables.REPORTING_PERIOD_CODE, id)
1179+
.contentType(MediaType.APPLICATION_JSON))
1180+
.andExpect(status().isNotFound());
1181+
1182+
verify(codesService, times(1)).getReportingPeriodCodeById(id);
1183+
}
1184+
11641185
}

0 commit comments

Comments
 (0)