feat: landing page + logo, dev-mode banner + sync cap, non-blocking sync with progress splash

This commit is contained in:
cesnimda
2026-06-30 16:58:35 +02:00
parent dcb939e4f2
commit fe5920919f
29 changed files with 552 additions and 39 deletions
@@ -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);