Manage the update of some data at the

start of the database
This commit is contained in:
Sébastien ANDRE
2023-08-23 20:30:53 +02:00
parent bf05e1c668
commit 2b880231a1
15 changed files with 150 additions and 62 deletions

65
.gitignore vendored
View File

@@ -2,45 +2,28 @@
# This .gitignore file was automatically created by Microsoft(R) Visual Studio. # This .gitignore file was automatically created by Microsoft(R) Visual Studio.
################################################################################ ################################################################################
/Back/skydiveLogs-api/obj /Back/.vs/
/Back/.vs/skydiveLogs-api/v15 /Back/skydiveLogs-api/obj/
/Back/skydiveLogs-api/bin /Back/skydiveLogs-api/bin/
/Back/.vs /Back/skydiveLogs-api.Model/obj/
/Back/skydiveLogs-api.DomainBusiness/obj /Back/skydiveLogs-api.Model/bin/
/Back/skydiveLogs-api.Infrastructure/obj /Back/skydiveLogs-api.Ioc/bin/
/Back/skydiveLogs-api.Model/obj /Back/skydiveLogs-api.Ioc/obj/
/Back/skydiveLogs-api.Model/bin /Back/skydiveLogs-api.Infrastructure/bin/
/Back/skydiveLogs-api.Ioc/bin /Back/skydiveLogs-api.Infrastructure/obj/
/Back/skydiveLogs-api.Ioc/obj /Back/dist/
/Back/skydiveLogs-api.Infrastructure/bin
/Back/skydiveLogs-api.DomainBusiness/bin
/Back/dist
/Back/skydiveLogs-api.v3.ncrunchsolution.user /Back/skydiveLogs-api.v3.ncrunchsolution.user
/Back/skydiveLogs-api/Init/twinOtter.jpg /Back/skydiveLogs-api/Init/*.jpg
/Back/skydiveLogs-api/Init/skyvan.jpg /Back/skydiveLogs-api/Update/
/Back/skydiveLogs-api/Init/Pilatus.png /Back/skydiveLogs-api.DomainService/bin/
/Back/skydiveLogs-api/Init/pac.jpg /Back/skydiveLogs-api.DomainService/obj/
/Back/skydiveLogs-api/Init/dornier.jpg /Back/skydiveLogs-api.Business/bin/
/Back/skydiveLogs-api/Init/casa.jpg /Back/skydiveLogs-api.Business/obj/
/Back/skydiveLogs-api/Init/caravan.jpg /Back/skydiveLogs-api.Data/bin/
/Back/skydiveLogs-api/Init/206.jpg /Back/skydiveLogs-api.Data/obj/
/Back/skydiveLogs-api/Data /Back/skydiveLogs-api.Domain/bin/
/Back/skydiveLogs-api.DomainService/bin /Back/skydiveLogs-api.Domain/obj/
/Back/skydiveLogs-api.DomainService/obj /Back/skydiveLogs-api/Data/
/Back/skydiveLogs-api.Data/obj /Back/skydiveLogs-api/users.txt
/Back/skydiveLogs-api.Business/obj /Back/skydiveLogs-api.DomainBusiness/bin/
/Back/skydiveLogs-api.Domain/obj /Back/skydiveLogs-api.DomainBusiness/obj/
/Back/skydiveLogs-api.Domain/bin/Debug/net5.0
/Back/skydiveLogs-api.Data/bin/Debug/net5.0
/Back/skydiveLogs-api.Domain/bin/Release/net5.0/ref/skydiveLogs-api.Domain.dll
/Back/skydiveLogs-api.Domain/bin/Release/net5.0/skydiveLogs-api.Domain.dll
/Back/skydiveLogs-api.Domain/bin/Release/net5.0/skydiveLogs-api.Domain.pdb
/Back/skydiveLogs-api/Data/JumpsDb-log.db
/Back/skydiveLogs-api/Data/JumpsDb.db
Back/skydiveLogs-api/Data/JumpsDb.db
Back/skydiveLogs-api/Data/JumpsDb-log.db
/Back/skydiveLogs-api.Domain/bin/Release/net5.0/skydiveLogs-api.Domain.deps.json
/Back/skydiveLogs-api.Domain/bin/Debug/net6.0
/Back/skydiveLogs-api.Domain/bin/Debug/net7.0
Back/skydiveLogs-api/Data/JumpsDb.db
/Back/skydiveLogs-api/Data/JumpsDb.db

View File

@@ -49,9 +49,15 @@ namespace skydiveLogs_api.DomainBusiness
return _cacheService.Get<IEnumerable<Aircraft>>(CacheType.Aircraft); return _cacheService.Get<IEnumerable<Aircraft>>(CacheType.Aircraft);
} }
public void UpdateAircraft(int id, Aircraft aircraft) public bool UpdateAircraft(int id, Aircraft aircraft, bool resetCache = true)
{ {
throw new NotImplementedException(); aircraft.Id = id;
var result = _aircraftRepository.Update(aircraft);
if (resetCache && result)
_cacheService.Delete(CacheType.JumpType);
return result;
} }
#endregion Public Methods #endregion Public Methods

View File

@@ -92,12 +92,12 @@ namespace skydiveLogs_api.DomainBusiness
return result > 0; return result > 0;
} }
public bool UpdateDz(int id, DropZone dropZone) public bool UpdateDz(int id, DropZone dropZone, bool resetCache = true)
{ {
dropZone.Id = id; dropZone.Id = id;
var result = _dropZoneRepository.Update(dropZone); var result = _dropZoneRepository.Update(dropZone);
if (result) if (resetCache && result)
_cacheService.Delete(CacheType.DropZone); _cacheService.Delete(CacheType.DropZone);
return result; return result;

View File

@@ -13,18 +13,31 @@ namespace skydiveLogs_api.DomainBusiness
public InitDbService(IAircraftService aircraftService, public InitDbService(IAircraftService aircraftService,
IJumpTypeService jumpTypeService, IJumpTypeService jumpTypeService,
IDropZoneService dropZoneService, IDropZoneService dropZoneService,
IUserService userService) IUserService userService,
ICacheService cacheService)
{ {
_aircraftService = aircraftService; _aircraftService = aircraftService;
_jumpTypeService = jumpTypeService; _jumpTypeService = jumpTypeService;
_dropZoneService = dropZoneService; _dropZoneService = dropZoneService;
_userService = userService; _userService = userService;
_cacheService = cacheService;
} }
#endregion Public Constructors #endregion Public Constructors
#region Public Methods #region Public Methods
public void Update()
{
UpdateAircrafts();
UpdateDropZones();
UpdateJumpTypes();
_cacheService.Delete(CacheType.Aircraft);
_cacheService.Delete(CacheType.DropZone);
_cacheService.Delete(CacheType.JumpType);
}
public void GenerateDb() public void GenerateDb()
{ {
LoadAircrafts(); LoadAircrafts();
@@ -50,6 +63,7 @@ namespace skydiveLogs_api.DomainBusiness
_userService.AddNewUser(adminUser, true); _userService.AddNewUser(adminUser, true);
} }
#region Init tables and informations
private void LoadAircrafts() private void LoadAircrafts()
{ {
var jsonString = File.ReadAllText("Init/aircraft.json"); var jsonString = File.ReadAllText("Init/aircraft.json");
@@ -97,16 +111,85 @@ namespace skydiveLogs_api.DomainBusiness
_jumpTypeService.AddNewJumpType(item); _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<List<Aircraft>>(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<List<DropZone>>(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<List<JumpType>>(jsonString, options);
foreach (var item in jsonModel)
{
_jumpTypeService.UpdateJumpType(item.Id, item, false);
}
File.Delete(file);
}
}
#endregion
#endregion Private Methods #endregion Private Methods
#region Private Fields #region Private Fields
private readonly IAircraftService _aircraftService; private readonly IAircraftService _aircraftService;
private readonly IDropZoneService _dropZoneService; private readonly IDropZoneService _dropZoneService;
private readonly IJumpTypeService _jumpTypeService; private readonly IJumpTypeService _jumpTypeService;
private readonly IUserService _userService; private readonly IUserService _userService;
private readonly ICacheService _cacheService;
#endregion Private Fields #endregion Private Fields
} }

View File

@@ -15,7 +15,7 @@ namespace skydiveLogs_api.DomainBusiness.Interfaces
IEnumerable<Aircraft> GetAllAircrafts(); IEnumerable<Aircraft> GetAllAircrafts();
void UpdateAircraft(int id, Aircraft aircraft); bool UpdateAircraft(int id, Aircraft aircraft, bool resetCache = true);
#endregion Public Methods #endregion Public Methods
} }

View File

@@ -19,7 +19,7 @@ namespace skydiveLogs_api.DomainBusiness.Interfaces
bool RemoveToFavorite(int dzId); bool RemoveToFavorite(int dzId);
bool UpdateDz(int id, DropZone dropZone); bool UpdateDz(int id, DropZone dropZone, bool resetCache = true);
#endregion Public Methods #endregion Public Methods
} }

View File

@@ -5,6 +5,7 @@
#region Public Methods #region Public Methods
public void GenerateDb(); public void GenerateDb();
public void Update();
#endregion Public Methods #endregion Public Methods
} }

View File

@@ -17,7 +17,7 @@ namespace skydiveLogs_api.DomainBusiness.Interfaces
JumpType GetJumpTypeById(int id); JumpType GetJumpTypeById(int id);
bool UpdateJumpType(int id, JumpType value); bool UpdateJumpType(int id, JumpType value, bool resetCache = true);
#endregion Public Methods #endregion Public Methods
} }

View File

@@ -1,7 +1,6 @@
using skydiveLogs_api.Domain; using skydiveLogs_api.Domain;
using skydiveLogs_api.DomainBusiness.Interfaces; using skydiveLogs_api.DomainBusiness.Interfaces;
using skydiveLogs_api.DomainService.Repositories; using skydiveLogs_api.DomainService.Repositories;
using skydiveLogs_api.Infrastructure;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@@ -55,12 +54,12 @@ namespace skydiveLogs_api.DomainBusiness
return allJumpTypes.Single(g => g.Id == id); return allJumpTypes.Single(g => g.Id == id);
} }
public bool UpdateJumpType(int id, JumpType jumpType) public bool UpdateJumpType(int id, JumpType jumpType, bool resetCache = true)
{ {
jumpType.Id = id; jumpType.Id = id;
var result = _jumpTypeRepository.Update(jumpType); var result = _jumpTypeRepository.Update(jumpType);
if (result) if (resetCache && result)
_cacheService.Delete(CacheType.JumpType); _cacheService.Delete(CacheType.JumpType);
return result; return result;

View File

@@ -42,7 +42,7 @@ namespace skydiveLogs_api.Ioc
_services.AddSingleton<ICacheService, CacheService>(); _services.AddSingleton<ICacheService, CacheService>();
_services.AddScoped<IIdentityService, IdentityService>(); _services.AddScoped<IIdentityService, IdentityService>();
_services.AddScoped<ClaimsPrincipal>(s => s.GetService<IHttpContextAccessor>()?.HttpContext.User); _services.AddScoped<ClaimsPrincipal>(s => s.GetService<IHttpContextAccessor>()?.HttpContext?.User);
_services.AddScoped<IAircraftRepository, AircraftRepository>(); _services.AddScoped<IAircraftRepository, AircraftRepository>();
_services.AddScoped<IDropZoneRepository, DropZoneRepository>(); _services.AddScoped<IDropZoneRepository, DropZoneRepository>();

View File

@@ -9,6 +9,7 @@ using skydiveLogs_api.DomainBusiness.Interfaces;
using skydiveLogs_api.Ioc; using skydiveLogs_api.Ioc;
using skydiveLogs_api.Settings; using skydiveLogs_api.Settings;
using System.IO; using System.IO;
using System.Linq;
using System.Text; using System.Text;
namespace skydiveLogs_api namespace skydiveLogs_api
@@ -106,14 +107,21 @@ namespace skydiveLogs_api
private void CheckAndInitDb(IServiceCollection services) private void CheckAndInitDb(IServiceCollection services)
{ {
string connectionString = Configuration.GetConnectionString("DefaultConnection"); string connectionString = Configuration.GetConnectionString("DefaultConnection");
string dbFile = connectionString.Replace("Filename=", string.Empty); var dictionary = connectionString.Split(';')
.Select(part => part.Split('='))
.Where(part => part.Length == 2)
.ToDictionary(sp => sp[0], sp => sp[1]);
string dbFile = dictionary["Filename"]; //connectionString.Replace("Filename=", string.Empty);
var serviceProvider = services.BuildServiceProvider();
var initDbService = serviceProvider.GetRequiredService<IInitDbService>();
if (!File.Exists(dbFile)) if (!File.Exists(dbFile))
{
var serviceProvider = services.BuildServiceProvider();
var initDbService = serviceProvider.GetRequiredService<IInitDbService>();
initDbService.GenerateDb(); initDbService.GenerateDb();
} else
initDbService.Update();
} }
#endregion Private Methods #endregion Private Methods

View File

@@ -15,6 +15,6 @@
}, },
"AllowedHosts": "*", "AllowedHosts": "*",
"ConnectionStrings": { "ConnectionStrings": {
"DefaultConnection": "Filename=./Data/JumpsDb.db" "DefaultConnection": "Filename=./Data/JumpsDb.db;connection=shared"
} }
} }

View File

@@ -13,6 +13,6 @@
}, },
"AllowedHosts": "*", "AllowedHosts": "*",
"ConnectionStrings": { "ConnectionStrings": {
"DefaultConnection": "Filename=./Data/JumpsDb.db" "DefaultConnection": "Filename=./Data/JumpsDb.db;connection=shared"
} }
} }

View File

@@ -15,6 +15,6 @@
}, },
"AllowedHosts": "*", "AllowedHosts": "*",
"ConnectionStrings": { "ConnectionStrings": {
"DefaultConnection": "Filename=./Data/JumpsDb.db" "DefaultConnection": "Filename=./Data/JumpsDb.db;connection=shared"
} }
} }

View File

@@ -31,4 +31,12 @@
<ProjectReference Include="..\skydiveLogs-api.Domain\skydiveLogs-api.Domain.csproj" /> <ProjectReference Include="..\skydiveLogs-api.Domain\skydiveLogs-api.Domain.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Content Update="Update\jumpType.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
</ItemGroup>
</Project> </Project>