#169 db + import operations
This commit is contained in:
parent
ad45a49f57
commit
adea29bc5a
@ -2,6 +2,7 @@
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.Caching.Memory;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Newtonsoft.Json;
|
||||
using RMuseum.Models.Auth.Memory;
|
||||
using RMuseum.Models.Auth.ViewModel;
|
||||
@ -304,7 +305,7 @@ namespace RMuseum.Controllers
|
||||
{
|
||||
var poet = await _ganjoorService.GetPoetById(id);
|
||||
IFormFile file = Request.Form.Files[0];
|
||||
RServiceResult<RImage> image = await _imageFileService.Add(file, null, file.FileName, $"C:\\PoetImages\\{poet.Result.Cat.UrlSlug}.png");
|
||||
RServiceResult<RImage> image = await _imageFileService.Add(file, null, file.FileName, Path.Combine(_configuration.GetSection("PictureFileService")["StoragePath"], "PoetImages"));
|
||||
if (!string.IsNullOrEmpty(image.ExceptionString))
|
||||
{
|
||||
return BadRequest(image.ExceptionString);
|
||||
@ -1557,6 +1558,11 @@ namespace RMuseum.Controllers
|
||||
/// </summary>
|
||||
protected readonly IMemoryCache _memoryCache;
|
||||
|
||||
/// <summary>
|
||||
/// Configuration
|
||||
/// </summary>
|
||||
protected IConfiguration _configuration { get; }
|
||||
|
||||
/// <summary>
|
||||
/// constructor
|
||||
/// </summary>
|
||||
@ -1565,13 +1571,22 @@ namespace RMuseum.Controllers
|
||||
/// <param name="httpContextAccessor"></param>
|
||||
/// <param name="imageFileService"></param>
|
||||
/// <param name="memoryCache"></param>
|
||||
public GanjoorController(IGanjoorService ganjoorService, IAppUserService appUserService, IHttpContextAccessor httpContextAccessor, IImageFileService imageFileService, IMemoryCache memoryCache)
|
||||
/// <param name="configuration"></param>
|
||||
public GanjoorController(
|
||||
IGanjoorService ganjoorService,
|
||||
IAppUserService appUserService,
|
||||
IHttpContextAccessor httpContextAccessor,
|
||||
IImageFileService imageFileService,
|
||||
IMemoryCache memoryCache,
|
||||
IConfiguration configuration
|
||||
)
|
||||
{
|
||||
_ganjoorService = ganjoorService;
|
||||
_appUserService = appUserService;
|
||||
_httpContextAccessor = httpContextAccessor;
|
||||
_imageFileService = imageFileService;
|
||||
_memoryCache = memoryCache;
|
||||
_configuration = configuration;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -22,7 +22,7 @@ namespace RMuseum.DbContext
|
||||
{
|
||||
public RMuseumDbContext(DbContextOptions<RMuseumDbContext> options) : base(options)
|
||||
{
|
||||
//Database.Migrate();
|
||||
Database.Migrate();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
2650
RMuseum/Migrations/20210701144846_SingerImage.Designer.cs
generated
Normal file
2650
RMuseum/Migrations/20210701144846_SingerImage.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
45
RMuseum/Migrations/20210701144846_SingerImage.cs
Normal file
45
RMuseum/Migrations/20210701144846_SingerImage.cs
Normal file
@ -0,0 +1,45 @@
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
namespace RMuseum.Migrations
|
||||
{
|
||||
public partial class SingerImage : Migration
|
||||
{
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AddColumn<Guid>(
|
||||
name: "RImageId",
|
||||
table: "GanjoorSingers",
|
||||
type: "uniqueidentifier",
|
||||
nullable: true);
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_GanjoorSingers_RImageId",
|
||||
table: "GanjoorSingers",
|
||||
column: "RImageId");
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_GanjoorSingers_GeneralImages_RImageId",
|
||||
table: "GanjoorSingers",
|
||||
column: "RImageId",
|
||||
principalTable: "GeneralImages",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Restrict);
|
||||
}
|
||||
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_GanjoorSingers_GeneralImages_RImageId",
|
||||
table: "GanjoorSingers");
|
||||
|
||||
migrationBuilder.DropIndex(
|
||||
name: "IX_GanjoorSingers_RImageId",
|
||||
table: "GanjoorSingers");
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "RImageId",
|
||||
table: "GanjoorSingers");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1314,6 +1314,9 @@ namespace RMuseum.Migrations
|
||||
b.Property<string>("Name")
|
||||
.HasColumnType("nvarchar(450)");
|
||||
|
||||
b.Property<Guid?>("RImageId")
|
||||
.HasColumnType("uniqueidentifier");
|
||||
|
||||
b.Property<string>("Url")
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
@ -1321,6 +1324,8 @@ namespace RMuseum.Migrations
|
||||
|
||||
b.HasIndex("Name");
|
||||
|
||||
b.HasIndex("RImageId");
|
||||
|
||||
b.ToTable("GanjoorSingers");
|
||||
});
|
||||
|
||||
@ -2438,6 +2443,15 @@ namespace RMuseum.Migrations
|
||||
b.Navigation("Singer");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("RMuseum.Models.MusicCatalogue.GanjoorSinger", b =>
|
||||
{
|
||||
b.HasOne("RSecurityBackend.Models.Image.RImage", "RImage")
|
||||
.WithMany()
|
||||
.HasForeignKey("RImageId");
|
||||
|
||||
b.Navigation("RImage");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("RMuseum.Models.MusicCatalogue.GanjoorTrack", b =>
|
||||
{
|
||||
b.HasOne("RMuseum.Models.MusicCatalogue.GanjoorAlbum", "Album")
|
||||
|
||||
@ -1,4 +1,6 @@
|
||||
using System.Collections.Generic;
|
||||
using RSecurityBackend.Models.Image;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace RMuseum.Models.MusicCatalogue
|
||||
{
|
||||
@ -21,10 +23,21 @@ namespace RMuseum.Models.MusicCatalogue
|
||||
/// url
|
||||
/// </summary>
|
||||
public string Url { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// poet image
|
||||
/// </summary>
|
||||
public virtual RImage RImage { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// user image id
|
||||
/// </summary>
|
||||
public Guid? RImageId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// albums
|
||||
/// </summary>
|
||||
public ICollection<GanjoorAlbum> Albums { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -1145,7 +1145,12 @@
|
||||
IMemoryCache
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Controllers.GanjoorController.#ctor(RMuseum.Services.IGanjoorService,RSecurityBackend.Services.IAppUserService,Microsoft.AspNetCore.Http.IHttpContextAccessor,RSecurityBackend.Services.IImageFileService,Microsoft.Extensions.Caching.Memory.IMemoryCache)">
|
||||
<member name="P:RMuseum.Controllers.GanjoorController._configuration">
|
||||
<summary>
|
||||
Configuration
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Controllers.GanjoorController.#ctor(RMuseum.Services.IGanjoorService,RSecurityBackend.Services.IAppUserService,Microsoft.AspNetCore.Http.IHttpContextAccessor,RSecurityBackend.Services.IImageFileService,Microsoft.Extensions.Caching.Memory.IMemoryCache,Microsoft.Extensions.Configuration.IConfiguration)">
|
||||
<summary>
|
||||
constructor
|
||||
</summary>
|
||||
@ -1154,6 +1159,7 @@
|
||||
<param name="httpContextAccessor"></param>
|
||||
<param name="imageFileService"></param>
|
||||
<param name="memoryCache"></param>
|
||||
<param name="configuration"></param>
|
||||
</member>
|
||||
<member name="M:RMuseum.Controllers.ImageController.Get(System.Guid,System.String)">
|
||||
<summary>
|
||||
@ -5948,6 +5954,16 @@
|
||||
url
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.MusicCatalogue.GanjoorSinger.RImage">
|
||||
<summary>
|
||||
poet image
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.MusicCatalogue.GanjoorSinger.RImageId">
|
||||
<summary>
|
||||
user image id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.MusicCatalogue.GanjoorSinger.Albums">
|
||||
<summary>
|
||||
albums
|
||||
|
||||
@ -1,13 +1,17 @@
|
||||
using DNTPersianUtils.Core;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Newtonsoft.Json;
|
||||
using RMuseum.DbContext;
|
||||
using RMuseum.Models.Ganjoor;
|
||||
using RMuseum.Models.MusicCatalogue;
|
||||
using RSecurityBackend.Models.Generic;
|
||||
using RSecurityBackend.Models.Generic.Db;
|
||||
using RSecurityBackend.Models.Image;
|
||||
using RSecurityBackend.Services.Implementation;
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net.Http;
|
||||
using System.Threading.Tasks;
|
||||
@ -19,15 +23,103 @@ namespace RMuseum.Services.Implementation
|
||||
/// </summary>
|
||||
public partial class GanjoorService : IGanjoorService
|
||||
{
|
||||
private async Task _PerformMundexHouseKeepingAndPreparation(RMuseumDbContext context, LongRunningJobProgressServiceEF jobProgressServiceEF, RLongRunningJobStatus job)
|
||||
{
|
||||
var singers = await context.GanjoorSingers.ToListAsync();
|
||||
foreach(var singer in singers)
|
||||
if(!string.IsNullOrEmpty(singer.Url) && singer.Url.Length > 0 && singer.Url[singer.Url.Length - 1] == '/')
|
||||
{
|
||||
singer.Url = singer.Url.Substring(0, singer.Url.Length - 1);
|
||||
context.GanjoorSingers.Update(singer);
|
||||
}
|
||||
await context.SaveChangesAsync();
|
||||
await jobProgressServiceEF.UpdateJob(job.Id, 2);
|
||||
|
||||
var poemMusicTracks =
|
||||
await context.GanjoorPoemMusicTracks
|
||||
.Where(m =>
|
||||
m.TrackType == PoemMusicTrackType.BeepTunesOrKhosousi
|
||||
&&
|
||||
m.Approved)
|
||||
.ToListAsync();
|
||||
|
||||
IConfigurationRoot configuration = new ConfigurationBuilder()
|
||||
.SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json")
|
||||
.Build();
|
||||
ImageFileServiceEF imageFileService = new ImageFileServiceEF(context, configuration);
|
||||
|
||||
using (HttpClient httpClient = new HttpClient())
|
||||
foreach (var poemMusicTrack in poemMusicTracks)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(poemMusicTrack.ArtistUrl) && poemMusicTrack.ArtistUrl.Length > 0 && poemMusicTrack.ArtistUrl[poemMusicTrack.ArtistUrl.Length - 1] == '/')
|
||||
{
|
||||
poemMusicTrack.ArtistUrl = poemMusicTrack.ArtistUrl.Substring(0, poemMusicTrack.ArtistUrl.Length - 1);
|
||||
context.GanjoorPoemMusicTracks.Update(poemMusicTrack);
|
||||
}
|
||||
|
||||
var singer = context.GanjoorSingers.Where(s => s.Url == poemMusicTrack.ArtistUrl).FirstOrDefault();
|
||||
if (singer == null)
|
||||
{
|
||||
singer = new GanjoorSinger()
|
||||
{
|
||||
Name = poemMusicTrack.ArtistName,
|
||||
Url = poemMusicTrack.ArtistUrl
|
||||
};
|
||||
context.GanjoorSingers.Add(singer);
|
||||
await context.SaveChangesAsync();
|
||||
}
|
||||
|
||||
//singer image:
|
||||
if (singer.Url.Contains("beeptunes.com/artist/"))
|
||||
{
|
||||
if (singer.RImageId == null)
|
||||
{
|
||||
var bUrl = singer.Url;
|
||||
var beepId = bUrl.Substring(bUrl.LastIndexOf("/") + 1);
|
||||
var response = await httpClient.GetAsync($"https://newapi.beeptunes.com/public/artist/info/?artistId={beepId}");
|
||||
if (response.IsSuccessStatusCode)
|
||||
{
|
||||
dynamic bpArtist = JsonConvert.DeserializeObject(await response.Content.ReadAsStringAsync());
|
||||
if (bpArtist.artistImage != null)
|
||||
{
|
||||
var imageResult = await httpClient.GetAsync(bpArtist.artistImage.ToString());
|
||||
if (imageResult.IsSuccessStatusCode)
|
||||
{
|
||||
using (Stream imageStream = await imageResult.Content.ReadAsStreamAsync())
|
||||
{
|
||||
RServiceResult<RImage> image = await imageFileService.Add(null, imageStream, $"{beepId}.jpg", Path.Combine(configuration.GetSection("PictureFileService")["StoragePath"], "SingerImages"));
|
||||
if (string.IsNullOrEmpty(image.ExceptionString))
|
||||
{
|
||||
image = await imageFileService.Store(image.Result);
|
||||
if (string.IsNullOrEmpty(image.ExceptionString))
|
||||
{
|
||||
singer.RImageId = image.Result.Id;
|
||||
context.GanjoorSingers.Update(singer);
|
||||
await context.SaveChangesAsync();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
await context.SaveChangesAsync();
|
||||
await jobProgressServiceEF.UpdateJob(job.Id, 3);
|
||||
|
||||
}
|
||||
private async Task _UpdateMundexPage(Guid editingUserId, RMuseumDbContext context, LongRunningJobProgressServiceEF jobProgressServiceEF, RLongRunningJobStatus job)
|
||||
{
|
||||
|
||||
var poemMusicTracks =
|
||||
await context.GanjoorPoemMusicTracks
|
||||
.Where(m =>
|
||||
m.TrackType == PoemMusicTrackType.BeepTunesOrKhosousi
|
||||
&&
|
||||
m.Approved)
|
||||
.ToListAsync();
|
||||
await context.GanjoorPoemMusicTracks
|
||||
.Where(m =>
|
||||
m.TrackType == PoemMusicTrackType.BeepTunesOrKhosousi
|
||||
&&
|
||||
m.Approved)
|
||||
.ToListAsync();
|
||||
|
||||
var dbPage = await context.GanjoorPages.Where(p => p.FullUrl == "/mundex").SingleAsync();
|
||||
|
||||
@ -181,13 +273,14 @@ namespace RMuseum.Services.Implementation
|
||||
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("UpdateMundexPage", "Mundex Page")).Result;
|
||||
var job = (await jobProgressServiceEF.NewJob("UpdateMundexPage", "House Keeping")).Result;
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
await _PerformMundexHouseKeepingAndPreparation(context, jobProgressServiceEF, job);
|
||||
await jobProgressServiceEF.UpdateJob(job.Id, 10, "Mundex Page");
|
||||
await _UpdateMundexPage(editingUserId, context, jobProgressServiceEF, job);
|
||||
await jobProgressServiceEF.UpdateJob(job.Id, 50, "Mundex by poet page");
|
||||
await jobProgressServiceEF.UpdateJob(job.Id, 60, "Mundex by poet page");
|
||||
await _UpdateMundexByPoetPage(editingUserId, context, jobProgressServiceEF, job);
|
||||
|
||||
await jobProgressServiceEF.UpdateJob(job.Id, 100, "", true);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user