250 lines
7.7 KiB
C#
250 lines
7.7 KiB
C#
using Microsoft.Data.SqlClient;
|
|
using ZA.CoreService.ESBCertificateManager.Models;
|
|
|
|
namespace ZA.CoreService.ESBCertificateManager.Services;
|
|
|
|
public sealed class DeploymentTargetRepository
|
|
{
|
|
private readonly string _connectionString;
|
|
|
|
public DeploymentTargetRepository(string connectionString)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(connectionString))
|
|
{
|
|
throw new ArgumentException(
|
|
"Der SQL-Connection-String ist nicht konfiguriert.",
|
|
nameof(connectionString));
|
|
}
|
|
|
|
_connectionString = connectionString;
|
|
}
|
|
|
|
public async Task<IReadOnlyList<DeploymentTarget>> GetActiveAsync(
|
|
CancellationToken cancellationToken = default)
|
|
{
|
|
const string sql = """
|
|
SELECT
|
|
target.CertificateTargetId,
|
|
target.TargetDirectory,
|
|
target.TargetFileName,
|
|
target.BackupEnabled,
|
|
target.BackupDirectoryName,
|
|
target.BackupRetentionDays,
|
|
target.IsActive AS TargetIsActive,
|
|
|
|
container.SonicContainerId,
|
|
container.ContainerName,
|
|
container.ContainerDisplayName,
|
|
container.RestartTimeoutSeconds,
|
|
|
|
connection.ConnectionName,
|
|
|
|
service.ServiceCode,
|
|
service.ServiceName,
|
|
|
|
environment.EnvironmentCode,
|
|
environment.SortOrder AS EnvironmentSortOrder,
|
|
|
|
company.CompanyCode,
|
|
country.CountryCode
|
|
FROM dbo.CertificateTarget AS target
|
|
INNER JOIN dbo.SonicContainer AS container
|
|
ON container.SonicContainerId = target.SonicContainerId
|
|
INNER JOIN dbo.SonicConnection AS connection
|
|
ON connection.SonicConnectionId = container.SonicConnectionId
|
|
INNER JOIN dbo.EsbService AS service
|
|
ON service.EsbServiceId = container.EsbServiceId
|
|
INNER JOIN dbo.Company AS company
|
|
ON company.CompanyId = service.CompanyId
|
|
LEFT JOIN dbo.Country AS country
|
|
ON country.CountryId = service.CountryId
|
|
INNER JOIN dbo.Environment AS environment
|
|
ON environment.EnvironmentId = service.EnvironmentId
|
|
WHERE target.IsActive = 1
|
|
AND container.IsActive = 1
|
|
AND connection.IsActive = 1
|
|
AND service.IsActive = 1
|
|
AND company.IsActive = 1
|
|
AND environment.IsActive = 1
|
|
AND
|
|
(
|
|
country.CountryId IS NULL
|
|
OR country.IsActive = 1
|
|
)
|
|
ORDER BY
|
|
company.CompanyCode,
|
|
country.CountryCode,
|
|
environment.SortOrder,
|
|
service.ServiceCode,
|
|
container.ContainerName,
|
|
target.TargetDirectory,
|
|
target.TargetFileName;
|
|
""";
|
|
|
|
List<DeploymentTarget> targets = [];
|
|
|
|
await using SqlConnection connection = new(_connectionString);
|
|
await connection.OpenAsync(cancellationToken);
|
|
|
|
await using SqlCommand command = new(sql, connection);
|
|
|
|
await using SqlDataReader reader =
|
|
await command.ExecuteReaderAsync(cancellationToken);
|
|
|
|
int targetIdOrdinal =
|
|
reader.GetOrdinal("CertificateTargetId");
|
|
|
|
int targetDirectoryOrdinal =
|
|
reader.GetOrdinal("TargetDirectory");
|
|
|
|
int targetFileNameOrdinal =
|
|
reader.GetOrdinal("TargetFileName");
|
|
|
|
int backupEnabledOrdinal =
|
|
reader.GetOrdinal("BackupEnabled");
|
|
|
|
int backupDirectoryNameOrdinal =
|
|
reader.GetOrdinal("BackupDirectoryName");
|
|
|
|
int backupRetentionDaysOrdinal =
|
|
reader.GetOrdinal("BackupRetentionDays");
|
|
|
|
int targetIsActiveOrdinal =
|
|
reader.GetOrdinal("TargetIsActive");
|
|
|
|
int containerNameOrdinal =
|
|
reader.GetOrdinal("ContainerName");
|
|
|
|
int containerDisplayNameOrdinal =
|
|
reader.GetOrdinal("ContainerDisplayName");
|
|
|
|
int restartTimeoutOrdinal =
|
|
reader.GetOrdinal("RestartTimeoutSeconds");
|
|
|
|
int connectionNameOrdinal =
|
|
reader.GetOrdinal("ConnectionName");
|
|
|
|
int serviceCodeOrdinal =
|
|
reader.GetOrdinal("ServiceCode");
|
|
|
|
int serviceNameOrdinal =
|
|
reader.GetOrdinal("ServiceName");
|
|
|
|
int environmentCodeOrdinal =
|
|
reader.GetOrdinal("EnvironmentCode");
|
|
|
|
int environmentSortOrderOrdinal =
|
|
reader.GetOrdinal("EnvironmentSortOrder");
|
|
|
|
int companyCodeOrdinal =
|
|
reader.GetOrdinal("CompanyCode");
|
|
|
|
int countryCodeOrdinal =
|
|
reader.GetOrdinal("CountryCode");
|
|
|
|
while (await reader.ReadAsync(cancellationToken))
|
|
{
|
|
string containerName =
|
|
reader.GetString(containerNameOrdinal);
|
|
|
|
string? containerDisplayName =
|
|
ReadNullableString(
|
|
reader,
|
|
containerDisplayNameOrdinal);
|
|
|
|
string serviceCode =
|
|
reader.GetString(serviceCodeOrdinal);
|
|
|
|
string serviceName =
|
|
reader.GetString(serviceNameOrdinal);
|
|
|
|
string companyCode =
|
|
reader.GetString(companyCodeOrdinal);
|
|
|
|
string? countryCode =
|
|
ReadNullableString(reader, countryCodeOrdinal);
|
|
|
|
string displayName =
|
|
string.IsNullOrWhiteSpace(containerDisplayName)
|
|
? containerName
|
|
: containerDisplayName;
|
|
|
|
string locationCode =
|
|
string.IsNullOrWhiteSpace(countryCode)
|
|
? companyCode
|
|
: $"{companyCode}/{countryCode}";
|
|
|
|
targets.Add(new DeploymentTarget
|
|
{
|
|
Id = reader.GetInt32(targetIdOrdinal),
|
|
|
|
Name =
|
|
$"{locationCode} / {serviceName} / {displayName}",
|
|
|
|
Environment =
|
|
reader.GetString(environmentCodeOrdinal),
|
|
|
|
IsActive =
|
|
reader.GetBoolean(targetIsActiveOrdinal),
|
|
|
|
TargetDirectory =
|
|
reader.GetString(targetDirectoryOrdinal),
|
|
|
|
CertificateFileName =
|
|
reader.GetString(targetFileNameOrdinal),
|
|
|
|
BackupEnabled =
|
|
reader.GetBoolean(backupEnabledOrdinal),
|
|
|
|
BackupDirectoryName =
|
|
reader.GetString(backupDirectoryNameOrdinal),
|
|
|
|
BackupRetentionDays =
|
|
ReadNullableInt32(
|
|
reader,
|
|
backupRetentionDaysOrdinal),
|
|
|
|
ContainerName = containerName,
|
|
|
|
RestartType = RestartType.SonicContainer,
|
|
|
|
SonicConnectionName =
|
|
reader.GetString(connectionNameOrdinal),
|
|
|
|
RestartTimeoutSeconds =
|
|
reader.GetInt32(restartTimeoutOrdinal),
|
|
|
|
TlsHost = string.Empty,
|
|
|
|
TlsPort = null,
|
|
|
|
TlsServerName = string.Empty,
|
|
|
|
ExpectedFingerprint = null,
|
|
|
|
SortOrder =
|
|
reader.GetInt32(environmentSortOrderOrdinal)
|
|
});
|
|
}
|
|
|
|
return targets;
|
|
}
|
|
|
|
private static string? ReadNullableString(
|
|
SqlDataReader reader,
|
|
int ordinal)
|
|
{
|
|
return reader.IsDBNull(ordinal)
|
|
? null
|
|
: reader.GetString(ordinal);
|
|
}
|
|
|
|
private static int? ReadNullableInt32(
|
|
SqlDataReader reader,
|
|
int ordinal)
|
|
{
|
|
return reader.IsDBNull(ordinal)
|
|
? null
|
|
: reader.GetInt32(ordinal);
|
|
}
|
|
} |