import 'package:cyberhybridhub_server/trading/backfill_sync_item.dart'; import 'package:cyberhybridhub_server/trading/market_history_admin_logic.dart'; AdminSyncRunRecord adminSyncRun({ required int id, required String kind, required DateTime startedAt, DateTime? finishedAt, int rowsWritten = 0, int rowsRemoved = 0, int slotsSynced = 0, List? backfillItems, String? error, }) { return AdminSyncRunRecord( id: id, kind: kind, startedAt: startedAt, finishedAt: finishedAt, rowsWritten: rowsWritten, rowsRemoved: rowsRemoved, slotsSynced: slotsSynced, backfillItems: backfillItems ?? const [], error: error, ); } List fixtureAllSuccessRecentFirst(DateTime base) { return [ adminSyncRun( id: 3, kind: 'cleanup', startedAt: base, finishedAt: base.add(const Duration(minutes: 1)), rowsRemoved: 100, ), adminSyncRun( id: 2, kind: 'backfill', startedAt: base.subtract(const Duration(hours: 1)), finishedAt: base.subtract(const Duration(minutes: 59)), rowsWritten: 500, ), adminSyncRun( id: 1, kind: 'universe', startedAt: base.subtract(const Duration(hours: 2)), finishedAt: base.subtract(const Duration(hours: 1, minutes: 59)), rowsWritten: 8000, ), ]; } List fixtureRateLimitUnresolved(DateTime base) { return [ adminSyncRun( id: 10, kind: 'backfill', startedAt: base, finishedAt: base.add(const Duration(minutes: 2)), rowsWritten: 0, error: 'AlpacaMarketDataException: rate limited: 429', ), ]; } List fixtureFailedThenSuccessSameKind(DateTime base) { return [ adminSyncRun( id: 21, kind: 'backfill', startedAt: base.subtract(const Duration(hours: 2)), finishedAt: base.subtract(const Duration(hours: 1, minutes: 58)), error: '429', ), adminSyncRun( id: 22, kind: 'backfill', startedAt: base, finishedAt: base.add(const Duration(minutes: 1)), rowsWritten: 1200, ), ]; } List fixturePartialBackfillError(DateTime base) { return [ adminSyncRun( id: 30, kind: 'backfill', startedAt: base, finishedAt: base.add(const Duration(minutes: 5)), rowsWritten: 12000, error: 'batch MSFT,AAPL: server 500', ), ]; } List fixtureInProgressStale(DateTime base) { return [ adminSyncRun( id: 40, kind: 'cleanup', startedAt: base.subtract(const Duration(hours: 2)), finishedAt: null, ), ]; } List fixtureMixedKindsMixedOutcomes(DateTime base) { return [ adminSyncRun( id: 50, kind: 'cleanup', startedAt: base, finishedAt: base.add(const Duration(minutes: 1)), rowsRemoved: 4200, ), adminSyncRun( id: 51, kind: 'backfill', startedAt: base.subtract(const Duration(hours: 1)), finishedAt: base.subtract(const Duration(minutes: 55)), rowsWritten: 8000, error: 'partial batch failure', ), adminSyncRun( id: 52, kind: 'universe', startedAt: base.subtract(const Duration(hours: 3)), finishedAt: base.subtract(const Duration(hours: 2, minutes: 58)), rowsWritten: 8200, ), adminSyncRun( id: 53, kind: 'backfill', startedAt: base.subtract(const Duration(hours: 5)), finishedAt: base.subtract(const Duration(hours: 4, minutes: 58)), error: '429', ), ]; }