Переделал абстрактый storage, реализовал хранилище врачей
This commit is contained in:
parent
59aebfd136
commit
048945c173
@ -1,29 +1,84 @@
|
|||||||
using MedicalDatabaseContracts;
|
using MedicalDatabaseContracts;
|
||||||
using MedicalDatabaseContracts.Models;
|
using MedicalDatabaseContracts.Models;
|
||||||
using Npgsql;
|
using Npgsql;
|
||||||
|
using System.Diagnostics;
|
||||||
|
|
||||||
namespace MedicalPostgresqlDatabase
|
namespace MedicalPostgresqlDatabase
|
||||||
{
|
{
|
||||||
public abstract class AbstractPostgresqlStorage<T> : IStorage<T> where T : AbstractModel
|
public abstract class AbstractPostgresqlStorage<T> : IStorage<T> where T : AbstractModel
|
||||||
{
|
{
|
||||||
|
protected readonly string TABLE_NAME;
|
||||||
|
protected readonly string PRIMARY_KEY_COLUMN_NAME;
|
||||||
|
|
||||||
|
protected AbstractPostgresqlStorage(string tableName, string primaryKeyColumnName)
|
||||||
|
{
|
||||||
|
TABLE_NAME = tableName;
|
||||||
|
PRIMARY_KEY_COLUMN_NAME = primaryKeyColumnName;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract T CreateEntityFromReader(NpgsqlDataReader reader);
|
||||||
|
|
||||||
public virtual void Delete(int id)
|
public virtual void Delete(int id)
|
||||||
{
|
{
|
||||||
long elapsedMilliseconds;
|
long elapsedMilliseconds;
|
||||||
Delete(id, out elapsedMilliseconds);
|
Delete(id, out elapsedMilliseconds);
|
||||||
}
|
}
|
||||||
public abstract void Delete(int id, out long elapsedMilliseconds);
|
public virtual void Delete(int id, out long elapsedMilliseconds)
|
||||||
|
{
|
||||||
|
using var connection = GetConnection();
|
||||||
|
connection.Open();
|
||||||
|
using var cmd = new NpgsqlCommand($"DELETE FROM {TABLE_NAME} WHERE {PRIMARY_KEY_COLUMN_NAME} = @id", connection);
|
||||||
|
cmd.Parameters.AddWithValue("@id", id);
|
||||||
|
Stopwatch stopwatch = new();
|
||||||
|
stopwatch.Start();
|
||||||
|
cmd.ExecuteNonQuery();
|
||||||
|
stopwatch.Stop();
|
||||||
|
elapsedMilliseconds = stopwatch.ElapsedMilliseconds;
|
||||||
|
}
|
||||||
public virtual T? Get(int id)
|
public virtual T? Get(int id)
|
||||||
{
|
{
|
||||||
long elapsedMilliseconds;
|
long elapsedMilliseconds;
|
||||||
return Get(id, out elapsedMilliseconds);
|
return Get(id, out elapsedMilliseconds);
|
||||||
}
|
}
|
||||||
public abstract T? Get(int id, out long elapsedMilliseconds);
|
public virtual T? Get(int id, out long elapsedMilliseconds)
|
||||||
|
{
|
||||||
|
using var connection = GetConnection();
|
||||||
|
connection.Open();
|
||||||
|
using var cmd = new NpgsqlCommand($"SELECT * FROM {TABLE_NAME} WHERE {PRIMARY_KEY_COLUMN_NAME} = @id", connection);
|
||||||
|
cmd.Parameters.AddWithValue("@id", id);
|
||||||
|
Stopwatch stopwatch = new();
|
||||||
|
stopwatch.Start();
|
||||||
|
using var reader = cmd.ExecuteReader();
|
||||||
|
stopwatch.Stop();
|
||||||
|
elapsedMilliseconds = stopwatch.ElapsedMilliseconds;
|
||||||
|
if (reader.Read())
|
||||||
|
{
|
||||||
|
return CreateEntityFromReader(reader);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
public virtual List<T> GetAll()
|
public virtual List<T> GetAll()
|
||||||
{
|
{
|
||||||
long elapsedMilliseconds;
|
long elapsedMilliseconds;
|
||||||
return GetAll(out elapsedMilliseconds);
|
return GetAll(out elapsedMilliseconds);
|
||||||
}
|
}
|
||||||
public abstract List<T> GetAll(out long elapsedMilliseconds);
|
public virtual List<T> GetAll(out long elapsedMilliseconds)
|
||||||
|
{
|
||||||
|
var items = new List<T>();
|
||||||
|
using var connection = GetConnection();
|
||||||
|
connection.Open();
|
||||||
|
using var cmd = new NpgsqlCommand($"SELECT * FROM {TABLE_NAME} ORDER BY {PRIMARY_KEY_COLUMN_NAME}", connection);
|
||||||
|
Stopwatch stopwatch = new();
|
||||||
|
stopwatch.Start();
|
||||||
|
using var reader = cmd.ExecuteReader();
|
||||||
|
stopwatch.Stop();
|
||||||
|
elapsedMilliseconds = stopwatch.ElapsedMilliseconds;
|
||||||
|
while (reader.Read())
|
||||||
|
{
|
||||||
|
items.Add(CreateEntityFromReader(reader));
|
||||||
|
}
|
||||||
|
return items;
|
||||||
|
}
|
||||||
public virtual void Insert(T item)
|
public virtual void Insert(T item)
|
||||||
{
|
{
|
||||||
long elapsedMilliseconds;
|
long elapsedMilliseconds;
|
||||||
|
64
Medical/MedicalPostgresqlDatabase/Storages/DoctorsStorage.cs
Normal file
64
Medical/MedicalPostgresqlDatabase/Storages/DoctorsStorage.cs
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
using MedicalDatabaseContracts.Models;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Npgsql;
|
||||||
|
using System.Diagnostics;
|
||||||
|
|
||||||
|
namespace MedicalPostgresqlDatabase.Storages
|
||||||
|
{
|
||||||
|
public class DoctorsStorage : AbstractPostgresqlStorage<Doctor>
|
||||||
|
{
|
||||||
|
private ILogger _logger;
|
||||||
|
public DoctorsStorage(ILogger<DoctorsStorage> logger) : base("doctors", "doctor_id")
|
||||||
|
{
|
||||||
|
_logger = logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override Doctor CreateEntityFromReader(NpgsqlDataReader reader)
|
||||||
|
{
|
||||||
|
return new Doctor
|
||||||
|
{
|
||||||
|
Id = Convert.ToInt32(reader.GetOrdinal("doctor_id")),
|
||||||
|
Name = Convert.ToString(reader.GetOrdinal("name")),
|
||||||
|
Surname = Convert.ToString(reader.GetOrdinal("surname")),
|
||||||
|
Patronymic = Convert.ToString(reader.GetOrdinal("patronymic")),
|
||||||
|
PhoneNumber = Convert.ToString(reader.GetOrdinal("phone_number")),
|
||||||
|
SpecializationId = Convert.ToInt32(reader.GetOrdinal("specializaton_id"))
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Insert(Doctor item, out long elapsedMilliseconds)
|
||||||
|
{
|
||||||
|
using var connection = GetConnection();
|
||||||
|
connection.Open();
|
||||||
|
using var cmd = new NpgsqlCommand("INSERT INTO doctors (doctor_id, name, surname, patronymic, phone_number, specialization_id) VALUES ((nextval('doctors_id_seq')), @name, @surname, @patronymic, @phone_number, @specialization_id)", connection);
|
||||||
|
cmd.Parameters.AddWithValue("@name", item.Name);
|
||||||
|
cmd.Parameters.AddWithValue("@surname", item.Surname);
|
||||||
|
cmd.Parameters.AddWithValue("@patronymic", item.Patronymic);
|
||||||
|
cmd.Parameters.AddWithValue("@phone_number", item.PhoneNumber);
|
||||||
|
cmd.Parameters.AddWithValue("@specialization_id", item.SpecializationId);
|
||||||
|
Stopwatch stopwatch = new();
|
||||||
|
stopwatch.Start();
|
||||||
|
cmd.ExecuteNonQuery();
|
||||||
|
stopwatch.Stop();
|
||||||
|
elapsedMilliseconds = stopwatch.ElapsedMilliseconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Update(Doctor item, out long elapsedMilliseconds)
|
||||||
|
{
|
||||||
|
using var connection = GetConnection();
|
||||||
|
connection.Open();
|
||||||
|
using var cmd = new NpgsqlCommand($"UPDATE doctors SET name = @name, surname = @surname, patronymic = @patronymic, phone_number = @phone_number, specialization_id = @specialization_id, WHERE {PRIMARY_KEY_COLUMN_NAME} = @id", connection); ;
|
||||||
|
cmd.Parameters.AddWithValue("@id", item.Id);
|
||||||
|
cmd.Parameters.AddWithValue("@name", item.Name);
|
||||||
|
cmd.Parameters.AddWithValue("@surname", item.Surname);
|
||||||
|
cmd.Parameters.AddWithValue("@patronymic", item.Patronymic);
|
||||||
|
cmd.Parameters.AddWithValue("@phone_number", item.PhoneNumber);
|
||||||
|
cmd.Parameters.AddWithValue("@specialization_id", item.SpecializationId);
|
||||||
|
Stopwatch stopwatch = new();
|
||||||
|
stopwatch.Start();
|
||||||
|
cmd.ExecuteNonQuery();
|
||||||
|
stopwatch.Stop();
|
||||||
|
elapsedMilliseconds = stopwatch.ElapsedMilliseconds;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user