Compare commits
1 Commits
master
...
feature/#4
Author | SHA1 | Date | |
---|---|---|---|
c844131bbe |
@ -1,16 +1,14 @@
|
|||||||
using Mapster;
|
using DD.Persistence.Database.Postgres.Services;
|
||||||
|
using DD.Persistence.Models.Configurations;
|
||||||
|
using DD.Persistence.Services;
|
||||||
|
using DD.Persistence.Services.Interfaces;
|
||||||
using Microsoft.AspNetCore.Authentication.JwtBearer;
|
using Microsoft.AspNetCore.Authentication.JwtBearer;
|
||||||
using Microsoft.IdentityModel.Tokens;
|
using Microsoft.IdentityModel.Tokens;
|
||||||
using Microsoft.OpenApi.Any;
|
using Microsoft.OpenApi.Any;
|
||||||
using Microsoft.OpenApi.Models;
|
using Microsoft.OpenApi.Models;
|
||||||
using DD.Persistence.Models;
|
|
||||||
using DD.Persistence.Models.Configurations;
|
|
||||||
using DD.Persistence.Services;
|
|
||||||
using DD.Persistence.Services.Interfaces;
|
|
||||||
using Swashbuckle.AspNetCore.SwaggerGen;
|
using Swashbuckle.AspNetCore.SwaggerGen;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Text.Json.Nodes;
|
using System.Text.Json.Nodes;
|
||||||
using DD.Persistence.Database.Entity;
|
|
||||||
|
|
||||||
namespace DD.Persistence.API;
|
namespace DD.Persistence.API;
|
||||||
|
|
||||||
@ -54,6 +52,7 @@ public static class DependencyInjection
|
|||||||
{
|
{
|
||||||
services.AddTransient<IWitsDataService, WitsDataService>();
|
services.AddTransient<IWitsDataService, WitsDataService>();
|
||||||
services.AddTransient<ITimestampedValuesService, TimestampedValuesService>();
|
services.AddTransient<ITimestampedValuesService, TimestampedValuesService>();
|
||||||
|
services.AddTransient<IArchiveService, PostgresArchiveService>();
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Authentication
|
#region Authentication
|
||||||
|
@ -6,7 +6,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ConnectionStrings": {
|
"ConnectionStrings": {
|
||||||
"DefaultConnection": "Host=localhost;Database=persistence;Username=postgres;Password=postgres;Persist Security Info=True"
|
"DefaultConnection": "Host=localhost;Database=persistence;Username=postgres;Password=q;Persist Security Info=True",
|
||||||
|
"SystemBaseConnection": "Host=localhost;Database=postgres;Username=postgres;Password=q;Persist Security Info=True"
|
||||||
},
|
},
|
||||||
"AllowedHosts": "*",
|
"AllowedHosts": "*",
|
||||||
"NeedUseKeyCloak": false,
|
"NeedUseKeyCloak": false,
|
||||||
|
56
DD.Persistence.Database.Postgres/Services/ArchiveService.cs
Normal file
56
DD.Persistence.Database.Postgres/Services/ArchiveService.cs
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
using DD.Persistence.Services.Interfaces;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Npgsql;
|
||||||
|
|
||||||
|
namespace DD.Persistence.Database.Postgres.Services;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Сервис по работе с источником данных - базой postgres
|
||||||
|
/// </summary>
|
||||||
|
public class PostgresArchiveService : IArchiveService
|
||||||
|
{
|
||||||
|
private string connectionString;
|
||||||
|
private ILogger<PostgresArchiveService> logger;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Сервис по работе с источником данных - базой postgres
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="configuration"></param>
|
||||||
|
public PostgresArchiveService(IConfiguration configuration, ILogger<PostgresArchiveService> logger)
|
||||||
|
{
|
||||||
|
this.connectionString = configuration.GetConnectionString("SystemBaseConnection")!;
|
||||||
|
this.logger = logger;
|
||||||
|
}
|
||||||
|
public Task Create(string newName, CancellationToken token)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task Rename(string newName, CancellationToken token)
|
||||||
|
{
|
||||||
|
await using var connection = new NpgsqlConnection(connectionString);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await connection.OpenAsync();
|
||||||
|
|
||||||
|
var sqlCloseConnect =
|
||||||
|
$"SELECT pg_terminate_backend(pg_stat_activity.pid) " +
|
||||||
|
$"FROM pg_stat_activity " +
|
||||||
|
$"WHERE pg_stat_activity.datname = 'persistence' AND pid <> pg_backend_pid();";
|
||||||
|
await using var command = new NpgsqlCommand(sqlCloseConnect, connection);
|
||||||
|
await command.ExecuteNonQueryAsync();
|
||||||
|
|
||||||
|
var rename = $"ALTER DATABASE persistence RENAME TO {newName};";
|
||||||
|
await using var sqlRenameDatabase = new NpgsqlCommand(rename, connection);
|
||||||
|
await sqlRenameDatabase.ExecuteNonQueryAsync();
|
||||||
|
}
|
||||||
|
catch (NpgsqlException exception)
|
||||||
|
{
|
||||||
|
this.logger.LogError(exception.Message);
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -1,25 +1,23 @@
|
|||||||
namespace DD.Persistence.Services.Interfaces;
|
namespace DD.Persistence.Services.Interfaces;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Сервис по работе с БД
|
/// Сервис по работе источниками данных
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal interface IArchiveService
|
public interface IArchiveService
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Переименование БД
|
/// Переименование источника данных
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="connectionString"></param>
|
/// <param name="newName">наименование источника данных</param>
|
||||||
/// <param name="databaseName"></param>
|
|
||||||
/// <param name="token"></param>
|
/// <param name="token"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task RenameDatabase(string connectionString, string databaseName, CancellationToken token);
|
Task Rename(string newName, CancellationToken token);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Создание БД
|
/// Создание источника данных
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="connectionString"></param>
|
/// <param name="newName"></param>
|
||||||
/// <param name="databaseName"></param>
|
|
||||||
/// <param name="token"></param>
|
/// <param name="token"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task CreateDatabase(string connectionString, string databaseName, CancellationToken token);
|
Task Create(string newName, CancellationToken token);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user