73 lines
3.2 KiB
C#
73 lines
3.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Npgsql;
|
|
using PI_Assync_PLD.Models;
|
|
using Windows.Devices.Sensors;
|
|
|
|
public class PostgresRepository : IDataRepository
|
|
{
|
|
private readonly string _connectionString;
|
|
|
|
public PostgresRepository(string environment)
|
|
{
|
|
_connectionString = environment == "dev"
|
|
? "Server=smart-energia-dev-pgsql.cykff7tj7mik.us-east-1.rds.amazonaws.com; Port=5432; Database=smartimptest; User Id=postgres; Password=VfHml#Z78!%kvvNM;"
|
|
: "Server=smart-energia-dev-pgsql.cykff7tj7mik.us-east-1.rds.amazonaws.com; Port=5432; Database=smartenergiaprod; User Id=postgres; Password=VfHml#Z78!%kvvNM;";
|
|
}
|
|
|
|
public DateTime ObterDataInicial()
|
|
{
|
|
using var conn = new NpgsqlConnection(_connectionString);
|
|
conn.Open();
|
|
|
|
string query = "SELECT TO_DATE('1899-12-30', 'YYYY-MM-DD') + INTERVAL '1' DAY * MAX(dia_num) AS ultimo_dia FROM pld";
|
|
using var cmd = new NpgsqlCommand(query, conn);
|
|
using var reader = cmd.ExecuteReader();
|
|
|
|
return reader.Read() && DateTime.TryParse(reader["ultimo_dia"]?.ToString(), out var data)
|
|
? data.AddDays(1)
|
|
: DateTime.Now.AddYears(-2);
|
|
}
|
|
|
|
public void SalvarPLDs(List<PLDModel> plds, DateTime ultimaData)
|
|
{
|
|
using var conn = new NpgsqlConnection(_connectionString);
|
|
conn.Open();
|
|
|
|
// Filtrar apenas os PLDs mais recentes
|
|
var novosPLDs = plds.FindAll(pld => pld.Dia >= ultimaData);
|
|
if (novosPLDs.Count == 0) return; // Nenhum dado novo, então sair da função
|
|
|
|
using var transaction = conn.BeginTransaction();
|
|
|
|
var sb = new System.Text.StringBuilder();
|
|
sb.Append("INSERT INTO pld (dia_num, hora, submercado, valor, mes_ref, dia_da_semana) VALUES ");
|
|
|
|
var parametros = new List<NpgsqlParameter>();
|
|
int count = 0;
|
|
|
|
foreach (var pld in novosPLDs)
|
|
{
|
|
sb.Append($"(@Dia{count}, @Hora{count}, @Submercado{count}, @Valor{count}, @MesRef{count}, @DiaSemana{count}),");
|
|
|
|
parametros.Add(new NpgsqlParameter($"@Dia{count}", NpgsqlTypes.NpgsqlDbType.Integer) { Value = pld.Dia.ToOADate() });
|
|
parametros.Add(new NpgsqlParameter($"@Hora{count}", NpgsqlTypes.NpgsqlDbType.Integer) { Value = pld.Hora });
|
|
parametros.Add(new NpgsqlParameter($"@Submercado{count}", NpgsqlTypes.NpgsqlDbType.Text) { Value = pld.Submercado });
|
|
parametros.Add(new NpgsqlParameter($"@Valor{count}", NpgsqlTypes.NpgsqlDbType.Double) { Value = pld.Valor });
|
|
parametros.Add(new NpgsqlParameter($"@MesRef{count}", NpgsqlTypes.NpgsqlDbType.Text) { Value = pld.Mes });
|
|
parametros.Add(new NpgsqlParameter($"@DiaSemana{count}", NpgsqlTypes.NpgsqlDbType.Integer) { Value = pld.DiaSemana });
|
|
|
|
count++;
|
|
}
|
|
|
|
// Removemos a última vírgula da query
|
|
sb.Length--;
|
|
|
|
using var cmd = new NpgsqlCommand(sb.ToString(), conn, transaction);
|
|
cmd.Parameters.AddRange(parametros.ToArray());
|
|
|
|
cmd.ExecuteNonQuery();
|
|
transaction.Commit();
|
|
}
|
|
}
|