hikvision-sync-service/Data/MySqlHrmsDbConnectionFactor...

56 lines
1.7 KiB
C#

using MySql.Data.MySqlClient;
namespace HikvisionAttendanceService.Data;
internal sealed class MySqlHrmsDbConnectionFactory : IHrmsDbConnectionFactory
{
private readonly HikvisionAttendanceWindowsService.HikvisionServiceConfig _config;
public MySqlHrmsDbConnectionFactory(HikvisionAttendanceWindowsService.HikvisionServiceConfig config)
{
_config = config;
}
public string BuildConnectionStringMasked()
{
if (TryBuildConnectionString(out var cs, out _))
{
var b = new MySqlConnectionStringBuilder(cs);
b.Password = "***";
return b.ConnectionString;
}
return "(invalid)";
}
public bool TryBuildConnectionString(out string connectionString, out string error)
{
connectionString = "";
error = "";
if (!string.IsNullOrWhiteSpace(_config.DbConnectionString))
{
connectionString = _config.DbConnectionString.Trim();
return true;
}
if (string.IsNullOrWhiteSpace(_config.DbHost) ||
string.IsNullOrWhiteSpace(_config.DbUsername) ||
string.IsNullOrWhiteSpace(_config.DbName))
{
error = "DbHost/DbUsername/DbName are required when DbConnectionString is empty.";
return false;
}
var b = new MySqlConnectionStringBuilder
{
Server = _config.DbHost.Trim(),
Port = (uint)(_config.DbPort > 0 ? _config.DbPort : 3306),
Database = _config.DbName.Trim(),
UserID = _config.DbUsername.Trim(),
Password = _config.DbPassword ?? "",
DefaultCommandTimeout = 30
};
connectionString = b.ConnectionString;
return true;
}
}