using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.IO;
using Application.Services.HashingAlgorithms; // Ensure this namespace matches your actual service namespace
using Infrastructure.Services.HashingAlgorithms; // Ensure this namespace matches your actual service namespace
using Domain.Entities;
#nullable disable
namespace Infrastructure.Migrations;
///
public partial class SeedAdminTable : Migration{
private readonly IConfiguration _configuration;
private readonly IHashingAlgorithms _hashingAlgorithms;
public SeedAdminTable()
{
var builder = new ConfigurationBuilder()
.SetBasePath(Path.Combine(Directory.GetCurrentDirectory(), "../API"))
.AddJsonFile("appsettings.json");
_configuration = builder.Build();
// Build the service provider
var serviceProvider = new ServiceCollection()
.AddSingleton()
.BuildServiceProvider();
// Resolve the hashing service
_hashingAlgorithms = serviceProvider.GetService();
}
protected override void Up(MigrationBuilder migrationBuilder)
{
var adminName = _configuration["AdminSettings:Name"];
var adminEmail = _configuration["AdminSettings:Email"];
var adminPassword = _configuration["AdminSettings:Password"];
var adminUser = new Admin();
adminUser.SetName(adminName);
adminUser.SetEmail(adminEmail);
adminUser.SetPassword(_hashingAlgorithms.Sha256Algorithm(adminPassword));
migrationBuilder.InsertData(
table: "Admins",
columns: new[] { "Id", "Name", "Email", "Password" },
values: new object[] { adminUser.Id, adminUser.Name, adminUser.Email, adminUser.Password }
);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
var adminEmail = _configuration["AdminSettings:Email"];
migrationBuilder.DeleteData(
table: "Admins",
keyColumn: "Email",
keyValue: adminEmail
);
}
}