feat: landing page + logo, dev-mode banner + sync cap, non-blocking sync with progress splash
This commit is contained in:
@@ -9,7 +9,11 @@ public interface ISyncService
|
||||
{
|
||||
Task RunFullSyncAsync(Guid userId, CancellationToken ct = default);
|
||||
Task RunIncrementalSyncAsync(Guid userId, CancellationToken ct = default);
|
||||
/// <summary>Marks the sync as starting and queues it for the background worker.</summary>
|
||||
Task QueueSyncAsync(Guid userId, bool fullSync, CancellationToken ct = default);
|
||||
Task<SyncStatus> GetStatusAsync(Guid userId, CancellationToken ct = default);
|
||||
/// <summary>Progress snapshot for the sync splash screen.</summary>
|
||||
Task<DTOs.SyncProgressDto> GetProgressAsync(Guid userId, CancellationToken ct = default);
|
||||
}
|
||||
|
||||
public interface IAnalyticsService
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
namespace InboxIntel.Application.Abstractions;
|
||||
|
||||
/// <summary>
|
||||
/// Hands sync work to a background worker so HTTP triggers return immediately
|
||||
/// and the UI can poll progress (non-blocking architecture).
|
||||
/// </summary>
|
||||
public interface ISyncQueue
|
||||
{
|
||||
void Enqueue(Guid userId, bool fullSync);
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
namespace InboxIntel.Application.DTOs;
|
||||
|
||||
/// <summary>
|
||||
/// Live sync progress for the splash screen. <see cref="Total"/> reflects the
|
||||
/// dev cap when one is configured, so the progress bar fills correctly.
|
||||
/// </summary>
|
||||
public record SyncProgressDto(
|
||||
string Status,
|
||||
int Processed,
|
||||
int Total,
|
||||
bool IsRunning,
|
||||
DateTimeOffset? LastSuccessfulSyncUtc,
|
||||
string? LastError);
|
||||
Reference in New Issue
Block a user