X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcharging-station%2Fui-server%2Fui-services%2FAbstractUIService.ts;h=ffdc256583adccd581d72c99496e3bfe726333e2;hb=16c46962f43a692c996b1c89a94dc572fea52d63;hp=204b5431629e82c753bc57d52fe885753344ebfb;hpb=2c5c744359d7b1c65da4eb255db1d67da7b604f3;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ui-server/ui-services/AbstractUIService.ts b/src/charging-station/ui-server/ui-services/AbstractUIService.ts index 204b5431..ffdc2565 100644 --- a/src/charging-station/ui-server/ui-services/AbstractUIService.ts +++ b/src/charging-station/ui-server/ui-services/AbstractUIService.ts @@ -2,8 +2,10 @@ import { BaseError, type OCPPError } from '../../../exception/index.js' import { BroadcastChannelProcedureName, type BroadcastChannelRequestPayload, + type ChargingStationInfo, type ChargingStationOptions, ConfigurationSection, + type JsonObject, type JsonType, ProcedureName, type ProtocolRequest, @@ -22,6 +24,12 @@ import type { AbstractUIServer } from '../AbstractUIServer.js' const moduleName = 'AbstractUIService' +interface AddChargingStationsRequestPayload extends RequestPayload { + template: string + numberOfStations: number + options?: ChargingStationOptions +} + export abstract class AbstractUIService { protected static readonly ProcedureNameToBroadCastChannelProcedureNameMapping = new Map< ProcedureName, @@ -250,11 +258,8 @@ export abstract class AbstractUIService { _procedureName?: ProcedureName, requestPayload?: RequestPayload ): Promise { - const { template, numberOfStations, options } = requestPayload as { - template: string - numberOfStations: number - options?: ChargingStationOptions - } + const { template, numberOfStations, options } = + requestPayload as AddChargingStationsRequestPayload if (!Bootstrap.getInstance().getState().started) { return { status: ResponseStatus.FAILURE, @@ -274,24 +279,37 @@ export abstract class AbstractUIService { errorMessage: `Template '${template}' not found` } satisfies ResponsePayload } + const succeededStationInfos: ChargingStationInfo[] = [] + const failedStationInfos: ChargingStationInfo[] = [] + let err: Error | undefined for (let i = 0; i < numberOfStations; i++) { + let stationInfo: ChargingStationInfo | undefined try { - await Bootstrap.getInstance().addChargingStation( + stationInfo = await Bootstrap.getInstance().addChargingStation( Bootstrap.getInstance().getLastIndex(template) + 1, `${template}.json`, options ) + if (stationInfo != null) { + succeededStationInfos.push(stationInfo) + } } catch (error) { - return { - status: ResponseStatus.FAILURE, - errorMessage: (error as Error).message, - errorStack: (error as Error).stack - } satisfies ResponsePayload + err = error as Error + if (stationInfo != null) { + failedStationInfos.push(stationInfo) + } } } return { - status: ResponseStatus.SUCCESS - } + status: err != null ? ResponseStatus.FAILURE : ResponseStatus.SUCCESS, + ...(succeededStationInfos.length > 0 && { + hashIdsSucceeded: succeededStationInfos.map(stationInfo => stationInfo.hashId) + }), + ...(failedStationInfos.length > 0 && { + hashIdsFailed: failedStationInfos.map(stationInfo => stationInfo.hashId) + }), + ...(err != null && { errorMessage: err.message, errorStack: err.stack }) + } satisfies ResponsePayload } private handlePerformanceStatistics (): ResponsePayload { @@ -312,7 +330,7 @@ export abstract class AbstractUIService { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ...Bootstrap.getInstance().getPerformanceStatistics()! ] as JsonType[] - } + } satisfies ResponsePayload } catch (error) { return { status: ResponseStatus.FAILURE, @@ -326,7 +344,7 @@ export abstract class AbstractUIService { try { return { status: ResponseStatus.SUCCESS, - state: Bootstrap.getInstance().getState() + state: Bootstrap.getInstance().getState() as unknown as JsonObject } satisfies ResponsePayload } catch (error) { return {