PlotDirector/PlotLine/Data/SubscriptionRepository.cs
2026-06-07 10:13:16 +01:00

43 lines
1.6 KiB
C#

using System.Data;
using Dapper;
using PlotLine.Models;
namespace PlotLine.Data;
public interface ISubscriptionRepository
{
Task<UserSubscriptionDetail?> GetCurrentSubscriptionAsync(int userId);
Task<SubscriptionLevel?> GetSubscriptionLevelAsync(int subscriptionLevelId);
Task<IReadOnlyList<SubscriptionLevel>> GetActiveSubscriptionLevelsAsync();
}
public sealed class SubscriptionRepository(ISqlConnectionFactory connectionFactory) : ISubscriptionRepository
{
public async Task<UserSubscriptionDetail?> GetCurrentSubscriptionAsync(int userId)
{
using var connection = connectionFactory.CreateConnection();
return await connection.QuerySingleOrDefaultAsync<UserSubscriptionDetail>(
"dbo.UserSubscription_GetCurrent",
new { UserID = userId },
commandType: CommandType.StoredProcedure);
}
public async Task<SubscriptionLevel?> GetSubscriptionLevelAsync(int subscriptionLevelId)
{
using var connection = connectionFactory.CreateConnection();
return await connection.QuerySingleOrDefaultAsync<SubscriptionLevel>(
"dbo.SubscriptionLevel_Get",
new { SubscriptionLevelID = subscriptionLevelId },
commandType: CommandType.StoredProcedure);
}
public async Task<IReadOnlyList<SubscriptionLevel>> GetActiveSubscriptionLevelsAsync()
{
using var connection = connectionFactory.CreateConnection();
var rows = await connection.QueryAsync<SubscriptionLevel>(
"dbo.SubscriptionLevel_ListActive",
commandType: CommandType.StoredProcedure);
return rows.ToList();
}
}