72 lines
2.6 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|