using System.Collections.Generic; using System.Threading.Tasks; using Dapper; using Npgsql; using BackgroundBuilder.Models; using BackgroundBuilder.Services; namespace BackgroundBuilder.Repositories { public class PostgresContatoRepository(DatabaseService db) : IContatoRepository { private readonly DatabaseService _db = db; public async Task> GetAllAsync() { using var conn = _db.CreateConnection(); const string sql = @" SELECT ramal AS Ramal, nome AS Nome, email AS Email, area AS Area, aniversario AS Aniversario, ""isComando"" AS IsComando FROM contatos;"; return await conn.QueryAsync(sql); } public async Task AddAsync(Contato c) { using var conn = _db.CreateConnection(); const string sql = @" INSERT INTO contatos (ramal, nome, email, area, aniversario, ""isComando"") VALUES (@Ramal, @Nome, @Email, @Area, @Aniversario, @IsComando);"; await conn.ExecuteAsync(sql, c); } public async Task DeleteAsync(string ramal) { using var conn = _db.CreateConnection(); const string sql = "DELETE FROM contatos WHERE ramal=@Ramal;"; await conn.ExecuteAsync(sql, new { Ramal = ramal }); } public async Task InsertUpdateAsync(Contato c) { using var conn = _db.CreateConnection(); string Ramal = $"'{c.Ramal}'"; string Nome = c.Nome is null ? "null" : $"'{c.Nome}'"; string Email = c.Email is null ? "null" : $"'{c.Email}'"; string Area = c.Area == "" ? "null" : $"'{c.Area}'"; string Aniversario = c.Aniversario is null ? "null" : $"'{c.Aniversario:yyyy-MM-dd}'"; string IsComando = c.IsComando ? "true" : "false"; string sql = @$" INSERT INTO contatos (ramal, nome, email, area, aniversario, ""isComando"") VALUES ({Ramal}, {Nome}, {Email}, {Area}, {Aniversario:YYYY-MM-DD}, {IsComando}) ON CONFLICT (ramal) DO UPDATE SET nome = EXCLUDED.nome, email = EXCLUDED.email, area = EXCLUDED.area, aniversario = EXCLUDED.aniversario, ""isComando"" = EXCLUDED.""isComando"";"; await conn.ExecuteAsync(sql); } } }