using QRRapidoApp.Models; using QRRapidoApp.Models.ViewModels; namespace QRRapidoApp.Services { public interface IUserService { Task GetUserAsync(string userId); Task GetUserByEmailAsync(string email); Task GetUserByProviderAsync(string provider, string providerId); Task CreateUserAsync(string email, string name, string provider, string providerId); Task UpdateLastLoginAsync(string userId); Task ActivatePremiumStatus(string userId, string stripeSubscriptionId, DateTime expiryDate); Task DeactivatePremiumStatus(string stripeSubscriptionId); Task UpdateUserStripeCustomerIdAsync(string userId, string stripeCustomerId); Task GetUserByStripeCustomerIdAsync(string customerId); Task UpdateUserAsync(User user); Task GetDailyQRCountAsync(string? userId); Task IncrementDailyQRCountAsync(string userId); Task GetRemainingQRCountAsync(string userId); Task CanGenerateQRAsync(string? userId, bool isPremium); Task SaveQRToHistoryAsync(string? userId, QRGenerationResult qrResult, int costInCredits = 0); Task> GetUserQRHistoryAsync(string userId, int limit = 50); Task GetQRDataAsync(string qrId); Task DeleteQRFromHistoryAsync(string userId, string qrId); Task GetQRCountThisMonthAsync(string userId); Task GetUserEmailAsync(string userId); Task MarkPremiumCancelledAsync(string userId, DateTime cancelledAt); Task> GetUsersForHistoryCleanupAsync(DateTime cutoffDate); Task DeleteUserHistoryAsync(string userId); // QR Code Tracking (Analytics) - Premium feature Task GetQRByTrackingIdAsync(string trackingId); Task IncrementQRScanCountAsync(string trackingId); // Credit System & Deduplication Task DeductCreditAsync(string userId); Task AddCreditsAsync(string userId, int amount); Task IncrementFreeUsageAsync(string userId); Task FindDuplicateQRAsync(string userId, string contentHash); // Anonymous Security Task CheckAnonymousLimitAsync(string ipAddress, string deviceId); Task RegisterAnonymousUsageAsync(string ipAddress, string deviceId, string qrId); } }