cloutier--bird.makeup/src/DataAccessLayers/BirdsiteLive.DAL/DatabaseInitializer.cs

46 lines
1.4 KiB
C#
Raw Normal View History

2021-01-22 20:17:22 -05:00
using System;
using System.Linq;
using System.Threading.Tasks;
using BirdsiteLive.DAL.Contracts;
namespace BirdsiteLive.DAL
{
public interface IDatabaseInitializer
{
2021-01-22 21:05:01 -05:00
Task InitAndMigrateDbAsync();
2021-01-22 20:17:22 -05:00
}
public class DatabaseInitializer : IDatabaseInitializer
{
private readonly IDbInitializerDal _dbInitializerDal;
#region Ctor
public DatabaseInitializer(IDbInitializerDal dbInitializerDal)
{
_dbInitializerDal = dbInitializerDal;
}
#endregion
2021-01-22 21:05:01 -05:00
public async Task InitAndMigrateDbAsync()
2021-01-22 20:17:22 -05:00
{
var currentVersion = await _dbInitializerDal.GetCurrentDbVersionAsync();
var mandatoryVersion = _dbInitializerDal.GetMandatoryDbVersion();
if (currentVersion == mandatoryVersion) return;
// Init Db
if (currentVersion == null)
currentVersion = await _dbInitializerDal.InitDbAsync();
// Migrate Db
2021-01-23 00:26:23 -05:00
var migrationPatterns = _dbInitializerDal.GetMigrationPatterns();
2021-01-22 20:17:22 -05:00
while (migrationPatterns.Any(x => x.Item1 == currentVersion))
{
var migration = migrationPatterns.First(x => x.Item1 == currentVersion);
currentVersion = await _dbInitializerDal.MigrateDbAsync(migration.Item1, migration.Item2);
}
if (currentVersion != mandatoryVersion) throw new Exception("Migrating DB failed");
}
}
}