hrms-api-exam/Data/DatabaseSeeder.cs
2023-03-23 12:31:21 +07:00

315 lines
13 KiB
C#

using BMA.EHR.Core;
using BMA.EHR.Extensions;
using BMA.EHR.Recurit.Exam.Service.Models;
using BMA.EHR.Recurit.Exam.Service.Services;
using Newtonsoft.Json;
using OfficeOpenXml;
using System.Linq;
namespace BMA.EHR.Recurit.Exam.Service.Data
{
public static class DatabaseSeeder
{
#region " Seed Metadata "
public static async Task SeedPrefixAsync(WebApplication app)
{
using var scope = app.Services.CreateScope();
var service = scope.ServiceProvider.GetRequiredService<PrefixService>();
var insertedPrefix = new List<Prefix>();
if ((await service.GetsAsync()).Count() == 0)
{
// read excels into object
var excelFile = "SeedPerson.xlsx";
using (var excel = new ExcelPackage(new FileInfo(excelFile)))
{
// 1. Seed PrefixAsync
var workSheet = excel.Workbook.Worksheets.FirstOrDefault(x => x.Name.ToLower() == "prefix");
var totalRows = workSheet?.Dimension.Rows;
int row = 1;
while (row <= totalRows)
{
var cell1 = workSheet?.Cells[row, 1]?.GetValue<string>();
if (cell1 == "" || cell1 == null) break;
var prefix = insertedPrefix.Where(x => x.Name == (workSheet?.Cells[row, 1]?.GetValue<string>() ?? "")).FirstOrDefault();
if (prefix == null)
{
var inserted = new Prefix
{
Id = Guid.NewGuid(),
Name = workSheet?.Cells[row, 1]?.GetValue<string>() ?? "",
IsActive = true,
CreatedFullName = "System Administrator",
CreatedAt = DateTime.Now
};
insertedPrefix.Add(inserted);
await service.CreateAsync(inserted);
}
row++;
}
}
}
}
public static async Task SeedReligionAsync(WebApplication app)
{
using var scope = app.Services.CreateScope();
var service = scope.ServiceProvider.GetRequiredService<ReligionService>();
var insertedReligion = new List<Religion>();
if ((await service.GetsAsync()).Count() == 0)
{
// read excels into object
var excelFile = "SeedPerson.xlsx";
using (var excel = new ExcelPackage(new FileInfo(excelFile)))
{
// 1. Seed Religion
var workSheet = excel.Workbook.Worksheets.FirstOrDefault(x => x.Name.ToLower() == "religion");
var totalRows = workSheet?.Dimension.Rows;
int row = 1;
while (row <= totalRows)
{
var cell1 = workSheet?.Cells[row, 1]?.GetValue<string>();
if (cell1 == "" || cell1 == null) break;
var religion = insertedReligion.Where(x => x.Name == (workSheet?.Cells[row, 1]?.GetValue<string>() ?? "")).FirstOrDefault();
if (religion == null)
{
var inserted = new Religion
{
Id = Guid.NewGuid(),
Name = workSheet?.Cells[row, 1]?.GetValue<string>() ?? "",
IsActive = true,
CreatedFullName = "System Administrator",
CreatedAt = DateTime.Now
};
insertedReligion.Add(inserted);
await service.CreateAsync(inserted);
}
row++;
}
}
}
}
public static async Task SeedRelationshipAsync(WebApplication app)
{
using var scope = app.Services.CreateScope();
var service = scope.ServiceProvider.GetRequiredService<RelationshipService>();
var insertedRelationship = new List<Relationship>();
if ((await service.GetsAsync()).Count() == 0)
{
// read excels into object
var excelFile = "SeedPerson.xlsx";
using (var excel = new ExcelPackage(new FileInfo(excelFile)))
{
// 1. Seed Relationship
var workSheet = excel.Workbook.Worksheets.FirstOrDefault(x => x.Name.ToLower() == "relationship");
var totalRows = workSheet?.Dimension.Rows;
int row = 1;
while (row <= totalRows)
{
var cell1 = workSheet?.Cells[row, 1]?.GetValue<string>();
if (cell1 == "" || cell1 == null) break;
var relationship = insertedRelationship.Where(x => x.Name == (workSheet?.Cells[row, 1]?.GetValue<string>() ?? "")).FirstOrDefault();
if (relationship == null)
{
var inserted = new Relationship
{
Id = Guid.NewGuid(),
Name = workSheet?.Cells[row, 1]?.GetValue<string>() ?? "",
IsActive = true,
CreatedFullName = "System Administrator",
CreatedAt = DateTime.Now
};
insertedRelationship.Add(inserted);
await service.CreateAsync(inserted);
}
row++;
}
}
}
}
public static async Task SeedEducationLevelAsync(WebApplication app)
{
using var scope = app.Services.CreateScope();
var service = scope.ServiceProvider.GetRequiredService<EducationLevelService>();
var insertedEducationLevel = new List<EducationLevel>();
if ((await service.GetsAsync()).Count() == 0)
{
// read excels into object
var excelFile = "SeedPerson.xlsx";
using (var excel = new ExcelPackage(new FileInfo(excelFile)))
{
// 1. Seed EducationLevel
var workSheet = excel.Workbook.Worksheets.FirstOrDefault(x => x.Name.ToLower() == "educationlevel");
var totalRows = workSheet?.Dimension.Rows;
int row = 1;
while (row <= totalRows)
{
var cell1 = workSheet?.Cells[row, 1]?.GetValue<string>();
if (cell1 == "" || cell1 == null) break;
var educationLevel = insertedEducationLevel.Where(x => x.Name == (workSheet?.Cells[row, 1]?.GetValue<string>() ?? "")).FirstOrDefault();
if (educationLevel == null)
{
var inserted = new EducationLevel
{
Id = Guid.NewGuid(),
Name = workSheet?.Cells[row, 1]?.GetValue<string>() ?? "",
IsActive = true,
CreatedFullName = "System Administrator",
CreatedAt = DateTime.Now
};
insertedEducationLevel.Add(inserted);
await service.CreateAsync(inserted);
}
row++;
}
}
}
}
public static async Task SeedProvinceAsync(WebApplication app)
{
using var scope = app.Services.CreateScope();
var service = scope.ServiceProvider.GetRequiredService<ProvinceService>();
var districtService = scope.ServiceProvider.GetRequiredService<DistrictService>();
var subDistrictService = scope.ServiceProvider.GetRequiredService<SubDistrictService>();
var serializeOption = new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore };
var insertedProvince = new List<Province>();
if ((await service.GetsAsync()).Count() == 0)
{
// read excels into object
var excelFile = "SeedPerson.xlsx";
using (var excel = new ExcelPackage(new FileInfo(excelFile)))
{
// 1. Seed Province
var workSheet = excel.Workbook.Worksheets.FirstOrDefault(x => x.Name.ToLower() == "province");
var totalRows = workSheet?.Dimension.Rows;
int row = 2;
while (row <= totalRows)
{
var cell1 = workSheet?.Cells[row, 1]?.GetValue<string>();
if (cell1 == "" || cell1 == null) break;
var inserted = new Province
{
Id = Guid.NewGuid(),
Name = workSheet?.Cells[row, 1]?.GetValue<string>() ?? "",
IsActive = true,
CreatedFullName = "System Administrator",
CreatedAt = DateTime.Now,
Districts = new List<District>()
};
insertedProvince.Add(inserted);
await service.CreateAsync(inserted);
row++;
}
// 2. Seed District
var d_workSheet = excel.Workbook.Worksheets.FirstOrDefault(x => x.Name.ToLower() == "district");
var d_totalRows = d_workSheet?.Dimension.Rows;
int d_row = 2;
while (d_row <= d_totalRows)
{
var cell1 = d_workSheet?.Cells[d_row, 1]?.GetValue<string>();
if (cell1 == "" || cell1 == null) break;
var province = insertedProvince.Where(x => x.Name == cell1).FirstOrDefault();
var inserted = new District
{
Id = Guid.NewGuid(),
Name = d_workSheet?.Cells[d_row, 2]?.GetValue<string>() ?? "",
IsActive = true,
CreatedFullName = "System Administrator",
CreatedAt = DateTime.Now,
SubDistricts = new List<SubDistrict>()
};
province?.Districts.Add(inserted);
var provinceId = province == null ? Guid.NewGuid() : province.Id;
var jsonString = JsonConvert.SerializeObject(inserted, serializeOption);
await districtService.CreateAsync(inserted, provinceId.ToString("D"));
d_row++;
}
// 3. Seed SubDistrict
var s_workSheet = excel.Workbook.Worksheets.FirstOrDefault(x => x.Name.ToLower() == "subdistrict");
var s_totalRows = s_workSheet?.Dimension.Rows;
int s_row = 2;
var zipcodes = new List<string>();
while (s_row <= s_totalRows)
{
var cell1 = s_workSheet?.Cells[s_row, 1]?.GetValue<string>();
var cell2 = s_workSheet?.Cells[s_row, 2]?.GetValue<string>();
if (cell1 == "" || cell1 == null) break;
var province = insertedProvince.Where(x => x.Name == cell1).FirstOrDefault();
var district = province?.Districts.Where(x => x.Name == cell2).FirstOrDefault();
var inserted = new SubDistrict
{
Id = Guid.NewGuid(),
Name = s_workSheet?.Cells[s_row, 3]?.GetValue<string>() ?? "",
ZipCode = s_workSheet?.Cells[s_row, 4]?.GetValue<string>() ?? "",
IsActive = true,
CreatedFullName = "System Administrator",
CreatedAt = DateTime.Now,
};
if (!zipcodes.Contains(inserted.ZipCode))
zipcodes.Add(inserted.ZipCode);
district?.SubDistricts.Add(inserted);
var districtId = district == null ? Guid.NewGuid() : district.Id;
var jsonString = JsonConvert.SerializeObject(inserted, serializeOption);
await subDistrictService.CreateAsync(inserted, districtId.ToString("D"));
s_row++;
}
}
}
}
#endregion
}
}