using Dapper; using Npgsql; namespace SDG_Backend_Barracuda.Models; public record Card(int Id, string Value); public record CardInput(string Value); public interface ICardModel : IDatabaseModel { } public class CardModel(NpgsqlDataSource dataSource) : ICardModel { public async Task> GetAllAsync() { await using var connection = await dataSource.OpenConnectionAsync(); var sql = """SELECT "Id", "Value" FROM "Card";"""; return await connection.QueryAsync(sql); } public async Task GetByIdAsync(int id) { await using var connection = await dataSource.OpenConnectionAsync(); var sql = """SELECT "Id", "Value" FROM "Card" WHERE "Id" = @Id;"""; return await connection.QueryFirstOrDefaultAsync(sql, new { Id = id }); } public async Task CreateAsync(CardInput input) { await using var connection = await dataSource.OpenConnectionAsync(); var sql = """INSERT INTO "Card" ("Value") VALUES (@Value) RETURNING "Id", "Value";"""; return await connection.QuerySingleAsync(sql, input); } public async Task UpdateAsync(int id, CardInput input) { await using var connection = await dataSource.OpenConnectionAsync(); var sql = """UPDATE "Card" SET "Value" = @Value WHERE "Id" = @Id RETURNING "Id", "Value";"""; return await connection.QueryFirstOrDefaultAsync(sql, new { Id = id, Value = input.Value }); } public async Task DeleteAsync(int id) { await using var connection = await dataSource.OpenConnectionAsync(); var sql = """DELETE FROM "Card" WHERE "Id" = @Id;"""; var rowsAffected = await connection.ExecuteAsync(sql, new { Id = id }); return rowsAffected > 0; } }