Переделал абстрактый storage, реализовал хранилище врачей
This commit is contained in:
parent
59aebfd136
commit
048945c173
@ -1,29 +1,84 @@
|
||||
using MedicalDatabaseContracts;
|
||||
using MedicalDatabaseContracts.Models;
|
||||
using Npgsql;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace MedicalPostgresqlDatabase
|
||||
{
|
||||
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)
|
||||
{
|
||||
long 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)
|
||||
{
|
||||
long 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()
|
||||
{
|
||||
long 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)
|
||||
{
|
||||
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