using skydiveLogs_api.Domain; using skydiveLogs_api.DomainBusiness.Interfaces; using System.Collections.Generic; using System.IO; using System.Text.Json; namespace skydiveLogs_api.DomainBusiness { public class InitDbService : IInitDbService { #region Public Constructors public InitDbService(IAircraftService aircraftService, IJumpTypeService jumpTypeService, IDropZoneService dropZoneService, IUserService userService, ICacheService cacheService) { _aircraftService = aircraftService; _jumpTypeService = jumpTypeService; _dropZoneService = dropZoneService; _userService = userService; _cacheService = cacheService; } #endregion Public Constructors #region Public Methods public void Update() { UpdateAircrafts(); UpdateDropZones(); UpdateJumpTypes(); _cacheService.Delete(CacheType.Aircraft); _cacheService.Delete(CacheType.DropZone); _cacheService.Delete(CacheType.JumpType); } public void GenerateDb() { LoadAircrafts(); LoadDropZones(); LoadJumpTypes(); AddAdmin(); } #endregion Public Methods #region Private Methods private void AddAdmin() { var adminUser = new User { FirstName = "Admin", LastName = "Admin", Login = "administrator", Password = "logsadmin", Email = "admin@nomail.com" }; _userService.AddNewUser(adminUser, true); } #region Init tables and informations private void LoadAircrafts() { var jsonString = File.ReadAllText("Init/aircraft.json"); var options = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase, WriteIndented = true }; var jsonModel = JsonSerializer.Deserialize>(jsonString, options); foreach (var item in jsonModel) { _aircraftService.AddNewAircraft(item); } } private void LoadDropZones() { var jsonString = File.ReadAllText("Init/dropZone.json"); var options = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase, WriteIndented = true }; var jsonModel = JsonSerializer.Deserialize>(jsonString, options); foreach (var item in jsonModel) { _dropZoneService.AddNewDz(item); } } private void LoadJumpTypes() { var jsonString = File.ReadAllText("Init/jumpType.json"); var options = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase, WriteIndented = true }; var jsonModel = JsonSerializer.Deserialize>(jsonString, options); foreach (var item in jsonModel) { _jumpTypeService.AddNewJumpType(item); } } #endregion #region Update the existing data private void UpdateAircrafts() { var file = "Update/aircraft.json"; if (File.Exists(file)) { var jsonString = File.ReadAllText(file); var options = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase, WriteIndented = true }; var jsonModel = JsonSerializer.Deserialize>(jsonString, options); foreach (var item in jsonModel) { _aircraftService.UpdateAircraft(item.Id, item, false); } File.Delete(file); } } private void UpdateDropZones() { var file = "Update/dropZone.json"; if (File.Exists(file)) { var jsonString = File.ReadAllText("Update/dropZone.json"); var options = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase, WriteIndented = true }; var jsonModel = JsonSerializer.Deserialize>(jsonString, options); foreach (var item in jsonModel) { _dropZoneService.UpdateDz(item.Id, item, false); } File.Delete(file); } } private void UpdateJumpTypes() { var file = "Update/jumpType.json"; if (File.Exists(file)) { var jsonString = File.ReadAllText("Update/jumpType.json"); var options = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase, WriteIndented = true }; var jsonModel = JsonSerializer.Deserialize>(jsonString, options); foreach (var item in jsonModel) { _jumpTypeService.UpdateJumpType(item.Id, item, false); } File.Delete(file); } } #endregion #endregion Private Methods #region Private Fields private readonly IAircraftService _aircraftService; private readonly IDropZoneService _dropZoneService; private readonly IJumpTypeService _jumpTypeService; private readonly IUserService _userService; private readonly ICacheService _cacheService; #endregion Private Fields } }