Backend/e-suite.API/e-suite.Database.Migrator/Migrations/ScriptParser.cs
2026-01-20 21:50:10 +00:00

49 lines
1.9 KiB
C#

namespace e_suite.Database.Migrator.Migrations;
public class ScriptParser
{
public static string GetScriptText(ScriptType scriptType, string databaseName)
{
var scriptFileName = Path.Combine(AppContext.BaseDirectory, "Scripts", GetScriptFileName(scriptType));
if (!File.Exists(scriptFileName))
return string.Empty;
var fileContents = File.ReadAllText(scriptFileName).Trim();
return ParseScript(fileContents, databaseName);
}
private static string ParseScript(string fileContents, string databaseName)
{
if (string.IsNullOrWhiteSpace(fileContents))
return fileContents;
var parameterDictionary = new Dictionary<string, string>
{
{ "SQL_APPLICATION_USER", Environment.GetEnvironmentVariable("SQL_APPLICATION_USER") ?? $"{databaseName}ApplicationUser" },
{ "SQL_APPLICATION_PASSWORD", Environment.GetEnvironmentVariable("SQL_APPLICATION_PASSWORD") ?? "Plz change me on live, thank you" },
{ "SQL_DATABASE", Environment.GetEnvironmentVariable("SQL_DATABASE") ?? databaseName },
{ "SQL_SERVER", Environment.GetEnvironmentVariable("SQL_SERVER") ?? string.Empty },
};
var parsedContents = fileContents;
foreach (KeyValuePair<string, string> keyValuePair in parameterDictionary)
{
parsedContents = parsedContents.Replace("$(" + keyValuePair.Key + ")", keyValuePair.Value);
}
return parsedContents;
}
private static string GetScriptFileName(ScriptType scriptType)
{
return scriptType switch
{
ScriptType.resetDatabase => "ResetDatabaseScript.sql",
ScriptType.preMigration => "PreMigrationScript.sql",
ScriptType.postMigration => "PostMigrationScript.sql",
_ => throw new NotImplementedException()
};
}
}