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); Task> GetUserQRHistoryAsync(string userId, int limit = 50); Task GetQRDataAsync(string qrId); Task GetQRCountThisMonthAsync(string userId); Task GetUserEmailAsync(string userId); Task MarkPremiumCancelledAsync(string userId, DateTime cancelledAt); Task> GetUsersForHistoryCleanupAsync(DateTime cutoffDate); Task DeleteUserHistoryAsync(string userId); } }