agent-ecosystem/src/features/member-work-sync/main/adapters/output/TeamInboxMemberWorkSyncNudgeSink.ts
2026-05-09 14:34:33 +03:00

40 lines
1.6 KiB
TypeScript

import { TeamInboxReader } from '@main/services/team/TeamInboxReader';
import { TeamInboxWriter } from '@main/services/team/TeamInboxWriter';
import type { MemberWorkSyncInboxNudgePort } from '../../../core/application';
export class TeamInboxMemberWorkSyncNudgeSink implements MemberWorkSyncInboxNudgePort {
constructor(
private readonly inboxReader: Pick<TeamInboxReader, 'getMessagesFor'> = new TeamInboxReader(),
private readonly inboxWriter: Pick<TeamInboxWriter, 'sendMessage'> = new TeamInboxWriter()
) {}
async insertIfAbsent(input: Parameters<MemberWorkSyncInboxNudgePort['insertIfAbsent']>[0]) {
const existing = await this.inboxReader.getMessagesFor(input.teamName, input.memberName);
if (existing.some((message) => message.messageId === input.messageId)) {
return { inserted: false, messageId: input.messageId };
}
const result = await this.inboxWriter.sendMessage(input.teamName, {
member: input.memberName,
from: input.payload.from,
to: input.payload.to,
messageId: input.messageId,
timestamp: input.timestamp,
text: input.payload.text,
taskRefs: input.payload.taskRefs,
actionMode: input.payload.actionMode,
summary: 'Work sync check',
source: 'system_notification',
messageKind: input.payload.messageKind,
workSyncIntent: input.payload.workSyncIntent,
workSyncIntentKey: input.payload.workSyncIntentKey,
workSyncReviewRequestEventIds: input.payload.workSyncReviewRequestEventIds,
});
return {
inserted: true,
messageId: result.messageId,
};
}
}