using LctMonolith.Domain.Entities; using LctMonolith.Services.Models; namespace LctMonolith.Services; /// Service for issuing JWT and refresh tokens. public interface ITokenService { Task IssueAsync(AppUser user, CancellationToken ct = default); Task RefreshAsync(string refreshToken, CancellationToken ct = default); Task RevokeAsync(string refreshToken, CancellationToken ct = default); } /// Gamification progression logic (awards, rank upgrade). public interface IGamificationService { Task GetProgressAsync(Guid userId, CancellationToken ct = default); Task ApplyMissionCompletionAsync(Guid userId, Mission mission, CancellationToken ct = default); Task EvaluateRankUpgradeAsync(Guid userId, CancellationToken ct = default); } /// Mission management and user mission state transitions. public interface IMissionService { Task CreateMissionAsync(CreateMissionModel model, CancellationToken ct = default); Task> GetAvailableMissionsAsync(Guid userId, CancellationToken ct = default); Task UpdateStatusAsync(Guid userId, Guid missionId, MissionStatus status, string? submissionData, CancellationToken ct = default); } /// Store and inventory operations. public interface IStoreService { Task> GetActiveItemsAsync(CancellationToken ct = default); Task PurchaseAsync(Guid userId, Guid itemId, int quantity, CancellationToken ct = default); } /// User notifications (in-app) management. public interface INotificationService { Task CreateAsync(Guid userId, string type, string title, string message, CancellationToken ct = default); Task> GetUnreadAsync(Guid userId, CancellationToken ct = default); Task> GetAllAsync(Guid userId, int take = 100, CancellationToken ct = default); Task MarkReadAsync(Guid userId, Guid notificationId, CancellationToken ct = default); Task MarkAllReadAsync(Guid userId, CancellationToken ct = default); } /// Inventory querying (owned artifacts, store items). public interface IInventoryService { Task> GetStoreInventoryAsync(Guid userId, CancellationToken ct = default); Task> GetArtifactsAsync(Guid userId, CancellationToken ct = default); } /// Basic analytics / aggregated metrics. public interface IAnalyticsService { Task GetSummaryAsync(CancellationToken ct = default); }