BackgroundBuilder/Repositories/PostgresContatoRepository.cs

72 lines
2.6 KiB
C#

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<IEnumerable<Contato>> 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<Contato>(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);
}
}
}