Skip to content

Commit 2d8ce5c

Browse files
authored
Merge branch 'main' into chore/update-dimesion-flags
2 parents 032e1f1 + d59ef9e commit 2d8ce5c

99 files changed

Lines changed: 6789 additions & 37 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

admin/backend/src/recreation-resources/dtos/recreation-resource-detail.dto.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,22 @@ export class RecreationResourceDetailDto extends BaseRecreationResourceDto {
380380
})
381381
project_established_date?: Date;
382382

383+
@ApiProperty({
384+
description: 'Date of the last recreation inspection for the resource',
385+
example: '2023-08-15',
386+
required: false,
387+
type: Date,
388+
})
389+
last_rec_inspection_date?: Date;
390+
391+
@ApiProperty({
392+
description: 'Date of the last hazard tree assessment for the resource',
393+
example: '2023-08-15',
394+
required: false,
395+
type: Date,
396+
})
397+
last_hzrd_tree_assess_date?: Date;
398+
383399
@ApiProperty({
384400
description: 'Recreation control access code',
385401
example: 'G',

admin/backend/src/recreation-resources/recreation-resource.select.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ const _recreationResourceSelect = {
105105
maintenance_standard_code: true,
106106
right_of_way: true,
107107
rec_status_code: true,
108+
last_rec_inspection_date: true,
109+
last_hzrd_tree_assess_date: true,
108110
recreation_maintenance_standard_code: {
109111
select: {
110112
description: true,

admin/backend/src/recreation-resources/utils/formatRecreationResourceDetailResults.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,8 @@ export function formatRecreationResourceDetailResults(
133133
site_point_geometry: spatialFeatures?.site_point_geometry ?? undefined,
134134
recreation_district: recreationDistrict,
135135
project_established_date: result.project_established_date ?? undefined,
136+
last_rec_inspection_date: result.last_rec_inspection_date ?? undefined,
137+
last_hzrd_tree_assess_date: result.last_hzrd_tree_assess_date ?? undefined,
136138
recreation_control_access_code: {
137139
recreation_control_access_code:
138140
recreation_control_access_code?.recreation_control_access_code ?? '',

admin/backend/src/resource-asset/dto/resource-asset-repair.dto.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export class BaseRecreationAssetRepairDto {
2121
'Remedial repair classification code (FK to recreation_remed_repair_code)',
2222
example: 'RC',
2323
maxLength: 2,
24+
type: String,
2425
nullable: true,
2526
})
2627
@IsString()
@@ -31,6 +32,7 @@ export class BaseRecreationAssetRepairDto {
3132
@ApiPropertyOptional({
3233
description: 'Estimated financial cost for repair',
3334
example: 450.0,
35+
type: Number,
3436
nullable: true,
3537
})
3638
@IsNumber()
@@ -41,6 +43,7 @@ export class BaseRecreationAssetRepairDto {
4143
@ApiPropertyOptional({
4244
description: 'Final actual cost incurred',
4345
example: 485.5,
46+
type: Number,
4447
nullable: true,
4548
})
4649
@IsNumber()
@@ -51,6 +54,7 @@ export class BaseRecreationAssetRepairDto {
5154
@ApiPropertyOptional({
5255
description: 'Date completed (YYYY-MM-DD)',
5356
example: '2026-08-10',
57+
type: String,
5458
nullable: true,
5559
})
5660
@IsDateString()
@@ -61,6 +65,7 @@ export class BaseRecreationAssetRepairDto {
6165
description: 'Urgency/priority of repair',
6266
example: 'High',
6367
maxLength: 25,
68+
type: String,
6469
nullable: true,
6570
})
6671
@IsString()
@@ -72,6 +77,7 @@ export class BaseRecreationAssetRepairDto {
7277
description: 'Trail segment start reference',
7378
example: 'KM 0.5',
7479
maxLength: 50,
80+
type: String,
7581
nullable: true,
7682
})
7783
@IsString()
@@ -83,6 +89,7 @@ export class BaseRecreationAssetRepairDto {
8389
description: 'Trail segment end reference',
8490
example: 'KM 1.2',
8591
maxLength: 50,
92+
type: String,
8693
nullable: true,
8794
})
8895
@IsString()
@@ -133,24 +140,34 @@ export class RecreationAssetRepairDto extends BaseRecreationAssetRepairDto {
133140
@Type(() => Number)
134141
asset_id: number;
135142

136-
@ApiPropertyOptional({ description: 'Timestamp when record was created' })
143+
@ApiPropertyOptional({
144+
description: 'Timestamp when record was created',
145+
type: String,
146+
nullable: true,
147+
})
137148
@IsOptional()
138149
created_at?: Date | string | null;
139150

140151
@ApiPropertyOptional({
141152
description: 'User identifier who created the record',
153+
type: String,
154+
nullable: true,
142155
})
143156
@IsOptional()
144157
created_by?: string | null;
145158

146159
@ApiPropertyOptional({
147160
description: 'Timestamp when record was last updated',
161+
type: String,
162+
nullable: true,
148163
})
149164
@IsOptional()
150165
updated_at?: Date | string | null;
151166

152167
@ApiPropertyOptional({
153168
description: 'User identifier who last updated the record',
169+
type: String,
170+
nullable: true,
154171
})
155172
@IsOptional()
156173
updated_by?: string | null;

admin/backend/src/resource-asset/dto/resource-asset.dto.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export class BaseRecreationAssetDto {
2525
@ApiPropertyOptional({
2626
description: 'ID of the parent container asset',
2727
example: 100,
28+
type: Number,
2829
nullable: true,
2930
})
3031
@IsInt()
@@ -35,6 +36,7 @@ export class BaseRecreationAssetDto {
3536
@ApiPropertyOptional({
3637
description: 'Physical barcode or field tag',
3738
example: 'CS-012',
39+
type: String,
3840
nullable: true,
3941
})
4042
@IsString()
@@ -63,6 +65,7 @@ export class BaseRecreationAssetDto {
6365
@ApiPropertyOptional({
6466
description: 'Optional display name',
6567
example: 'Campsite #12 Table',
68+
type: String,
6669
nullable: true,
6770
})
6871
@IsString()
@@ -73,6 +76,7 @@ export class BaseRecreationAssetDto {
7376
@ApiPropertyOptional({
7477
description: 'Free-text note',
7578
example: 'Located near river',
79+
type: String,
7680
nullable: true,
7781
})
7882
@IsString()
@@ -82,6 +86,7 @@ export class BaseRecreationAssetDto {
8286
@ApiPropertyOptional({
8387
description: 'Legacy aggregate structure reference ID',
8488
example: 'LEG-884',
89+
type: String,
8590
nullable: true,
8691
})
8792
@IsString()
@@ -92,6 +97,7 @@ export class BaseRecreationAssetDto {
9297
@ApiPropertyOptional({
9398
description: 'Total length in metres',
9499
example: 12.5,
100+
type: Number,
95101
nullable: true,
96102
})
97103
@IsNumber()
@@ -102,6 +108,7 @@ export class BaseRecreationAssetDto {
102108
@ApiPropertyOptional({
103109
description: 'Total width in metres',
104110
example: 3.0,
111+
type: Number,
105112
nullable: true,
106113
})
107114
@IsNumber()
@@ -112,6 +119,7 @@ export class BaseRecreationAssetDto {
112119
@ApiPropertyOptional({
113120
description: 'Total area in square metres',
114121
example: 37.5,
122+
type: Number,
115123
nullable: true,
116124
})
117125
@IsNumber()
@@ -122,6 +130,7 @@ export class BaseRecreationAssetDto {
122130
@ApiPropertyOptional({
123131
description: 'Default monetary value',
124132
example: 1500.0,
133+
type: Number,
125134
nullable: true,
126135
})
127136
@IsNumber()
@@ -132,6 +141,7 @@ export class BaseRecreationAssetDto {
132141
@ApiPropertyOptional({
133142
description: 'Actual monetary value',
134143
example: 1800.5,
144+
type: Number,
135145
nullable: true,
136146
})
137147
@IsNumber()
@@ -142,6 +152,7 @@ export class BaseRecreationAssetDto {
142152
@ApiPropertyOptional({
143153
description: 'Date the asset was installed (YYYY-MM-DD)',
144154
example: '2023-05-15',
155+
type: String,
145156
nullable: true,
146157
})
147158
@IsDateString()
@@ -174,13 +185,15 @@ export class RecreationAssetDto extends BaseRecreationAssetDto {
174185

175186
@ApiPropertyOptional({
176187
description: 'User identifier who last updated the record',
188+
type: String,
177189
nullable: true,
178190
})
179191
@IsOptional()
180192
updated_by?: string | null;
181193

182194
@ApiPropertyOptional({
183195
description: 'Timestamp when record was last updated',
196+
type: String,
184197
nullable: true,
185198
})
186199
@IsOptional()
@@ -189,6 +202,7 @@ export class RecreationAssetDto extends BaseRecreationAssetDto {
189202
@ApiPropertyOptional({
190203
description: 'Point geometry type code, if this asset has a location',
191204
example: 'PT',
205+
type: String,
192206
nullable: true,
193207
})
194208
@IsOptional()
@@ -197,6 +211,7 @@ export class RecreationAssetDto extends BaseRecreationAssetDto {
197211
@ApiPropertyOptional({
198212
description: 'Latitude in WGS84 (derived from recreation_asset_geom)',
199213
example: 49.94212,
214+
type: Number,
200215
nullable: true,
201216
})
202217
@IsOptional()
@@ -205,6 +220,7 @@ export class RecreationAssetDto extends BaseRecreationAssetDto {
205220
@ApiPropertyOptional({
206221
description: 'Longitude in WGS84 (derived from recreation_asset_geom)',
207222
example: -123.03604,
223+
type: Number,
208224
nullable: true,
209225
})
210226
@IsOptional()
@@ -258,7 +274,7 @@ export class FindAllAssetsQueryDto {
258274
@ApiPropertyOptional({ description: 'Number of items per page', default: 10 })
259275
@IsInt()
260276
@Min(1)
261-
@Max(100)
277+
@Max(500)
262278
@Type(() => Number)
263279
@IsOptional()
264280
limit?: number = 10;

admin/backend/src/resource-asset/resource-asset.controller.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import {
2525
ApiBearerAuth,
2626
ApiOperation,
2727
ApiParam,
28+
ApiQuery,
2829
ApiResponse,
2930
ApiTags,
3031
} from '@nestjs/swagger';
@@ -103,12 +104,6 @@ export class RecreationAssetController {
103104
summary: 'Retrieve recreation assets with filtering and pagination',
104105
operationId: 'getPaginatedRecreationAssets',
105106
})
106-
@ApiParam({
107-
name: 'include_repair',
108-
description: 'Include repair records',
109-
type: Boolean,
110-
required: false,
111-
})
112107
@ApiResponse({
113108
status: HttpStatus.OK,
114109
type: PaginatedRecreationAssetDto,
@@ -185,7 +180,7 @@ export class RecreationAssetController {
185180
operationId: 'getRecreationAssetById',
186181
})
187182
@ApiParam({ name: 'id', description: 'Asset ID', type: Number })
188-
@ApiParam({
183+
@ApiQuery({
189184
name: 'include_repair',
190185
description: 'Include repair records',
191186
type: Boolean,

admin/backend/test/resource-asset/resource-asset.controller.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ describe('RecreationAssetController', () => {
302302
});
303303

304304
describe('bulkCreateRepairs', () => {
305-
it('should delegate to service.bulkUpsertRepairs with the bulk repair DTO', async () => {
305+
it('should delegate to service.bulkInsertRepairs with the bulk repair DTO', async () => {
306306
const dto: RecreationAssetBulkRepairDto = {
307307
recreation_remed_repair_code: 'REPAIR_ALL',
308308
completed_date: '2026-08-13',

admin/backend/test/resource-asset/service/resource-asset.service.spec.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1249,7 +1249,6 @@ describe('RecreationAssetService', () => {
12491249

12501250
it('should handle null completed_date during bulk upsert', async () => {
12511251
prismaMock.recreation_asset.count.mockResolvedValue(1);
1252-
prismaMock.recreation_asset_repair.findFirst.mockResolvedValue(null);
12531252

12541253
const dto = {
12551254
recreation_remed_repair_code: 'BULK_REPAIR',

admin/frontend/src/components/help-icon/HelpIcon.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import { useSyncExternalStore } from 'react';
1+
import { ReactNode, useSyncExternalStore } from 'react';
22
import { OverlayTrigger, Tooltip } from 'react-bootstrap';
33
import './HelpIcon.scss';
44

55
export interface HelpIconProps {
6-
/** Tooltip text to display on click */
7-
text: string;
6+
/** Tooltip content to display on click */
7+
text: ReactNode;
88
/** Unique id used to link the tooltip (should be unique on the page) */
99
id: string;
1010
}

admin/frontend/src/components/sidebar/Sidebar.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
background-color: $colorIceBlue;
1717
}
1818

19-
.collapsed {
19+
.sidebar.collapsed {
2020
width: 72px;
2121
}
2222

0 commit comments

Comments
 (0)