43 lines
1.6 KiB
C#
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();
|
|
}
|
|
}
|