Skip to content

Commit 5a62c20

Browse files
authored
fix: polygon-parts-process request (#66)
1 parent 05e7219 commit 5a62c20

File tree

6 files changed

+61
-24
lines changed

6 files changed

+61
-24
lines changed

src/common/interfaces.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
type IngestionUpdateFinalizeTaskParams,
88
type InputFiles,
99
type LayerName,
10+
PolygonPartsPayload,
1011
type RasterLayerMetadata,
1112
type TileFormatStrategy,
1213
type TileOutputFormat,
@@ -342,6 +343,10 @@ export type CatalogUpdateMetadata = Partial<RasterLayerMetadata>;
342343

343344
//#endregion catalogClient
344345

346+
//#region PolygonPartsManagerClient
347+
export type PolygonPartsProcessPayload = Pick<PolygonPartsPayload, 'productId' | 'productType' | 'jobType'>;
348+
//#endregion PolygonPartsManagerClient
349+
345350
//#region seedingJobCreator
346351

347352
export interface SeedJobParams {

src/httpClients/polygonPartsMangerClient.ts

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import type { IConfig } from 'config';
22
import type { Logger } from '@map-colonies/js-logger';
3-
import type { AggregationFeature, RasterProductTypes, RoiFeatureCollection } from '@map-colonies/raster-shared';
3+
import type { AggregationFeature, RoiFeatureCollection } from '@map-colonies/raster-shared';
44
import type { IHttpRetryConfig } from '@map-colonies/mc-utils';
55
import { HttpClient } from '@map-colonies/mc-utils';
66
import { inject, injectable } from 'tsyringe';
77
import { POLYGON_PARTS_MANAGER_SERVICE_NAME, SERVICES } from '../common/constants';
88
import { requiredAggregationFeatureSchema } from '../utils/zod/schemas/aggregation.schema';
99
import { LayerMetadataAggregationError, PolygonPartsProcessingError } from '../common/errors';
10-
import { AggregationLayerMetadata } from '../common/interfaces';
10+
import { AggregationLayerMetadata, PolygonPartsProcessPayload } from '../common/interfaces';
1111

1212
@injectable()
1313
export class PolygonPartsMangerClient extends HttpClient {
@@ -19,18 +19,15 @@ export class PolygonPartsMangerClient extends HttpClient {
1919
super(logger, baseUrl, serviceName, httpRetryConfig, disableHttpClientLogs);
2020
}
2121

22-
public async process(productName: string, productType: RasterProductTypes): Promise<void> {
22+
public async process(payload: PolygonPartsProcessPayload): Promise<void> {
2323
try {
2424
const url = '/polygonParts/process';
2525

26-
const body = {
27-
productName,
28-
productType,
29-
};
26+
this.logger.info({ msg: 'process polygon parts', url, payload });
3027

31-
await this.put<void>(url, body);
28+
await this.put<void>(url, payload);
3229
} catch (err) {
33-
const processError = new PolygonPartsProcessingError(err, productName, productType);
30+
const processError = new PolygonPartsProcessingError(err, payload.productId, payload.productType);
3431
throw processError;
3532
}
3633
}

src/job/models/ingestion/newJobHandler.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -120,14 +120,12 @@ export class NewJobHandler
120120
activeSpan?.addEvent('layerNames.valid', { layerName });
121121

122122
if (!processedParts) {
123-
const { productName, productType } = job;
124-
logger.info({ msg: 'processing polygon parts', productName, productType });
125-
126-
await this.polygonPartsMangerClient.process(productName, productType);
123+
const { type, resourceId, productType } = job;
124+
await this.polygonPartsMangerClient.process({ jobType: type, productId: resourceId, productType });
127125
finalizeTaskParams = await this.markFinalizeStepAsCompleted(job.id, task.id, finalizeTaskParams, 'processedParts');
128126

129127
activeSpan?.addEvent('processPolygonParts.success', { ...finalizeTaskParams });
130-
logger.info({ msg: 'polygon parts processed successfully', productName, productType });
128+
logger.info({ msg: 'polygon parts processed successfully', productId: resourceId, productType });
131129
}
132130

133131
if (!insertedToMapproxy) {

src/job/models/ingestion/swapJobHandler.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,14 +117,13 @@ export class SwapJobHandler
117117
const { tileOutputFormat, displayPath } = job.parameters.additionalParams;
118118

119119
if (!processedParts) {
120-
const { productName, productType } = job;
121-
logger.info({ msg: 'processing polygon parts', productName, productType });
120+
const { type, resourceId, productType } = job;
122121

123-
await this.polygonPartsMangerClient.process(productName, productType);
122+
await this.polygonPartsMangerClient.process({ jobType: type, productId: resourceId, productType });
124123
finalizeTaskParams = await this.markFinalizeStepAsCompleted(job.id, task.id, finalizeTaskParams, 'processedParts');
125124

126125
activeSpan?.addEvent('processPolygonParts.success', { ...finalizeTaskParams });
127-
logger.info({ msg: 'polygon parts processed successfully', productName, productType });
126+
logger.info({ msg: 'polygon parts processed successfully', productId: resourceId, productType });
128127
}
129128

130129
if (!updatedInMapproxy) {

src/job/models/ingestion/updateJobHandler.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,14 +106,13 @@ export class UpdateJobHandler
106106
activeSpan?.addEvent('layerNameFormat.valid', { layerName: layerNameFormats.layerName });
107107

108108
if (!processedParts) {
109-
const { productName, productType } = job;
110-
logger.info({ msg: 'processing polygon parts', productName, productType });
109+
const { type, resourceId, productType } = job;
111110

112-
await this.polygonPartsMangerClient.process(productName, productType);
111+
await this.polygonPartsMangerClient.process({ jobType: type, productId: resourceId, productType });
113112
finalizeTaskParams = await this.markFinalizeStepAsCompleted(job.id, task.id, finalizeTaskParams, 'processedParts');
114113

115114
activeSpan?.addEvent('processPolygonParts.success', { ...finalizeTaskParams });
116-
logger.info({ msg: 'polygon parts processed successfully', productName, productType });
115+
logger.info({ msg: 'polygon parts processed successfully', productId: resourceId, productType });
117116
}
118117

119118
if (!updatedInCatalog) {

tests/unit/httpClients/polygonPartMangerClient.spec.ts

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import jsLogger from '@map-colonies/js-logger';
22
import { faker } from '@faker-js/faker';
3-
import { AggregationFeature, RoiFeatureCollection } from '@map-colonies/raster-shared';
3+
import { AggregationFeature, RasterProductTypes, RoiFeatureCollection } from '@map-colonies/raster-shared';
44
import nock from 'nock';
55
import { PolygonPartsMangerClient } from '../../../src/httpClients/polygonPartsMangerClient';
66
import { createFakeRoiFeatureCollection } from '../mocks/exportMockData';
7-
import { LayerMetadataAggregationError } from '../../../src/common/errors';
7+
import { LayerMetadataAggregationError, PolygonPartsProcessingError } from '../../../src/common/errors';
8+
import { PolygonPartsProcessPayload } from '../../../src/common/interfaces';
89
import { configMock, registerDefaultConfig } from '../mocks/configMock';
910
import { createFakeAggregatedFeature } from './catalogClientSetup';
1011

@@ -18,6 +19,44 @@ describe('polygonPartsManagerClient', () => {
1819
jest.resetAllMocks();
1920
});
2021

22+
describe('process', () => {
23+
it('should process polygon parts successfully', async () => {
24+
polygonPartsManagerClient = new PolygonPartsMangerClient(configMock, jsLogger({ enabled: false }));
25+
26+
const baseUrl = configMock.get<string>('servicesUrl.polygonPartsManager');
27+
const payload: PolygonPartsProcessPayload = {
28+
jobType: 'Ingestion_New',
29+
productId: 'test_layer',
30+
productType: RasterProductTypes.ORTHOPHOTO,
31+
};
32+
const url = '/polygonParts/process';
33+
nock(baseUrl).put(url, payload).reply(200);
34+
35+
const action = polygonPartsManagerClient.process(payload);
36+
37+
await expect(action).resolves.toBeUndefined();
38+
expect(nock.isDone()).toBe(true);
39+
});
40+
41+
it('should throw PolygonPartsProcessingError when the request fails', async () => {
42+
polygonPartsManagerClient = new PolygonPartsMangerClient(configMock, jsLogger({ enabled: false }));
43+
44+
const baseUrl = configMock.get<string>('servicesUrl.polygonPartsManager');
45+
const payload: PolygonPartsProcessPayload = {
46+
jobType: 'Ingestion_New',
47+
productId: 'test_layer',
48+
productType: RasterProductTypes.ORTHOPHOTO,
49+
};
50+
const url = '/polygonParts/process';
51+
nock(baseUrl).put(url, payload).reply(500);
52+
53+
const action = polygonPartsManagerClient.process(payload);
54+
55+
await expect(action).rejects.toThrow(PolygonPartsProcessingError);
56+
expect(nock.isDone()).toBe(true);
57+
});
58+
});
59+
2160
describe('getAggregatedLayerMetadata', () => {
2261
it('should return aggregated part data based on polygonPartsEntityName', async () => {
2362
polygonPartsManagerClient = new PolygonPartsMangerClient(configMock, jsLogger({ enabled: false }));

0 commit comments

Comments
 (0)