@skedulo/pulse-solution-services 0.0.7 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +139 -23
- package/dist/clients/artifact-client.js +1 -1
- package/dist/clients/base-client.js +1 -1
- package/dist/clients/config-var-client.js +1 -1
- package/dist/clients/graphql-client.js +1 -1
- package/dist/constants/graphql-constants.js +1 -0
- package/dist/constants/index.js +1 -1
- package/dist/core/execution-context.js +1 -1
- package/dist/core/execution-options.js +1 -0
- package/dist/core/index.js +1 -1
- package/dist/core/request-header-constants.js +1 -0
- package/dist/index.d.ts +327 -118
- package/dist/interfaces/api-client.js +1 -0
- package/dist/interfaces/index.js +1 -1
- package/dist/interfaces/lock-service-interfaces.js +1 -0
- package/dist/interfaces/locking-service-interfaces.js +1 -0
- package/dist/services/batch-processor/fetching-strategies/cursor-based-fetching-strategy.js +1 -1
- package/dist/services/batch-processor/fetching-strategies/date-based-fetching-strategy.js +1 -1
- package/dist/services/cache/cache-service.js +1 -1
- package/dist/services/graph-batch/configs/graph-batch-config.d.ts +33 -0
- package/dist/services/graph-batch/configs/graph-batch-config.js +1 -0
- package/dist/services/graph-batch/configs/unique-graph-batch-config.d.ts +39 -0
- package/dist/services/graph-batch/configs/unique-graph-batch-config.js +1 -0
- package/dist/services/graph-batch/graph-batch.d.ts +56 -0
- package/dist/services/graph-batch/graph-batch.js +1 -0
- package/dist/services/graph-batch/index.d.ts +5 -0
- package/dist/services/graph-batch/index.js +1 -0
- package/dist/services/graph-batch/pagination-strategy.d.ts +5 -0
- package/dist/services/graph-batch/pagination-strategy.js +1 -0
- package/dist/services/graph-batch/unique-graph-batch.d.ts +28 -0
- package/dist/services/graph-batch/unique-graph-batch.js +1 -0
- package/dist/services/graphql/graphql-query-builder.d.ts +6 -4
- package/dist/services/graphql/graphql-query-builder.js +1 -1
- package/dist/services/graphql/graphql-service.d.ts +20 -13
- package/dist/services/graphql/graphql-service.js +1 -1
- package/dist/services/graphql/queries.d.ts +5 -4
- package/dist/services/graphql/queries.js +1 -1
- package/dist/services/index.js +1 -1
- package/dist/services/lock-service.js +1 -0
- package/dist/services/locking-service.js +1 -0
- package/dist/services/resource-availability/builder/data-service.d.ts +2 -1
- package/dist/services/resource-availability/builder/data-service.js +1 -1
- package/dist/utils/datetime-utils.js +1 -1
- package/package.json +9 -5
- package/yarn.lock +402 -199
- package/dist/constants/tenant-objects.js +0 -1
- package/dist/services/data-service.js +0 -1
- package/dist/services/resource-availability/object-factory.d.ts +0 -13
- package/dist/services/resource-availability/object-factory.js +0 -1
- package/dist/services/resource-availability/resource-availability-service.d.ts +0 -7
- package/dist/services/resource-availability/resource-availability-service.js +0 -1
- package/dist/services/resource-availability/resource-builder.d.ts +0 -16
- package/dist/services/resource-availability/resource-builder.js +0 -1
- package/dist/services/resource-availability/resource-query-service.d.ts +0 -7
- package/dist/services/resource-availability/resource-query-service.js +0 -1
- package/dist/services/resource-availability/resource-validator.d.ts +0 -29
- package/dist/services/resource-availability/resource-validator.js +0 -1
- /package/dist/{interfaces/resource-availability.js → core/base-config.js} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var TenantObject;Object.defineProperty(exports,"__esModule",{value:!0}),exports.TenantObject=void 0,function(e){e.Accounts="Accounts",e.Jobs="Jobs",e.JobAllocations="JobAllocations",e.Regions="Regions",e.Contacts="Contacts",e.Locations="Locations",e.Resources="Resources",e.Tags="Tags",e.JobTags="JobTags",e.ResourceTags="ResourceTags",e.Activities="Activities",e.Availabilities="Availabilities",e.Holidays="Holidays",e.AvailabilityPatterns="AvailabilityPatterns",e.AvailabilityPatternResources="AvailabilityPatternResources",e.AccountResourceScores="AccountResourceScores",e.LocationResourceScores="LocationResourceScores",e.Products="Products",e.JobProducts="JobProducts"}(TenantObject||(exports.TenantObject=TenantObject={}));
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var __awaiter=this&&this.__awaiter||function(e,t,i,r){return new(i||(i=Promise))((function(a,o){function s(e){try{l(r.next(e))}catch(e){o(e)}}function n(e){try{l(r.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?a(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(s,n)}l((r=r.apply(e,t||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:!0}),exports.DataService=void 0;const graphql_1=require("./graphql");class DataService{constructor(e){this.graphqlService=e}getResources(e){return __awaiter(this,void 0,void 0,(function*(){const t=this.newQueryBuilder("Resources");return t.withFields(["UID","Name","Category","ResourceType","EmploymentType","UserId","PrimaryRegionId"]).withFilter("IsActive == true"),t.withParentQuery("PrimaryRegion").withFields(["UID","Name","Timezone"]),e.resourceIds&&e.resourceIds.size>0?t.withFilter(`UID IN ${JSON.stringify(Array.from(e.resourceIds))}`):e.regionIds&&e.regionIds.size>0&&t.withFilter(`PrimaryRegionId IN [${Array.from(e.regionIds).map((e=>`'${e}'`)).join(",")}]`),e.useTag&&t.withChildQuery("ResourceTags").withParentQuery("Tag").withFields(["UID","Name"]),e.useActivity&&t.withChildQuery("Activities").withFields(["UID","Name","Start","End","Type"]),e.useAvailability&&t.withChildQuery("Availabilities").withFields(["UID","Start","Finish","Type","IsAvailable"]),e.useJobAllocation&&t.withChildQuery("JobAllocations").withFields(["UID","Name","Start","End","JobId"]).withFilter("Status NOTIN ['Deleted', 'Declined']").withParentQuery("Job").withFields(["UID","Name","Start","End","Type"]),(yield t.execute()).records}))}getHolidays(e,t,i){return __awaiter(this,void 0,void 0,(function*(){const r={},a=t?t.toISOString().split("T")[0]:null,o=i?i.toISOString().split("T")[0]:null,s=this.newQueryBuilder("Holidays");s.withFields(["UID","Name","StartDate","EndDate","Global"]),s.withFilter("Global == true"),a&&s.withFilter(`EndDate >= ${a}`),o&&s.withFilter(`StartDate <= ${o}`);const n=yield s.execute();if(r.GLOBAL=n.records||[],e&&e.length>0){const t=this.newQueryBuilder("Holidays");t.withFields(["UID","Name","StartDate","EndDate"]),t.withChildQuery("HolidayRegions").withFields(["RegionId"]).withFilter(`RegionId IN [${e.map((e=>`'${e}'`)).join(",")}]`),a&&t.withFilter(`EndDate >= ${a}`),o&&t.withFilter(`StartDate <= ${o}`);const i=yield t.execute();for(const e of i.records||[])for(const t of e.HolidayRegions||[]){const i=t.RegionId;r[i]||(r[i]=[]),r[i].push(e)}}return r}))}newQueryBuilder(e){const t=new graphql_1.GraphQLQueryBuilder(e);return t.setGraphqlService(this.graphqlService),t}}exports.DataService=DataService;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { Activity, Availability, BaseEvent, BaseObject, Job, JobAllocation, Resource, ResourceShift, Shift, Tag } from "../../interfaces/resource-availability";
|
|
2
|
-
export declare class ObjectFactory {
|
|
3
|
-
static createBaseObject(data: Record<string, string>): BaseObject;
|
|
4
|
-
static createBaseEvent(data: Record<string, string>): BaseEvent;
|
|
5
|
-
static createTag(data: Record<string, any>): Tag;
|
|
6
|
-
static createResource(data: Record<string, any>): Resource;
|
|
7
|
-
static createJob(data: Record<string, any>): Job;
|
|
8
|
-
static createAvailability(data: Record<string, any>): Availability;
|
|
9
|
-
static createActivity(data: Record<string, any>): Activity;
|
|
10
|
-
static createJobAllocation(data: Record<string, any>): JobAllocation;
|
|
11
|
-
static createResourceShift(data: Record<string, any>): ResourceShift;
|
|
12
|
-
static createShift(data: Record<string, any>): Shift;
|
|
13
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ObjectFactory=void 0;class ObjectFactory{static createBaseObject(e){return{id:e.UID||"",name:e.Name||"",propertyMap:{}}}static createBaseEvent(e){return e.Finish?e.Finish:e.End,Object.assign(Object.assign({},this.createBaseObject(e)),{start:new Date(e.Start),finish:new Date(e.Start),eventType:e.Type||""})}static createTag(e){return this.createBaseObject(e)}static createResource(e){var t;return Object.assign(Object.assign({},this.createBaseObject(e)),{category:e.Category||"",employmentType:e.EmploymentType||"",resourceType:e.ResourceType||"",userId:e.UserId||"",regionId:e.PrimaryRegionId||"",timezone:(null===(t=e.PrimaryRegion)||void 0===t?void 0:t.Timezone)||"",tags:(e.ResourceTags||[]).map((e=>this.createTag(e.Tag))),availabilities:[],events:[]})}static createJob(e){return Object.assign(Object.assign({},this.createBaseEvent(e)),{jobStatus:e.JobStatus||"",regionId:e.RegionId||"",contactId:e.ContactId||"",start:e.Start?new Date(e.Start):new Date(0),finish:e.Finish?new Date(e.Finish):new Date(0),geoLocation:e.GeoLocation||{lat:e.GeoLatitude,lng:e.GeoLongitude},address:e.Address,eventType:"job",tags:(e.JobTags||[]).map((e=>this.createTag(e.Tag)))})}static createAvailability(e){return Object.assign(Object.assign({},this.createBaseEvent(e)),{resourceId:e.resourceId||"",isAvailable:!0===e.isAvailable||"true"===e.isAvailable,status:e.status||"",availabilityType:e.availabilityType||""})}static createActivity(e){return Object.assign(Object.assign({},this.createBaseEvent(e)),{resourceId:e.resourceId||"",activityType:e.activityType||""})}static createJobAllocation(e){return Object.assign(Object.assign({},this.createBaseEvent(e)),{jobId:e.jobId||"",resourceId:e.resourceId||"",status:e.status||""})}static createResourceShift(e){return Object.assign(Object.assign({},this.createBaseEvent(e)),{resourceId:e.resourceId||"",shift:this.createShift(e.shift||{})})}static createShift(e){return Object.assign(Object.assign({},this.createBaseEvent(e)),{regionId:e.regionId||"",displayName:e.displayName||"",isDraft:!0===e.isDraft||"true"===e.isDraft})}}exports.ObjectFactory=ObjectFactory;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { AvailabilityAPIClient } from "../../clients/availability-api-client";
|
|
2
|
-
import { BaseEvent, ResourceQueryParam } from "../../interfaces/resource-availability";
|
|
3
|
-
export declare class ResourceAvailabilityService {
|
|
4
|
-
private availabilityAPIClient;
|
|
5
|
-
constructor(availabilityAPIClient: AvailabilityAPIClient);
|
|
6
|
-
getAvailabilityPatterns(param: ResourceQueryParam): Promise<Map<string, BaseEvent[]>>;
|
|
7
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var __awaiter=this&&this.__awaiter||function(e,t,i,r){return new(i||(i=Promise))((function(a,n){function s(e){try{c(r.next(e))}catch(e){n(e)}}function o(e){try{c(r.throw(e))}catch(e){n(e)}}function c(e){var t;e.done?a(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(s,o)}c((r=r.apply(e,t||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:!0}),exports.ResourceAvailabilityService=void 0;class ResourceAvailabilityService{constructor(e){this.availabilityAPIClient=e}getAvailabilityPatterns(e){return __awaiter(this,void 0,void 0,(function*(){const t=yield this.availabilityAPIClient.fetchAvailability({resourceIds:Array.from(e.resourceIds||[]),start:e.startTime.toISOString(),end:e.endTime.toISOString(),mergedAvailabilities:!1,entries:!0}),i=new Map;return t.forEach((e=>{if(!e.entries)return;const t=e.entries.filter((e=>"pattern"===e.type)).map((e=>({id:`${e.start}_${e.end}`,name:`${e.name}(${e.type})`,start:e.start?new Date(e.start):new Date(0),finish:e.end?new Date(e.end):new Date(0),eventType:e.type})));i.set(e.resourceId,t)})),i}))}}exports.ResourceAvailabilityService=ResourceAvailabilityService;
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Resource, ResourceQueryParam } from "../../interfaces/resource-availability";
|
|
2
|
-
import { DataService } from "../data-service";
|
|
3
|
-
import { ResourceAvailabilityService } from "./resource-availability-service";
|
|
4
|
-
export declare class ResourceBuilder {
|
|
5
|
-
private dataService;
|
|
6
|
-
private availabilityService;
|
|
7
|
-
constructor(dataService: DataService, availabilityService: ResourceAvailabilityService);
|
|
8
|
-
build(queryParam: ResourceQueryParam): Promise<Resource[]>;
|
|
9
|
-
private loadAvailabilityPatterns;
|
|
10
|
-
private loadActivityEvents;
|
|
11
|
-
private loadAvailabilityEvents;
|
|
12
|
-
private loadJobAllocationEvents;
|
|
13
|
-
private loadResourceShiftEvents;
|
|
14
|
-
private loadHolidayEvents;
|
|
15
|
-
protected buildMore(resources: Resource[]): Resource[];
|
|
16
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var __decorate=this&&this.__decorate||function(e,t,i,a){var r,s=arguments.length,o=s<3?t:null===a?a=Object.getOwnPropertyDescriptor(t,i):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,a);else for(var n=e.length-1;n>=0;n--)(r=e[n])&&(o=(s<3?r(o):s>3?r(t,i,o):r(t,i))||o);return s>3&&o&&Object.defineProperty(t,i,o),o},__metadata=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},__awaiter=this&&this.__awaiter||function(e,t,i,a){return new(i||(i=Promise))((function(r,s){function o(e){try{l(a.next(e))}catch(e){s(e)}}function n(e){try{l(a.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(o,n)}l((a=a.apply(e,t||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:!0}),exports.ResourceBuilder=void 0;const resource_availability_1=require("../../interfaces/resource-availability"),logging_1=require("../../logging"),utils_1=require("../../utils"),object_factory_1=require("./object-factory");class ResourceBuilder{constructor(e,t){this.dataService=e,this.availabilityService=t}build(e){return __awaiter(this,void 0,void 0,(function*(){var t,i;if(!e)throw new Error("ResourceBuilder Error: queryParam is required");const a=[],r=yield this.dataService.getResources(e);e.resourceIds&&0!==e.resourceIds.size||(e.resourceIds=new Set(r.map((e=>e.UID))));for(const t of r){const i=object_factory_1.ObjectFactory.createResource(t);a.push(i),e.useActivity&&this.loadActivityEvents(t,i),e.useAvailability&&this.loadAvailabilityEvents(t,i),e.useJobAllocation&&this.loadJobAllocationEvents(t,i),e.useResourceShift&&this.loadResourceShiftEvents(t,i),e.useHoliday&&this.loadHolidayEvents(i,e)}e.useAvailabilityPattern&&(yield this.loadAvailabilityPatterns(a,e));for(const r of a)e.mergeAvailability?r.availabilities=utils_1.DateTimeUtils.mergeEvents(r.availabilities):null===(t=r.availabilities)||void 0===t||t.sort(((e,t)=>e.start.getTime()-t.start.getTime())),e.mergeEvents?r.events=utils_1.DateTimeUtils.mergeEvents(r.events):null===(i=r.events)||void 0===i||i.sort(((e,t)=>e.start.getTime()-t.start.getTime()));return this.buildMore(a)}))}loadAvailabilityPatterns(e,t){return __awaiter(this,void 0,void 0,(function*(){const i=yield this.availabilityService.getAvailabilityPatterns(t);for(const t of e)t.availabilities.push(...i.get(t.id)||[])}))}loadActivityEvents(e,t){e.Activities&&t.events.push(...e.Activities.map((e=>({id:e.UID,name:e.Name,start:new Date(e.Start),finish:new Date(e.End),eventType:"activity"}))))}loadAvailabilityEvents(e,t){if(e.availabilities){const i=[],a=[];e.Availabilities.forEach((e=>{e.IsAvailable?i.push(object_factory_1.ObjectFactory.createBaseEvent(e)):a.push(object_factory_1.ObjectFactory.createBaseEvent(e))})),t.availabilities=i,t.events.push(...a)}}loadJobAllocationEvents(e,t){e.JobAllocations&&t.events.push(...e.JobAllocations.map((e=>({id:e.UID,name:e.Name,start:e.Start?new Date(e.Start):void 0,finish:e.End?new Date(e.End):void 0,eventType:"job_allocation"}))))}loadResourceShiftEvents(e,t){e.resourceShifts&&t.events.push(...e.resourceShifts.map((e=>({id:e.id,name:e.name,start:e.start?new Date(e.start):new Date(0),finish:e.finish?new Date(e.finish):new Date(0),eventType:"resource_shift"}))))}loadHolidayEvents(e,t){return __awaiter(this,void 0,void 0,(function*(){const i=yield this.dataService.getHolidays(Array.from(t.regionIds||[]),t.startTime,t.endTime),a=i.GLOBAL||[];i[e.regionId]&&a.push(...i[e.regionId]),a.forEach((i=>{let a=utils_1.DateTimeUtils.getStartOfDate(i.StartDate,e.timezone),r=utils_1.DateTimeUtils.getEndOfDate(i.EndDate,e.timezone);a<t.startTime&&(a=t.startTime),r>t.endTime&&(r=t.endTime),e.events.push({id:`${a.toISOString()}_${r.toISOString()}`,name:i.Name,start:a,finish:r,eventType:"holiday"})}))}))}buildMore(e){return e}}exports.ResourceBuilder=ResourceBuilder,__decorate([(0,logging_1.LogMethod)(),__metadata("design:type",Function),__metadata("design:paramtypes",[resource_availability_1.ResourceQueryParam]),__metadata("design:returntype",Promise)],ResourceBuilder.prototype,"build",null);
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { ResourceQueryParam } from "../../interfaces/resource-availability";
|
|
2
|
-
import { GraphQLQueryBuilder } from "../graphql";
|
|
3
|
-
export declare class ResourceQueryService {
|
|
4
|
-
private queryBuilder;
|
|
5
|
-
constructor(queryBuilder: GraphQLQueryBuilder);
|
|
6
|
-
getResources(param: ResourceQueryParam): Promise<Record<string, any>[]>;
|
|
7
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var __awaiter=this&&this.__awaiter||function(e,i,r,t){return new(r||(r=Promise))((function(s,u){function o(e){try{n(t.next(e))}catch(e){u(e)}}function a(e){try{n(t.throw(e))}catch(e){u(e)}}function n(e){var i;e.done?s(e.value):(i=e.value,i instanceof r?i:new r((function(e){e(i)}))).then(o,a)}n((t=t.apply(e,i||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:!0}),exports.ResourceQueryService=void 0;class ResourceQueryService{constructor(e){this.queryBuilder=e}getResources(e){return __awaiter(this,void 0,void 0,(function*(){return this.queryBuilder.withFields(["UID","Name","Category","ResourceType","EmploymentType","UserId","PrimaryRegionId"]).withFilter("IsActive == true"),this.queryBuilder.withParentQuery("PrimaryRegion").withFields(["UID","Name","Timezone"]),e.resourceIds&&e.resourceIds.size>0?this.queryBuilder.withFilter(`UID IN ${JSON.stringify(Array.from(e.resourceIds))}`):e.regionIds&&e.regionIds.size>0&&this.queryBuilder.withFilter(`PrimaryRegionId IN ${JSON.stringify(Array.from(e.regionIds))}`),e.useTag&&this.queryBuilder.withChildQuery("ResourceTags").withParentQuery("Tag").withFields(["UID","Name"]),e.useActivity&&this.queryBuilder.withChildQuery("Activities").withFields(["UID","Name","Start","End","Type"]),e.useAvailability&&this.queryBuilder.withChildQuery("Availabilities").withFields(["UID","Start","Finish","Type","IsAvailable"]),e.useJobAllocation&&this.queryBuilder.withChildQuery("JobAllocations").withFields(["UID","Name","Start","End","JobId"]).withFilter("Status NOTIN ['Deleted', 'Declined']").withParentQuery("Job").withFields(["UID","Name","Start","End","Type"]),(yield this.queryBuilder.execute()).records}))}}exports.ResourceQueryService=ResourceQueryService;
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { BaseEvent, Job, Resource, ResourceValidationOption, Tag } from "../../interfaces";
|
|
2
|
-
declare class ResourceJobValidation {
|
|
3
|
-
resource: Resource;
|
|
4
|
-
job: Job;
|
|
5
|
-
availableEvent: BaseEvent | null;
|
|
6
|
-
conflictEvents: BaseEvent[];
|
|
7
|
-
missingTags: Tag[];
|
|
8
|
-
constructor(resource: Resource, job: Job, availableEvent?: BaseEvent | null, conflictEvents?: BaseEvent[], missingTags?: Tag[]);
|
|
9
|
-
isQualified(option: ResourceValidationOption): boolean;
|
|
10
|
-
}
|
|
11
|
-
export declare class ValidationResult {
|
|
12
|
-
private readonly validations;
|
|
13
|
-
private readonly option;
|
|
14
|
-
constructor(validations: ResourceJobValidation[], option: ResourceValidationOption);
|
|
15
|
-
getQualifiedResources(): Resource[];
|
|
16
|
-
getJobsWithXQualifiedResources(minQualifiedResources: number): Job[];
|
|
17
|
-
getUnqualifiedJobsWithReasons(): ResourceJobValidation[];
|
|
18
|
-
}
|
|
19
|
-
export declare class ResourceValidator {
|
|
20
|
-
private readonly option;
|
|
21
|
-
constructor(option: ResourceValidationOption);
|
|
22
|
-
validate(resources: Resource[], jobs: Job[]): ValidationResult;
|
|
23
|
-
private validateResource;
|
|
24
|
-
private findAvailableEvent;
|
|
25
|
-
private findConflictingEvents;
|
|
26
|
-
private findMissingTags;
|
|
27
|
-
private prepareData;
|
|
28
|
-
}
|
|
29
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ResourceValidator=exports.ValidationResult=void 0;const utils_1=require("../../utils");class ResourceJobValidation{constructor(i,t,s=null,e=[],o=[]){this.resource=i,this.job=t,this.availableEvent=s,this.conflictEvents=e,this.missingTags=o}isQualified(i){return!(i.checkAvailability&&null===this.availableEvent||i.checkConflict&&0!==this.conflictEvents.length||i.checkTag&&0!==this.missingTags.length)}}class ValidationResult{constructor(i,t){this.validations=i,this.option=t}getQualifiedResources(){const i=new Map;for(const t of this.validations)t.isQualified(this.option)&&i.set(t.resource.id,t.resource);return Array.from(i.values())}getJobsWithXQualifiedResources(i){const t=new Map;for(const i of this.validations)i.isQualified(this.option)&&t.set(i.job.id,(t.get(i.job.id)||0)+1);return Array.from(new Set(this.validations.map((i=>i.job)))).filter((s=>(t.get(s.id)||0)>=i))}getUnqualifiedJobsWithReasons(){return this.validations.filter((i=>!i.isQualified(this.option)))}}exports.ValidationResult=ValidationResult;class ResourceValidator{constructor(i){this.option=i}validate(i,t){if(!i.length||!t.length)throw new Error("ResourceValidator Error: Resources and jobs must be provided before validation.");this.prepareData(i,t);const s=[];for(const e of t)for(const t of i)s.push(this.validateResource(t,e));return new ValidationResult(s,this.option)}validateResource(i,t){const s=new ResourceJobValidation(i,t);return this.option.checkAvailability&&(s.availableEvent=this.findAvailableEvent(i,t)),this.option.checkConflict&&(s.conflictEvents=this.findConflictingEvents(i,t)),this.option.checkTag&&(s.missingTags=this.findMissingTags(i,t)),s}findAvailableEvent(i,t){return i.availabilities.find((i=>utils_1.DateTimeUtils.isIncluding(i,t)))||null}findConflictingEvents(i,t){return i.events.filter((i=>i.id!==t.id&&utils_1.DateTimeUtils.isOverlapping(i,t)))}findMissingTags(i,t){if(!t.tags||!i.tags)return[];const s=new Set(i.tags.map((i=>i.id)));return t.tags.filter((i=>!s.has(i.id)))}prepareData(i,t){for(const t of i)t.tags||(t.tags=[]);for(const i of t)i.id||(i.id=`${i.start}-${i.finish}`),i.name||(i.name=`${i.start}-${i.finish}`),i.tags||(i.tags=[])}}exports.ResourceValidator=ResourceValidator;
|
|
File without changes
|