Feat Varios 3
This commit is contained in:
63
src/SIGCM.Infrastructure/Repositories/CouponRepository.cs
Normal file
63
src/SIGCM.Infrastructure/Repositories/CouponRepository.cs
Normal file
@@ -0,0 +1,63 @@
|
||||
using Dapper;
|
||||
using SIGCM.Domain.Entities;
|
||||
using SIGCM.Domain.Interfaces;
|
||||
using SIGCM.Infrastructure.Data;
|
||||
|
||||
namespace SIGCM.Infrastructure.Repositories;
|
||||
|
||||
public class CouponRepository : ICouponRepository
|
||||
{
|
||||
private readonly IDbConnectionFactory _connectionFactory;
|
||||
|
||||
public CouponRepository(IDbConnectionFactory connectionFactory)
|
||||
{
|
||||
_connectionFactory = connectionFactory;
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<Coupon>> GetAllAsync()
|
||||
{
|
||||
using var conn = _connectionFactory.CreateConnection();
|
||||
return await conn.QueryAsync<Coupon>("SELECT * FROM Coupons ORDER BY CreatedAt DESC");
|
||||
}
|
||||
|
||||
public async Task<int> CreateAsync(Coupon coupon)
|
||||
{
|
||||
using var conn = _connectionFactory.CreateConnection();
|
||||
var sql = @"
|
||||
INSERT INTO Coupons (Code, DiscountType, DiscountValue, ExpiryDate, MaxUsages, MaxUsagesPerUser, IsActive, CreatedAt)
|
||||
VALUES (@Code, @DiscountType, @DiscountValue, @ExpiryDate, @MaxUsages, @MaxUsagesPerUser, @IsActive, GETUTCDATE());
|
||||
SELECT CAST(SCOPE_IDENTITY() as int);";
|
||||
return await conn.QuerySingleAsync<int>(sql, coupon);
|
||||
}
|
||||
|
||||
public async Task DeleteAsync(int id)
|
||||
{
|
||||
using var conn = _connectionFactory.CreateConnection();
|
||||
await conn.ExecuteAsync("DELETE FROM Coupons WHERE Id = @Id", new { Id = id });
|
||||
}
|
||||
|
||||
public async Task<Coupon?> GetByCodeAsync(string code)
|
||||
{
|
||||
using var conn = _connectionFactory.CreateConnection();
|
||||
return await conn.QuerySingleOrDefaultAsync<Coupon>(
|
||||
"SELECT * FROM Coupons WHERE Code = @Code AND IsActive = 1",
|
||||
new { Code = code });
|
||||
}
|
||||
|
||||
public async Task IncrementUsageAsync(int id)
|
||||
{
|
||||
using var conn = _connectionFactory.CreateConnection();
|
||||
await conn.ExecuteAsync(
|
||||
"UPDATE Coupons SET UsageCount = UsageCount + 1 WHERE Id = @Id",
|
||||
new { Id = id });
|
||||
}
|
||||
|
||||
public async Task<int> CountUserUsageAsync(int userId, string couponCode)
|
||||
{
|
||||
using var conn = _connectionFactory.CreateConnection();
|
||||
// Check listings for this user with this coupon code
|
||||
// Note: CouponCode column was added to Listings
|
||||
var sql = "SELECT COUNT(1) FROM Listings WHERE UserId = @UserId AND CouponCode = @CouponCode";
|
||||
return await conn.ExecuteScalarAsync<int>(sql, new { UserId = userId, CouponCode = couponCode });
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user