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 { { "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 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() }; } }