30 lines
842 B
TypeScript
30 lines
842 B
TypeScript
import type {
|
|
MemberWorkSyncBusySignalPort,
|
|
MemberWorkSyncLoggerPort,
|
|
} from '../../core/application';
|
|
|
|
export class CompositeMemberWorkSyncBusySignal implements MemberWorkSyncBusySignalPort {
|
|
constructor(
|
|
private readonly signals: MemberWorkSyncBusySignalPort[],
|
|
private readonly logger?: MemberWorkSyncLoggerPort
|
|
) {}
|
|
|
|
async isBusy(input: Parameters<MemberWorkSyncBusySignalPort['isBusy']>[0]) {
|
|
for (const signal of this.signals) {
|
|
try {
|
|
const result = await signal.isBusy(input);
|
|
if (result.busy) {
|
|
return result;
|
|
}
|
|
} catch (error) {
|
|
this.logger?.warn('member work sync busy signal failed', {
|
|
teamName: input.teamName,
|
|
memberName: input.memberName,
|
|
error: String(error),
|
|
});
|
|
}
|
|
}
|
|
|
|
return { busy: false };
|
|
}
|
|
}
|