using System; using System.IO; using System.Text.Json; using System.Threading.Tasks; using Kurs.Platform.Entities; using Kurs.Platform.Seeds; using Microsoft.Extensions.Configuration; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; using Volo.Abp.Domain.Repositories; using Microsoft.EntityFrameworkCore; using Kurs.Languages.Entities; using Kurs.Settings.Entities; namespace Kurs.Platform.Data.Seeds; public class PlatformBranchDataSeeder : ITransientDependency { private readonly IRepository _languages; private readonly IRepository _languageKey; private readonly IRepository _languagesText; private readonly IRepository _dataSources; private readonly IRepository _settings; private readonly IRepository _registrationTypeRepository; private readonly IRepository _registrationMethodRepository; private readonly IRepository _classTypeRepository; private readonly IRepository _classRepository; private readonly IRepository _levelRepository; private readonly IRepository _lessonPeriodRepository; private readonly IRepository _scheduleRepository; public PlatformBranchDataSeeder( IRepository languages, IRepository languageKey, IRepository languagesText, IRepository dataSource, IRepository settings, IRepository scheduleRepository, IRepository lessonPeriodRepository, IRepository registrationTypeRepository, IRepository registrationMethodRepository, IRepository classTypeRepository, IRepository classRepository, IRepository levelRepository ) { _languages = languages; _languageKey = languageKey; _languagesText = languagesText; _dataSources = dataSource; _settings = settings; _registrationTypeRepository = registrationTypeRepository; _registrationMethodRepository = registrationMethodRepository; _classTypeRepository = classTypeRepository; _classRepository = classRepository; _levelRepository = levelRepository; _lessonPeriodRepository = lessonPeriodRepository; _scheduleRepository = scheduleRepository; } private static IConfigurationRoot BuildConfiguration() { var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json") .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? ""}.json", true); return builder.Build(); } public async Task SeedAsync(DataSeedContext context) { var settings = await _settings.GetListAsync(); var dataSources = await _dataSources.GetListAsync(); var languages = await _languages.GetListAsync(); var keys = await _languageKey.GetListAsync(); var texts = await _languagesText.GetListAsync(); var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile(Path.Combine("Seeds", "BranchData.json")) .AddJsonFile(Path.Combine("Seeds", $"BranchData.{Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT") ?? ""}.json"), true) .Build(); var items = configuration.Get(); var options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true }; foreach (var item in items.RegistrationTypes) { var exists = await _registrationTypeRepository.AnyAsync(x => x.Name == item.Name); if (!exists) { await _registrationTypeRepository.InsertAsync(new RegistrationType { Name = item.Name, Status = item.Status }, autoSave: true); } } foreach (var item in items.RegistrationMethods) { var exists = await _registrationMethodRepository.AnyAsync(x => x.Name == item.Name); if (!exists) { var registrationType = await _registrationTypeRepository.FirstOrDefaultAsync(x => x.Name == item.RegistrationTypeName); if (registrationType != null) { await _registrationMethodRepository.InsertAsync(new RegistrationMethod { RegistrationTypeId = registrationType.Id, Name = item.Name, Status = item.Status }); } } } foreach (var item in items.ClassTypes) { var exists = await _classTypeRepository.AnyAsync(x => x.Name == item.Name); if (!exists) { var registrationType = await _registrationTypeRepository.FirstOrDefaultAsync(x => x.Name == item.RegistrationTypeName); if (registrationType != null) { await _classTypeRepository.InsertAsync(new ClassType { RegistrationTypeId = registrationType.Id, Name = item.Name, MinStudentCount = item.MinStudentCount, MaxStudentCount = item.MaxStudentCount, Status = item.Status }, autoSave: true); } } } foreach (var item in items.Classes) { var exists = await _classRepository.AnyAsync(x => x.Name == item.Name); if (!exists) { var classType = await _classTypeRepository.FirstOrDefaultAsync(x => x.Name == item.ClassTypeName); if (classType != null) { await _classRepository.InsertAsync(new() { ClassTypeId = classType.Id, Name = item.Name, Status = item.Status, }); } } } foreach (var item in items.Levels) { var exists = await _levelRepository.AnyAsync(x => x.Name == item.Name); if (!exists) { var classType = await _classTypeRepository.FirstOrDefaultAsync(x => x.Name == item.ClassTypeName); if (classType != null) { await _levelRepository.InsertAsync(new Level { ClassTypeId = classType.Id, Name = item.Name, LevelType = item.LevelType, LessonCount = item.LessonCount, Status = item.Status, LessonDuration = item.LessonDuration, MonthlyPaymentRate = item.MonthlyPaymentRate }); } } } foreach (var item in items.LessonPeriods) { var exists = await _lessonPeriodRepository.AnyAsync(x => x.Name == item.Name); if (!exists) { await _lessonPeriodRepository.InsertAsync(new() { Name = item.Name, Day = item.Day, Lesson1 = item.Lesson1, Lesson2 = item.Lesson2, Lesson3 = item.Lesson3, Lesson4 = item.Lesson4, }); } } foreach (var item in items.Schedules) { var exists = await _scheduleRepository.AnyAsync(x => x.Name == item.Name); if (!exists) { await _scheduleRepository.InsertAsync(new() { Name = item.Name, Status = item.Status, StartTime = item.StartTime, EndTime = item.EndTime, LessonMinute = item.LessonMinute, LessonBreakMinute = item.LessonBreakMinute, LessonCount = item.LessonCount, LunchTime = item.LunchTime, LunchMinute = item.LunchMinute, IncludeLunch = item.IncludeLunch, Monday = item.Monday, Tuesday = item.Tuesday, Wednesday = item.Wednesday, Thursday = item.Thursday, Friday = item.Friday, Saturday = item.Saturday, Sunday = item.Sunday, }); } } } }