mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-02 02:00:49 +08:00
d975bf46fb
#### PR Dependency Tree * **PR #14783** 👈 This tree was auto-generated by [Charcoal](https://github.com/danerwilliams/charcoal) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Configurable request timeout for calendar integrations. * Calendar polling now enqueues per-subscription sync jobs (larger batch) for improved throughput. * **Bug Fixes / Improvements** * Persisted next-sync timestamps and retry counts for more reliable scheduling and retry behavior. * Exponential backoff and webhook renewal now update scheduling consistently. * **Refactor** * Calendar sync flow moved to a job-queue-driven design for better concurrency and observability. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
34 lines
801 B
TypeScript
34 lines
801 B
TypeScript
import { Injectable } from '@nestjs/common';
|
|
import { Cron, CronExpression } from '@nestjs/schedule';
|
|
|
|
import { JobQueue } from '../../base';
|
|
import { Models } from '../../models';
|
|
|
|
const CALENDAR_POLL_BATCH_SIZE = 200;
|
|
|
|
@Injectable()
|
|
export class CalendarCronJobs {
|
|
constructor(
|
|
private readonly models: Models,
|
|
private readonly queue: JobQueue
|
|
) {}
|
|
|
|
@Cron(CronExpression.EVERY_MINUTE)
|
|
async pollAccounts() {
|
|
const subscriptions = await this.models.calendarSubscription.listDueForSync(
|
|
new Date(),
|
|
CALENDAR_POLL_BATCH_SIZE
|
|
);
|
|
|
|
await Promise.allSettled(
|
|
subscriptions.map(({ id }) =>
|
|
this.queue.add(
|
|
'calendar.syncSubscription',
|
|
{ subscriptionId: id, reason: 'polling' },
|
|
{ jobId: id }
|
|
)
|
|
)
|
|
);
|
|
}
|
|
}
|