using MedicalDatabaseContracts.Models; using Microsoft.Extensions.Logging; using Npgsql; using System.Diagnostics; namespace MedicalPostgresqlDatabase.Storages { public class DiagnosesStorage : AbstractPostgresqlStorage { private ILogger _logger; public DiagnosesStorage(ILogger logger) : base("diagnoses", "diagnose_id") { _logger = logger; } protected override Diagnose CreateEntityFromReader(NpgsqlDataReader reader) { return new Diagnose { Id = Convert.ToInt32(reader.GetOrdinal(PRIMARY_KEY_COLUMN_NAME)), Name = Convert.ToString(reader.GetOrdinal("name")), }; } public override void Insert(Diagnose item, out long elapsedMilliseconds) { using var connection = GetConnection(); connection.Open(); using var cmd = new NpgsqlCommand($"INSERT INTO diagnoses ({PRIMARY_KEY_COLUMN_NAME}, name) VALUES ((nextval('diagnoses_id_seq')), @name)", connection); cmd.Parameters.AddWithValue("@name", item.Name); Stopwatch stopwatch = new(); stopwatch.Start(); cmd.ExecuteNonQuery(); stopwatch.Stop(); elapsedMilliseconds = stopwatch.ElapsedMilliseconds; } public override void Update(Diagnose item, out long elapsedMilliseconds) { using var connection = GetConnection(); connection.Open(); using var cmd = new NpgsqlCommand($"UPDATE diagnoses SET name = @name WHERE {PRIMARY_KEY_COLUMN_NAME} = @id", connection); cmd.Parameters.AddWithValue("@id", item.Id); cmd.Parameters.AddWithValue("@name", item.Name); Stopwatch stopwatch = new(); stopwatch.Start(); cmd.ExecuteNonQuery(); stopwatch.Stop(); elapsedMilliseconds = stopwatch.ElapsedMilliseconds; } } }