Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
aebf50d
[TM-2514] add delayed job for site
egrojMonroy Oct 8, 2025
aea3e53
[TM-2332] batch improvement for site validation
egrojMonroy Oct 8, 2025
b6f67a5
[TM-2332] remove criteria and store in historic
egrojMonroy Oct 8, 2025
5de2e73
[TM-2332] fix unit tests
egrojMonroy Oct 9, 2025
d450a57
[TM-2332] fix spike and change save validation
egrojMonroy Oct 9, 2025
051a240
[TM-2332] remove unused variable
egrojMonroy Oct 9, 2025
4606109
[TM-2332] add unit tests for coverage
egrojMonroy Oct 9, 2025
d748c04
[TM-2332] update site polygon validation status
egrojMonroy Oct 9, 2025
e871372
[TM-2332] remove any types
egrojMonroy Oct 9, 2025
b7a8e32
[TM-2332] Merge branch 'staging' into feat/TM-2332-site-validation
egrojMonroy Oct 10, 2025
68d5dd3
[TM-2332] no criteria for running all criteria
egrojMonroy Oct 10, 2025
8afcafb
[TM-2332] validation type empty array as all validations
egrojMonroy Oct 10, 2025
a6480f6
[TM-2332] delayed job isacknowledge = false
egrojMonroy Oct 10, 2025
797366f
[TM-2332] add metadata for delayed job in site validation
egrojMonroy Oct 10, 2025
3f23adf
[TM-2332] store user in delayedjob
egrojMonroy Oct 10, 2025
335cf46
[TM-2332] fix unit tests
egrojMonroy Oct 13, 2025
2c50a90
[TM-2332] remove unused logger
egrojMonroy Oct 13, 2025
0b29b7a
[TM-2332] add json:api request for POST
egrojMonroy Oct 13, 2025
cf2afee
[TM-2332] fix types in properties
egrojMonroy Oct 13, 2025
ff00643
[TM-2332] fix validations resource type
egrojMonroy Oct 13, 2025
75f1c78
[TM-2332] Merge branch 'staging' into feat/TM-2332-site-validation
egrojMonroy Oct 13, 2025
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
25 changes: 23 additions & 2 deletions apps/research-service/src/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,30 @@ import { BoundingBoxController } from "./bounding-boxes/bounding-box.controller"
import { BoundingBoxService } from "./bounding-boxes/bounding-box.service";
import { ValidationController } from "./validations/validation.controller";
import { ValidationService } from "./validations/validation.service";
import { ValidationProcessor } from "./validations/validation.processor";
import { DataApiModule } from "@terramatch-microservices/data-api";
import { BullModule } from "@nestjs/bullmq";
import { ConfigModule, ConfigService } from "@nestjs/config";

@Module({
imports: [SentryModule.forRoot(), CommonModule, HealthModule, DataApiModule],
imports: [
SentryModule.forRoot(),
CommonModule,
HealthModule,
DataApiModule,
ConfigModule.forRoot({ isGlobal: true }),
BullModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: (configService: ConfigService) => ({
connection: {
host: configService.get("REDIS_HOST"),
port: configService.get("REDIS_PORT")
}
})
}),
BullModule.registerQueue({ name: "validation" })
],
controllers: [SitePolygonsController, BoundingBoxController, ValidationController],
providers: [
{
Expand All @@ -21,7 +41,8 @@ import { DataApiModule } from "@terramatch-microservices/data-api";
},
SitePolygonsService,
BoundingBoxService,
ValidationService
ValidationService,
ValidationProcessor
]
})
export class AppModule {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { ApiProperty } from "@nestjs/swagger";
import { IsArray, IsIn, IsOptional } from "class-validator";
import { VALIDATION_TYPES, ValidationType } from "@terramatch-microservices/database/constants";
import { CreateDataDto, JsonApiBodyDto } from "@terramatch-microservices/common/util/json-api-update-dto";

export class SiteValidationRequestAttributes {
@ApiProperty({
enum: VALIDATION_TYPES,
isArray: true,
required: false,
description:
"Array of validation types to run on all polygons in the site. If not provided or empty, all validation types will be run."
})
@IsOptional()
@IsArray()
@IsIn(VALIDATION_TYPES, { each: true })
validationTypes?: ValidationType[];
}

export class SiteValidationRequestBody extends JsonApiBodyDto(
class SiteValidationRequestData extends CreateDataDto("validations", SiteValidationRequestAttributes) {}
) {}
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,6 @@ import { VALIDATION_CRITERIA_IDS, CriteriaId } from "@terramatch-microservices/d

@JsonApiDto({ type: "validationCriterias" })
export class ValidationCriteriaDto {
@ApiProperty({
description: "The polygon UUID that was validated (optional for historic data)",
required: false
})
polygonUuid?: string;

@ApiProperty({
description: "The validation criteria ID",
enum: VALIDATION_CRITERIA_IDS
Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,31 @@
import { ApiProperty } from "@nestjs/swagger";
import { IsArray, IsString, ArrayMinSize, IsIn } from "class-validator";
import { IsArray, ArrayMinSize, IsIn, IsOptional } from "class-validator";
import { VALIDATION_TYPES, ValidationType } from "@terramatch-microservices/database/constants";
import { CreateDataDto, JsonApiBodyDto } from "@terramatch-microservices/common/util/json-api-update-dto";

export class ValidationRequestDto {
export class ValidationRequestAttributes {
@ApiProperty({
description: "Array of polygon UUIDs to validate",
example: ["7631be34-bbe0-4e1e-b4fe-592677dc4b50", "d6502d4c-dfd6-461e-af62-21a0ec2f3e65"],
type: [String],
isArray: true
isArray: true,
type: String
})
@IsArray()
@ArrayMinSize(1)
@IsString({ each: true })
polygonUuids: string[];

@ApiProperty({
enum: VALIDATION_TYPES,
name: "validationTypes[]",
isArray: true,
required: true,
description: "Array of validation types to run"
required: false,
description: "Array of validation types to run. If not provided or empty, all validation types will be run."
})
@IsOptional()
@IsArray()
@IsIn(VALIDATION_TYPES, { each: true })
validationTypes: ValidationType[];
validationTypes?: ValidationType[];
}

export class ValidationRequestBody extends JsonApiBodyDto(
class ValidationRequestData extends CreateDataDto("validations", ValidationRequestAttributes) {}
) {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import { ApiProperty } from "@nestjs/swagger";
import { JsonApiDto } from "@terramatch-microservices/common/decorators";
import { ValidationType } from "@terramatch-microservices/database/constants";

export class ValidationTypeSummary {
@ApiProperty({
description: "Number of polygons that passed this validation"
})
valid: number;

@ApiProperty({
description: "Number of polygons that failed this validation"
})
invalid: number;
}

@JsonApiDto({ type: "validationSummaries" })
export class ValidationSummaryDto {
@ApiProperty({
description: "The UUID of the site that was validated",
example: "7631be34-bbe0-4e1e-b4fe-592677dc4b50"
})
siteUuid: string;

@ApiProperty({
description: "Total number of polygons in the site"
})
totalPolygons: number;

@ApiProperty({
description: "Number of polygons that were validated"
})
validatedPolygons: number;

@ApiProperty({
description: "Summary of validation results by validation type",
type: "object",
additionalProperties: {
type: "object",
properties: {
valid: { type: "number" },
invalid: { type: "number" }
}
}
})
validationSummary: Record<ValidationType, ValidationTypeSummary>;

@ApiProperty({
description: "When the validation was completed"
})
completedAt: Date;
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export class ValidationDto {
description: "The UUID of the polygon that was validated",
example: "d6502d4c-dfd6-461e-af62-21a0ec2f3e65"
})
polygonId: string;
polygonUuid: string;

@ApiProperty({
description: "List of validation criteria results for this polygon",
Expand Down
Loading