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:
@@ -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