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);
}