const moduleName = 'AbstractUIService'
+interface AddChargingStationsRequestPayload extends RequestPayload {
+ template: string
+ numberOfStations: number
+ options?: ChargingStationOptions
+}
+
export abstract class AbstractUIService {
protected static readonly ProcedureNameToBroadCastChannelProcedureNameMapping = new Map<
ProcedureName,
_procedureName?: ProcedureName,
requestPayload?: RequestPayload
): Promise<ResponsePayload> {
- 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,
errorMessage: `Template '${template}' not found`
} satisfies ResponsePayload
}
- const stationInfos: ChargingStationInfo[] = []
+ const succeededStationInfos: ChargingStationInfo[] = []
+ const failedStationInfos: ChargingStationInfo[] = []
+ let err: Error | undefined
for (let i = 0; i < numberOfStations; i++) {
let stationInfo: ChargingStationInfo | undefined
try {
options
)
if (stationInfo != null) {
- stationInfos.push(stationInfo)
+ succeededStationInfos.push(stationInfo)
}
} catch (error) {
- return {
- status: ResponseStatus.FAILURE,
- ...(stationInfo?.hashId != null && { hashIdsFailed: [stationInfo.hashId] }),
- 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,
- hashIdsSucceeded: stationInfos.map(stationInfo => stationInfo.hashId)
- }
+ status: failedStationInfos.length > 0 ? ResponseStatus.FAILURE : ResponseStatus.SUCCESS,
+ 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 {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
...Bootstrap.getInstance().getPerformanceStatistics()!
] as JsonType[]
- }
+ } satisfies ResponsePayload
} catch (error) {
return {
status: ResponseStatus.FAILURE,