refactor: share sync reservation join rule (WealthLedger/backend#119) (#162)
This commit was merged in pull request #162.
This commit is contained in:
@@ -25,6 +25,22 @@ export type TbankSyncAttempt = {
|
||||
userId: string;
|
||||
};
|
||||
|
||||
// Join rule shared by sync reservations: the same process joins its own running attempt
|
||||
// only while that attempt is still active in memory. Set and Map both satisfy `has`.
|
||||
export function isJoinableRunningAttempt<
|
||||
T extends { attemptId: string; processRunId: string; state: string },
|
||||
>(
|
||||
previous: null | T,
|
||||
processRunId: string,
|
||||
active: { has(attemptId: string): boolean },
|
||||
): previous is T {
|
||||
return (
|
||||
previous?.state === 'running' &&
|
||||
previous.processRunId === processRunId &&
|
||||
active.has(previous.attemptId)
|
||||
);
|
||||
}
|
||||
|
||||
@Injectable()
|
||||
export class TbankAccessService {
|
||||
constructor(
|
||||
@@ -62,11 +78,7 @@ export class TbankAccessService {
|
||||
const previous = await tx.tbankSyncWork.findUnique({
|
||||
where: { userId_revision_scopeKey: scope },
|
||||
});
|
||||
if (
|
||||
previous?.state === 'running' &&
|
||||
previous.processRunId === processRunId &&
|
||||
active.has(previous.attemptId)
|
||||
) {
|
||||
if (isJoinableRunningAttempt(previous, processRunId, active)) {
|
||||
return { work: previous, launch: false };
|
||||
}
|
||||
const data = {
|
||||
|
||||
Reference in New Issue
Block a user