#445 TajikImportFromSqlite
This commit is contained in:
parent
1b2f2d79d2
commit
848a5f4bd2
@ -5,8 +5,6 @@ using System.Threading.Tasks;
|
||||
using RSecurityBackend.Models.Generic;
|
||||
using RMuseum.Models.Ganjoor.ViewModels;
|
||||
using System.Linq;
|
||||
using Org.BouncyCastle.Asn1.Ocsp;
|
||||
using DNTPersianUtils.Core;
|
||||
using RSecurityBackend.Services.Implementation;
|
||||
using System.Collections.Generic;
|
||||
|
||||
|
||||
@ -0,0 +1,109 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using RMuseum.Models.Ganjoor;
|
||||
using System.Threading.Tasks;
|
||||
using RSecurityBackend.Models.Generic;
|
||||
using RMuseum.Models.Ganjoor.ViewModels;
|
||||
using System.Linq;
|
||||
using RSecurityBackend.Services.Implementation;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.Data.Sqlite;
|
||||
using RMuseum.DbContext;
|
||||
using System.Data;
|
||||
using System.IO;
|
||||
using Dapper;
|
||||
|
||||
namespace RMuseum.Services.Implementation
|
||||
{
|
||||
/// <summary>
|
||||
/// IGanjoorService implementation
|
||||
/// </summary>
|
||||
public partial class GanjoorService : IGanjoorService
|
||||
{
|
||||
public async Task<RServiceResult<bool>> TajikImportFromSqlite(int poetId, IFormFile file)
|
||||
{
|
||||
try
|
||||
{
|
||||
string dir = Path.Combine($"{Configuration.GetSection("PictureFileService")["StoragePath"]}", "SQLiteImports");
|
||||
if (!Directory.Exists(dir))
|
||||
Directory.CreateDirectory(dir);
|
||||
|
||||
string filePath = Path.Combine(dir, file.FileName);
|
||||
if (File.Exists(filePath))
|
||||
File.Delete(filePath);
|
||||
using (FileStream fsMain = new FileStream(filePath, FileMode.Create))
|
||||
{
|
||||
await file.CopyToAsync(fsMain);
|
||||
}
|
||||
|
||||
_backgroundTaskQueue.QueueBackgroundWorkItem
|
||||
(
|
||||
async token =>
|
||||
{
|
||||
using (RMuseumDbContext context = new RMuseumDbContext(new DbContextOptions<RMuseumDbContext>())) //this is long running job, so _context might be already been freed/collected by GC
|
||||
{
|
||||
LongRunningJobProgressServiceEF jobProgressServiceEF = new LongRunningJobProgressServiceEF(context);
|
||||
var job = (await jobProgressServiceEF.NewJob("ImportFromSqlite", "Query data")).Result;
|
||||
|
||||
try
|
||||
{
|
||||
SqliteConnectionStringBuilder connectionStringBuilder = new SqliteConnectionStringBuilder();
|
||||
connectionStringBuilder.DataSource = filePath;
|
||||
using (SqliteConnection sqliteConnection = new SqliteConnection(connectionStringBuilder.ToString()))
|
||||
{
|
||||
await sqliteConnection.OpenAsync();
|
||||
IDbConnection sqlite = sqliteConnection;
|
||||
var poets = (await sqlite.QueryAsync("SELECT * FROM poet ORDER BY id")).ToList();
|
||||
if (poetId != 0 && poets.Count != 1)
|
||||
{
|
||||
await jobProgressServiceEF.UpdateJob(job.Id, 100, "", false, "poets count in sqlite db is not equal to 1");
|
||||
}
|
||||
|
||||
foreach (var poet in poets)
|
||||
{
|
||||
int poetId = poet.id;
|
||||
if (await context.TajikPoets.AnyAsync(p => p.Id == poetId)) continue;
|
||||
var cat = await context.GanjoorCategories.AsNoTracking().Where(c => c.PoetId == poetId && c.ParentId == null).SingleAsync();
|
||||
var catPage = await context.GanjoorPages.AsNoTracking().Where(p => p.FullUrl == cat.FullUrl).SingleAsync();
|
||||
|
||||
await jobProgressServiceEF.UpdateJob(job.Id, 0, $"Importing");
|
||||
|
||||
var resImport = await _ImportSQLiteCatChildren(context, sqlite, poetId, await sqlite.QuerySingleAsync<int>($"SELECT id FROM cat WHERE parent_id = 0"), cat, poet.Nickname, jobProgressServiceEF, job, catPage.Id);
|
||||
|
||||
if (string.IsNullOrEmpty(resImport))
|
||||
{
|
||||
await jobProgressServiceEF.UpdateJob(job.Id, 100, "", true);
|
||||
}
|
||||
else
|
||||
{
|
||||
await jobProgressServiceEF.UpdateJob(job.Id, 100, "", false, resImport);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
await jobProgressServiceEF.UpdateJob(job.Id, 100, "", false, exp.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
File.Delete(filePath);
|
||||
}
|
||||
);
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
return new RServiceResult<bool>(false, exp.ToString());
|
||||
}
|
||||
return new RServiceResult<bool>(true);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
17
TajikGanjoor/Properties/PublishProfiles/FolderProfile.pubxml
Normal file
17
TajikGanjoor/Properties/PublishProfiles/FolderProfile.pubxml
Normal file
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||
-->
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<DeleteExistingFiles>false</DeleteExistingFiles>
|
||||
<ExcludeApp_Data>false</ExcludeApp_Data>
|
||||
<LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
|
||||
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
|
||||
<LastUsedPlatform>Any CPU</LastUsedPlatform>
|
||||
<PublishProvider>FileSystem</PublishProvider>
|
||||
<PublishUrl>bin\Release\net8.0-windows\publish\</PublishUrl>
|
||||
<WebPublishMethod>FileSystem</WebPublishMethod>
|
||||
<_TargetId>Folder</_TargetId>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
Loading…
Reference in New Issue
Block a user