style: align multiline ternary operators
Backend security / security (push) Successful in 8s
Backend verify / verify (push) Failing after 2m11s
Backend security / security (pull_request) Successful in 8s
Backend verify / verify (pull_request) Failing after 2m17s
Conventional commits / commits (pull_request) Successful in 34s
Backend security / security (push) Successful in 8s
Backend verify / verify (push) Failing after 2m11s
Backend security / security (pull_request) Successful in 8s
Backend verify / verify (pull_request) Failing after 2m17s
Conventional commits / commits (pull_request) Successful in 34s
This commit is contained in:
+10
-10
@@ -82,24 +82,24 @@ export class BrokerageOperationsSyncService {
|
||||
...intervals.map((interval) => interval.to.valueOf()),
|
||||
);
|
||||
const targets = intervals.map((interval) =>
|
||||
options.movingEnd && interval.to.valueOf() === movingTo ?
|
||||
{ ...interval, to: now } :
|
||||
interval,
|
||||
options.movingEnd && interval.to.valueOf() === movingTo
|
||||
? { ...interval, to: now }
|
||||
: interval,
|
||||
);
|
||||
const plan = planOperationRead(targets, coverage, now, options);
|
||||
const complete = plan.intervals.every(
|
||||
(interval) => interval.availability === 'complete',
|
||||
);
|
||||
const handle =
|
||||
!options.observe && plan.load.length ?
|
||||
await this.request(
|
||||
!options.observe && plan.load.length
|
||||
? await this.request(
|
||||
userId,
|
||||
plan.load,
|
||||
complete || Boolean(options.force),
|
||||
'screen',
|
||||
connection.revision,
|
||||
) :
|
||||
null;
|
||||
)
|
||||
: null;
|
||||
if (!options.observe && !options.force && options.history) {
|
||||
const accountIds = new Set(
|
||||
intervals.map((interval) => interval.accountId),
|
||||
@@ -267,9 +267,9 @@ export class BrokerageOperationsSyncService {
|
||||
Math.ceil(interval.to.valueOf() / MILLISECONDS_PER_SECOND) + UPSTREAM_RANGE_MARGIN_SECONDS,
|
||||
),
|
||||
},
|
||||
...(interval.instrumentUid ?
|
||||
{ instrumentId: interval.instrumentUid } :
|
||||
{}),
|
||||
...(interval.instrumentUid
|
||||
? { instrumentId: interval.instrumentUid }
|
||||
: {}),
|
||||
cursor,
|
||||
limit: operationsPageSize,
|
||||
state: 'OPERATION_STATE_EXECUTED',
|
||||
|
||||
@@ -86,13 +86,13 @@ export class BrokerageOperationsService {
|
||||
const filterKey = JSON.stringify([
|
||||
accountId,
|
||||
from.toISOString(),
|
||||
query.to ?
|
||||
new Date(
|
||||
/^\d{4}-\d{2}-\d{2}$/.test(query.to) ?
|
||||
`${query.to}T23:59:59.999Z` :
|
||||
query.to,
|
||||
).toISOString() :
|
||||
'now',
|
||||
query.to
|
||||
? new Date(
|
||||
/^\d{4}-\d{2}-\d{2}$/.test(query.to)
|
||||
? `${query.to}T23:59:59.999Z`
|
||||
: query.to,
|
||||
).toISOString()
|
||||
: 'now',
|
||||
query.instrumentUid ?? null,
|
||||
categories,
|
||||
limit,
|
||||
@@ -129,9 +129,9 @@ export class BrokerageOperationsService {
|
||||
source.priority === 'screen' &&
|
||||
source.accountId &&
|
||||
source.from &&
|
||||
source.to ?
|
||||
[{ accountId: source.accountId, from: source.from, to: source.to }] :
|
||||
[],
|
||||
source.to
|
||||
? [{ accountId: source.accountId, from: source.from, to: source.to }]
|
||||
: [],
|
||||
);
|
||||
if (query.sync !== 'observe') {
|
||||
const discovery = await this.membership.request(
|
||||
@@ -159,9 +159,9 @@ export class BrokerageOperationsService {
|
||||
accountId === 'all' || account.accountId === accountId,
|
||||
)
|
||||
.flatMap((account) =>
|
||||
currentRange.from < currentRange.to ?
|
||||
[{ accountId: account.accountId, ...currentRange }] :
|
||||
[],
|
||||
currentRange.from < currentRange.to
|
||||
? [{ accountId: account.accountId, ...currentRange }]
|
||||
: [],
|
||||
);
|
||||
await this.sync.readPlan(userId, targets, {
|
||||
movingEnd,
|
||||
@@ -181,16 +181,16 @@ export class BrokerageOperationsService {
|
||||
const saved = await this.repository.readPage(readInput);
|
||||
const accounts = saved?.connection.accounts ?? [];
|
||||
const targets = accounts.flatMap((account) =>
|
||||
from < to ?
|
||||
[
|
||||
from < to
|
||||
? [
|
||||
{
|
||||
accountId: account.accountId,
|
||||
from,
|
||||
to,
|
||||
instrumentUid: query.instrumentUid,
|
||||
},
|
||||
] :
|
||||
[],
|
||||
]
|
||||
: [],
|
||||
);
|
||||
const plan = planOperationRead(targets, saved?.coverage ?? [], now, {
|
||||
movingEnd,
|
||||
@@ -296,17 +296,17 @@ export class BrokerageOperationsService {
|
||||
const meta = investmentResourceMeta({
|
||||
resourceKey: `operations/${createHash('sha256').update(filterKey).digest('base64url')}`,
|
||||
dataRevision: saved?.binding ?? 'missing',
|
||||
availability: !available ?
|
||||
'missing' :
|
||||
complete ?
|
||||
'complete' :
|
||||
confirmed.length ?
|
||||
'partial' :
|
||||
'missing',
|
||||
availability: !available
|
||||
? 'missing'
|
||||
: complete
|
||||
? 'complete'
|
||||
: confirmed.length
|
||||
? 'partial'
|
||||
: 'missing',
|
||||
fetchedAt: lastSuccessfulAt,
|
||||
freshForMs: plan.intervals.some((interval) => interval.stale) ?
|
||||
STALE_FRESHNESS_MS :
|
||||
Number.POSITIVE_INFINITY,
|
||||
freshForMs: plan.intervals.some((interval) => interval.stale)
|
||||
? STALE_FRESHNESS_MS
|
||||
: Number.POSITIVE_INFINITY,
|
||||
work: work ?? saved?.membershipWork ?? null,
|
||||
dependencies: [membershipMeta, ...metadataDependencies],
|
||||
coverage: {
|
||||
@@ -320,8 +320,8 @@ export class BrokerageOperationsService {
|
||||
(interval) =>
|
||||
interval.accountId === account.accountId && interval.asOf,
|
||||
),
|
||||
) ?
|
||||
new Date(
|
||||
)
|
||||
? new Date(
|
||||
Math.min(
|
||||
...accounts.map((account) =>
|
||||
Math.max(
|
||||
@@ -334,42 +334,42 @@ export class BrokerageOperationsService {
|
||||
),
|
||||
),
|
||||
),
|
||||
).toISOString() :
|
||||
null,
|
||||
).toISOString()
|
||||
: null,
|
||||
historyBoundary: knownBoundary ? 'known' : 'unknown',
|
||||
historyState: saved?.work.some(
|
||||
(work) => work.state === 'running' && work.priority > operationsSyncPriority.screen,
|
||||
) ?
|
||||
'loading' :
|
||||
saved?.work.some(
|
||||
)
|
||||
? 'loading'
|
||||
: saved?.work.some(
|
||||
(work) => work.state === 'failed' && work.priority > operationsSyncPriority.screen,
|
||||
) ?
|
||||
'failed' :
|
||||
knownBoundary &&
|
||||
history.intervals.every(
|
||||
(interval) => interval.availability === 'complete',
|
||||
) ?
|
||||
'complete' :
|
||||
saved?.coverage.length ?
|
||||
'partial' :
|
||||
'missing',
|
||||
)
|
||||
? 'failed'
|
||||
: knownBoundary &&
|
||||
history.intervals.every(
|
||||
(interval) => interval.availability === 'complete',
|
||||
)
|
||||
? 'complete'
|
||||
: saved?.coverage.length
|
||||
? 'partial'
|
||||
: 'missing',
|
||||
},
|
||||
});
|
||||
const last = rows.at(LAST_ROW_INDEX);
|
||||
const hasNext = Boolean(saved && saved.rows.length > limit);
|
||||
return {
|
||||
data:
|
||||
meta.availability === 'missing' ?
|
||||
null :
|
||||
{
|
||||
meta.availability === 'missing'
|
||||
? null
|
||||
: {
|
||||
accountId,
|
||||
items: rows.map((row) => ({
|
||||
...mapBrokerageOperation(
|
||||
row.payload as TbankOperationItem,
|
||||
row.occurredAt,
|
||||
),
|
||||
...(accountId === 'all' ?
|
||||
{
|
||||
...(accountId === 'all'
|
||||
? {
|
||||
account: {
|
||||
id: row.accountId,
|
||||
name:
|
||||
@@ -377,8 +377,8 @@ export class BrokerageOperationsService {
|
||||
(account) => account.accountId === row.accountId,
|
||||
)?.name ?? row.accountId,
|
||||
},
|
||||
} :
|
||||
{}),
|
||||
}
|
||||
: {}),
|
||||
logoName:
|
||||
instruments
|
||||
.get(metadataKey(row.payload as TbankOperationItem))
|
||||
@@ -386,16 +386,16 @@ export class BrokerageOperationsService {
|
||||
})),
|
||||
hasNext,
|
||||
nextCursor:
|
||||
hasNext && last && saved ?
|
||||
this.encodeCursor({
|
||||
hasNext && last && saved
|
||||
? this.encodeCursor({
|
||||
binding: saved.binding,
|
||||
movingEnd,
|
||||
to: to.toISOString(),
|
||||
at: last.occurredAt.toISOString(),
|
||||
accountId: last.accountId,
|
||||
id: last.brokerOperationId,
|
||||
}) :
|
||||
null,
|
||||
})
|
||||
: null,
|
||||
observedAt: now.toISOString(),
|
||||
},
|
||||
meta,
|
||||
@@ -560,13 +560,13 @@ export class BrokerageOperationsService {
|
||||
// eslint-disable-next-line security/detect-object-injection -- The numeric index enumerates the three comparison periods.
|
||||
resourceKey: `income/${accountId}/${['selected', 'previous', 'yearAgo'][index]}/${period.key}`,
|
||||
dataRevision: saved?.binding ?? 'missing',
|
||||
availability: !known ?
|
||||
'missing' :
|
||||
complete ?
|
||||
'complete' :
|
||||
sources.length ?
|
||||
'partial' :
|
||||
'missing',
|
||||
availability: !known
|
||||
? 'missing'
|
||||
: complete
|
||||
? 'complete'
|
||||
: sources.length
|
||||
? 'partial'
|
||||
: 'missing',
|
||||
fetchedAt,
|
||||
freshForMs: plan.intervals.some((range) => range.stale) ? STALE_FRESHNESS_MS : Infinity,
|
||||
work,
|
||||
@@ -579,8 +579,8 @@ export class BrokerageOperationsService {
|
||||
confirmed,
|
||||
).map(serialize),
|
||||
asOf:
|
||||
complete && targets.length ?
|
||||
new Date(
|
||||
complete && targets.length
|
||||
? new Date(
|
||||
Math.min(
|
||||
...targets.map((target) =>
|
||||
Math.max(
|
||||
@@ -595,24 +595,24 @@ export class BrokerageOperationsService {
|
||||
),
|
||||
),
|
||||
),
|
||||
).toISOString() :
|
||||
null,
|
||||
).toISOString()
|
||||
: null,
|
||||
historyBoundary: (saved?.connection.accounts ?? []).every(
|
||||
(account) => account.openedOn,
|
||||
) ?
|
||||
'known' :
|
||||
'unknown',
|
||||
historyState: complete ?
|
||||
'complete' :
|
||||
sources.length ?
|
||||
'partial' :
|
||||
'missing',
|
||||
)
|
||||
? 'known'
|
||||
: 'unknown',
|
||||
historyState: complete
|
||||
? 'complete'
|
||||
: sources.length
|
||||
? 'partial'
|
||||
: 'missing',
|
||||
},
|
||||
});
|
||||
return {
|
||||
meta,
|
||||
items: complete ?
|
||||
(saved?.rows ?? [])
|
||||
items: complete
|
||||
? (saved?.rows ?? [])
|
||||
.filter((row) =>
|
||||
plan.intervals.some(
|
||||
(interval) =>
|
||||
@@ -626,8 +626,8 @@ export class BrokerageOperationsService {
|
||||
row.payload as TbankOperationItem,
|
||||
row.occurredAt,
|
||||
),
|
||||
...(accountId === 'all' ?
|
||||
{
|
||||
...(accountId === 'all'
|
||||
? {
|
||||
account: {
|
||||
id: row.accountId,
|
||||
name:
|
||||
@@ -635,10 +635,10 @@ export class BrokerageOperationsService {
|
||||
(account) => account.accountId === row.accountId,
|
||||
)?.name ?? row.accountId,
|
||||
},
|
||||
} :
|
||||
{}),
|
||||
})) :
|
||||
null,
|
||||
}
|
||||
: {}),
|
||||
}))
|
||||
: null,
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
@@ -93,12 +93,12 @@ export function uncoveredOperationIntervals(
|
||||
return [fragment];
|
||||
}
|
||||
return [
|
||||
...(fragment.from < covered.from ?
|
||||
[{ ...fragment, to: covered.from }] :
|
||||
[]),
|
||||
...(covered.to < fragment.to ?
|
||||
[{ ...fragment, from: covered.to }] :
|
||||
[]),
|
||||
...(fragment.from < covered.from
|
||||
? [{ ...fragment, to: covered.from }]
|
||||
: []),
|
||||
...(covered.to < fragment.to
|
||||
? [{ ...fragment, from: covered.to }]
|
||||
: []),
|
||||
];
|
||||
});
|
||||
}
|
||||
@@ -176,20 +176,20 @@ export function planOperationRead(
|
||||
// Completeness is bounded by the observed end, never by the new wall clock.
|
||||
return {
|
||||
...effective,
|
||||
availability: complete ?
|
||||
('complete' as const) :
|
||||
sources.length ?
|
||||
('partial' as const) :
|
||||
('missing' as const),
|
||||
availability: complete
|
||||
? ('complete' as const)
|
||||
: sources.length
|
||||
? ('partial' as const)
|
||||
: ('missing' as const),
|
||||
stale,
|
||||
asOf: sources.length ?
|
||||
new Date(
|
||||
asOf: sources.length
|
||||
? new Date(
|
||||
Math.min(
|
||||
effective.to.valueOf(),
|
||||
Math.max(...sources.map((row) => row.asOf.valueOf())),
|
||||
),
|
||||
) :
|
||||
null,
|
||||
)
|
||||
: null,
|
||||
};
|
||||
});
|
||||
return { intervals, load: operationIntervals(load) };
|
||||
|
||||
@@ -61,14 +61,14 @@ export function mapBrokerageOperation(
|
||||
logoName: null,
|
||||
payment: money(operation.payment),
|
||||
quantity:
|
||||
(operationCategory(operation.type) === 'trade' ?
|
||||
operation.quantityDone :
|
||||
operation.quantity) === undefined ?
|
||||
null :
|
||||
String(
|
||||
operationCategory(operation.type) === 'trade' ?
|
||||
operation.quantityDone :
|
||||
operation.quantity,
|
||||
(operationCategory(operation.type) === 'trade'
|
||||
? operation.quantityDone
|
||||
: operation.quantity) === undefined
|
||||
? null
|
||||
: String(
|
||||
operationCategory(operation.type) === 'trade'
|
||||
? operation.quantityDone
|
||||
: operation.quantity,
|
||||
),
|
||||
price: money(operation.price),
|
||||
accruedInterest: money(operation.accruedInt),
|
||||
@@ -82,9 +82,9 @@ function text(value: string | undefined): null | string {
|
||||
|
||||
function money(value: TbankMoney | undefined) {
|
||||
const currency = value?.currency?.trim().toUpperCase();
|
||||
return currency && value ?
|
||||
{ currency, value: formatDecimal(decimal(value)) } :
|
||||
null;
|
||||
return currency && value
|
||||
? { currency, value: formatDecimal(decimal(value)) }
|
||||
: null;
|
||||
}
|
||||
|
||||
export function operationTimestamp(
|
||||
|
||||
+69
-69
@@ -110,9 +110,9 @@ export class BrokerageOperationsRepository {
|
||||
// eslint-disable-next-line sonarjs/no-alphabetical-sort -- Code-unit ordering is intentional for canonical keys and ISO dates; locale collation would change persisted bindings.
|
||||
const oldest = accounts.map((account) => account.openedOn).sort()[0];
|
||||
const openedAt =
|
||||
oldest && accounts.every((account) => account.openedOn) ?
|
||||
new Date(`${oldest}T00:00:00+03:00`) :
|
||||
undefined;
|
||||
oldest && accounts.every((account) => account.openedOn)
|
||||
? new Date(`${oldest}T00:00:00+03:00`)
|
||||
: undefined;
|
||||
const periods = input.periods?.(openedAt).map((period) => {
|
||||
const now = new Date();
|
||||
const bounds = dateOnlyBounds(period, now);
|
||||
@@ -176,21 +176,21 @@ export class BrokerageOperationsRepository {
|
||||
const rows = await tx.tbankOperation.findMany({
|
||||
where: {
|
||||
...scope,
|
||||
...(periods ?
|
||||
{
|
||||
...(periods
|
||||
? {
|
||||
OR: periods.map((period) => ({
|
||||
occurredAt: { gte: period.from, lt: period.to },
|
||||
})),
|
||||
} :
|
||||
{ occurredAt: { gte: input.from, lt: input.to } }),
|
||||
...(input.instrumentUid ?
|
||||
{ instrumentUid: input.instrumentUid } :
|
||||
{}),
|
||||
...(input.categories.length ?
|
||||
{ category: { in: input.categories } } :
|
||||
{}),
|
||||
...(after ?
|
||||
{
|
||||
}
|
||||
: { occurredAt: { gte: input.from, lt: input.to } }),
|
||||
...(input.instrumentUid
|
||||
? { instrumentUid: input.instrumentUid }
|
||||
: {}),
|
||||
...(input.categories.length
|
||||
? { category: { in: input.categories } }
|
||||
: {}),
|
||||
...(after
|
||||
? {
|
||||
OR: [
|
||||
{ occurredAt: { lt: new Date(after.at) } },
|
||||
{
|
||||
@@ -203,8 +203,8 @@ export class BrokerageOperationsRepository {
|
||||
brokerOperationId: { gt: after.id },
|
||||
},
|
||||
],
|
||||
} :
|
||||
{}),
|
||||
}
|
||||
: {}),
|
||||
},
|
||||
orderBy: [
|
||||
{ occurredAt: 'desc' },
|
||||
@@ -305,9 +305,9 @@ export class BrokerageOperationsRepository {
|
||||
},
|
||||
data: {
|
||||
historyFrom: new Date(
|
||||
account.openedOn ?
|
||||
`${account.openedOn}T00:00:00Z` :
|
||||
'1970-01-01T00:00:00Z',
|
||||
account.openedOn
|
||||
? `${account.openedOn}T00:00:00Z`
|
||||
: '1970-01-01T00:00:00Z',
|
||||
),
|
||||
historyBoundary: account.openedOn ? 'known' : 'unknown',
|
||||
},
|
||||
@@ -383,42 +383,42 @@ export class BrokerageOperationsRepository {
|
||||
) {
|
||||
const pending = previousIntent?.intervals.map(decodeInterval) ?? [];
|
||||
const additions =
|
||||
previous.scopeKey === scopeKey ?
|
||||
[] :
|
||||
uncoveredOperationIntervals(intervals, pending);
|
||||
previous.scopeKey === scopeKey
|
||||
? []
|
||||
: uncoveredOperationIntervals(intervals, pending);
|
||||
const work = await tx.tbankSyncWork.update({
|
||||
where: { id: previous.id },
|
||||
data: {
|
||||
intent: {
|
||||
atomic: previousIntent?.atomic ?? publicationAtomic,
|
||||
atomicIntervals: previousIntent?.atomic ?
|
||||
[
|
||||
atomicIntervals: previousIntent?.atomic
|
||||
? [
|
||||
...new Set([
|
||||
...(previousIntent.atomicIntervals ??
|
||||
previousIntent.intervals),
|
||||
...additions.map(intervalKey),
|
||||
]),
|
||||
] :
|
||||
[],
|
||||
]
|
||||
: [],
|
||||
screenIntervals: [
|
||||
...new Set([
|
||||
...(previousIntent?.screenIntervals ??
|
||||
(previous.priority === operationsSyncPriority.screen ?
|
||||
(previousIntent?.intervals ?? []) :
|
||||
[])),
|
||||
...(priority === operationsSyncPriority.screen ?
|
||||
[...pending, ...additions]
|
||||
(previous.priority === operationsSyncPriority.screen
|
||||
? (previousIntent?.intervals ?? [])
|
||||
: [])),
|
||||
...(priority === operationsSyncPriority.screen
|
||||
? [...pending, ...additions]
|
||||
.filter((item) =>
|
||||
intervals.some((target) =>
|
||||
operationIntervalsOverlap(item, target),
|
||||
),
|
||||
)
|
||||
.map(intervalKey) :
|
||||
[]),
|
||||
.map(intervalKey)
|
||||
: []),
|
||||
]),
|
||||
],
|
||||
intervals: (priority < previous.priority ?
|
||||
[
|
||||
intervals: (priority < previous.priority
|
||||
? [
|
||||
...pending.filter((item) =>
|
||||
intervals.some((target) =>
|
||||
operationIntervalsOverlap(item, target),
|
||||
@@ -431,8 +431,8 @@ export class BrokerageOperationsRepository {
|
||||
operationIntervalsOverlap(item, target),
|
||||
),
|
||||
),
|
||||
] :
|
||||
[...pending, ...additions]
|
||||
]
|
||||
: [...pending, ...additions]
|
||||
).map(intervalKey),
|
||||
},
|
||||
priority: Math.min(priority, previous.priority),
|
||||
@@ -444,9 +444,9 @@ export class BrokerageOperationsRepository {
|
||||
previous &&
|
||||
previous.state !== 'complete' &&
|
||||
previous.state !== 'superseded';
|
||||
const retained = recovering ?
|
||||
(previousIntent?.intervals.map(decodeInterval) ?? []) :
|
||||
[];
|
||||
const retained = recovering
|
||||
? (previousIntent?.intervals.map(decodeInterval) ?? [])
|
||||
: [];
|
||||
// A bridge between two active groups must fence both producers before
|
||||
// either can publish a subset of the newly combined result.
|
||||
for (const joined of touching) {
|
||||
@@ -469,23 +469,23 @@ export class BrokerageOperationsRepository {
|
||||
await tx.tbankSyncStage.deleteMany({ where: { workId: previous.id } });
|
||||
}
|
||||
const targets =
|
||||
recovering && !upgradeGroup && touching.length <= SINGLE_WORK_GROUP ?
|
||||
previous?.scopeKey === scopeKey ?
|
||||
retained :
|
||||
[...retained, ...uncoveredOperationIntervals(intervals, retained)] :
|
||||
operationIntervals([...retained, ...intervals]);
|
||||
recovering && !upgradeGroup && touching.length <= SINGLE_WORK_GROUP
|
||||
? previous?.scopeKey === scopeKey
|
||||
? retained
|
||||
: [...retained, ...uncoveredOperationIntervals(intervals, retained)]
|
||||
: operationIntervals([...retained, ...intervals]);
|
||||
const atomicTargets = [
|
||||
...(publicationAtomic ? intervals : []),
|
||||
...(recovering && previousIntent?.atomic ?
|
||||
(previousIntent.atomicIntervals ?? previousIntent.intervals).map(
|
||||
...(recovering && previousIntent?.atomic
|
||||
? (previousIntent.atomicIntervals ?? previousIntent.intervals).map(
|
||||
decodeInterval,
|
||||
) :
|
||||
[]),
|
||||
)
|
||||
: []),
|
||||
...touching.flatMap((work) => {
|
||||
const joined = work.intent as OperationsIntent;
|
||||
return joined.atomic ?
|
||||
(joined.atomicIntervals ?? joined.intervals).map(decodeInterval) :
|
||||
[];
|
||||
return joined.atomic
|
||||
? (joined.atomicIntervals ?? joined.intervals).map(decodeInterval)
|
||||
: [];
|
||||
}),
|
||||
];
|
||||
const intent = {
|
||||
@@ -506,9 +506,9 @@ export class BrokerageOperationsRepository {
|
||||
)) ||
|
||||
(
|
||||
previousIntent?.screenIntervals ??
|
||||
(previous?.priority === operationsSyncPriority.screen ?
|
||||
(previousIntent?.intervals ?? []) :
|
||||
[])
|
||||
(previous?.priority === operationsSyncPriority.screen
|
||||
? (previousIntent?.intervals ?? [])
|
||||
: [])
|
||||
).some((key) =>
|
||||
operationIntervalsOverlap(target, decodeInterval(key)),
|
||||
),
|
||||
@@ -563,20 +563,20 @@ export class BrokerageOperationsRepository {
|
||||
marker.payload as PageProgress,
|
||||
]),
|
||||
);
|
||||
const group = intent.atomic ?
|
||||
(intent.atomicIntervals ?? intent.intervals) :
|
||||
intent.intervals;
|
||||
const group = intent.atomic
|
||||
? (intent.atomicIntervals ?? intent.intervals)
|
||||
: intent.intervals;
|
||||
const nextKey = group.find((key) => !progress.get(key)?.complete);
|
||||
return {
|
||||
priority: work.priority,
|
||||
atomic: intent.atomic,
|
||||
intervals: group.map(decodeInterval),
|
||||
next: nextKey ?
|
||||
{
|
||||
next: nextKey
|
||||
? {
|
||||
interval: decodeInterval(nextKey),
|
||||
cursor: progress.get(nextKey)?.cursor || undefined,
|
||||
} :
|
||||
null,
|
||||
}
|
||||
: null,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -795,9 +795,9 @@ export class BrokerageOperationsRepository {
|
||||
where: {
|
||||
...scope,
|
||||
occurredAt: { gte: interval.from, lt: interval.to },
|
||||
...(interval.instrumentUid ?
|
||||
{ instrumentUid: interval.instrumentUid } :
|
||||
{}),
|
||||
...(interval.instrumentUid
|
||||
? { instrumentUid: interval.instrumentUid }
|
||||
: {}),
|
||||
},
|
||||
});
|
||||
const incoming = new Set(rows.map((row) => row.itemKey));
|
||||
@@ -902,9 +902,9 @@ export class BrokerageOperationsRepository {
|
||||
intent.screenIntervals ??
|
||||
(work.priority === operationsSyncPriority.screen ? intent.intervals : [])
|
||||
).includes(key),
|
||||
) ?
|
||||
operationsSyncPriority.screen :
|
||||
operationsSyncPriority.history,
|
||||
)
|
||||
? operationsSyncPriority.screen
|
||||
: operationsSyncPriority.history,
|
||||
progress: { remainingIntervals: remaining.length },
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user