#404 suggest ganjoor link for naskban
This commit is contained in:
parent
fb2642d288
commit
7d8aed75b2
@ -543,5 +543,10 @@ namespace RMuseum.DbContext
|
||||
/// </summary>
|
||||
public DbSet<QueuedFTPUpload> QueuedFTPUploads { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// PDF Ganjoor Links
|
||||
/// </summary>
|
||||
public DbSet<PDFGanjoorLink> PDFGanjoorLinks { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
91
RMuseum/Models/GanjoorIntegration/PDFGanjoorLink.cs
Normal file
91
RMuseum/Models/GanjoorIntegration/PDFGanjoorLink.cs
Normal file
@ -0,0 +1,91 @@
|
||||
using RSecurityBackend.Models.Auth.Db;
|
||||
using System;
|
||||
|
||||
namespace RMuseum.Models.GanjoorIntegration
|
||||
{
|
||||
/// <summary>
|
||||
/// PDFBook Ganjoor Link
|
||||
/// </summary>
|
||||
public class PDFGanjoorLink
|
||||
{
|
||||
/// <summary>
|
||||
/// Ganjoor Post Id
|
||||
/// </summary>
|
||||
public int GanjoorPostId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// ganjoor url
|
||||
/// </summary>
|
||||
public string GanjoorUrl { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// ganjoor title
|
||||
/// </summary>
|
||||
public string GanjoorTitle { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// pdf book id
|
||||
/// </summary>
|
||||
public int PDFBookId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// page number
|
||||
/// </summary>
|
||||
public int PageNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// User Id who suggested the link
|
||||
/// </summary>
|
||||
public Guid SuggestedById { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Suggestion Date
|
||||
/// </summary>
|
||||
public DateTime SuggestionDate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// User who suggested the link
|
||||
/// </summary>
|
||||
public RAppUser SuggestedBy { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// User id who reviewed the link
|
||||
/// </summary>
|
||||
public Guid? ReviewerId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// User who reviewed the link
|
||||
/// </summary>
|
||||
public virtual RAppUser Reviewer { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Review Date
|
||||
/// </summary>
|
||||
public DateTime ReviewDate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// review result
|
||||
/// </summary>
|
||||
public ReviewResult ReviewResult { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Synchronized with ganjoor
|
||||
/// </summary>
|
||||
public bool Synchronized { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// is the is the text original source?
|
||||
/// </summary>
|
||||
public bool IsTextOriginalSource { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// PDF Page Title
|
||||
/// </summary>
|
||||
public string PDFPageTitle { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// external thumbnail image url
|
||||
/// </summary>
|
||||
public string ExternalThumbnailImageUrl { get; set; }
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,33 @@
|
||||
namespace RMuseum.Models.PDFLibrary.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// PDFBook Ganjoor Link Suggestion
|
||||
/// </summary>
|
||||
public class PDFGanjoorLinkSuggestion
|
||||
{
|
||||
/// <summary>
|
||||
/// Ganjoor Post Id
|
||||
/// </summary>
|
||||
public int GanjoorPostId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// ganjoor url
|
||||
/// </summary>
|
||||
public string GanjoorUrl { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// ganjoor title
|
||||
/// </summary>
|
||||
public string GanjoorTitle { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// pdf book id
|
||||
/// </summary>
|
||||
public int PDFBookId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// page number
|
||||
/// </summary>
|
||||
public int PageNumber { get; set; }
|
||||
}
|
||||
}
|
||||
@ -3624,6 +3624,11 @@
|
||||
Queued FTP Uploads
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.DbContext.RMuseumDbContext.PDFGanjoorLinks">
|
||||
<summary>
|
||||
PDF Ganjoor Links
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Migrations.PictureFileExtUrl">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
@ -6345,6 +6350,91 @@
|
||||
Instagram
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.GanjoorIntegration.PDFGanjoorLink">
|
||||
<summary>
|
||||
PDFBook Ganjoor Link
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorIntegration.PDFGanjoorLink.GanjoorPostId">
|
||||
<summary>
|
||||
Ganjoor Post Id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorIntegration.PDFGanjoorLink.GanjoorUrl">
|
||||
<summary>
|
||||
ganjoor url
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorIntegration.PDFGanjoorLink.GanjoorTitle">
|
||||
<summary>
|
||||
ganjoor title
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorIntegration.PDFGanjoorLink.PDFBookId">
|
||||
<summary>
|
||||
pdf book id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorIntegration.PDFGanjoorLink.PageNumber">
|
||||
<summary>
|
||||
page number
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorIntegration.PDFGanjoorLink.SuggestedById">
|
||||
<summary>
|
||||
User Id who suggested the link
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorIntegration.PDFGanjoorLink.SuggestionDate">
|
||||
<summary>
|
||||
Suggestion Date
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorIntegration.PDFGanjoorLink.SuggestedBy">
|
||||
<summary>
|
||||
User who suggested the link
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorIntegration.PDFGanjoorLink.ReviewerId">
|
||||
<summary>
|
||||
User id who reviewed the link
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorIntegration.PDFGanjoorLink.Reviewer">
|
||||
<summary>
|
||||
User who reviewed the link
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorIntegration.PDFGanjoorLink.ReviewDate">
|
||||
<summary>
|
||||
Review Date
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorIntegration.PDFGanjoorLink.ReviewResult">
|
||||
<summary>
|
||||
review result
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorIntegration.PDFGanjoorLink.Synchronized">
|
||||
<summary>
|
||||
Synchronized with ganjoor
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorIntegration.PDFGanjoorLink.IsTextOriginalSource">
|
||||
<summary>
|
||||
is the is the text original source?
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorIntegration.PDFGanjoorLink.PDFPageTitle">
|
||||
<summary>
|
||||
PDF Page Title
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorIntegration.PDFGanjoorLink.ExternalThumbnailImageUrl">
|
||||
<summary>
|
||||
external thumbnail image url
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.GanjoorIntegration.PinterestLink">
|
||||
<summary>
|
||||
pinterest link
|
||||
@ -12796,6 +12886,36 @@
|
||||
Book Script Type
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.PDFLibrary.ViewModels.PDFGanjoorLinkSuggestion">
|
||||
<summary>
|
||||
PDFBook Ganjoor Link Suggestion
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.PDFLibrary.ViewModels.PDFGanjoorLinkSuggestion.GanjoorPostId">
|
||||
<summary>
|
||||
Ganjoor Post Id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.PDFLibrary.ViewModels.PDFGanjoorLinkSuggestion.GanjoorUrl">
|
||||
<summary>
|
||||
ganjoor url
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.PDFLibrary.ViewModels.PDFGanjoorLinkSuggestion.GanjoorTitle">
|
||||
<summary>
|
||||
ganjoor title
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.PDFLibrary.ViewModels.PDFGanjoorLinkSuggestion.PDFBookId">
|
||||
<summary>
|
||||
pdf book id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.PDFLibrary.ViewModels.PDFGanjoorLinkSuggestion.PageNumber">
|
||||
<summary>
|
||||
page number
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.UploadSession.UploadSession">
|
||||
<summary>
|
||||
Upload Session
|
||||
@ -18321,6 +18441,14 @@
|
||||
<param name="term"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.PDFLibraryService.SuggestGanjoorLink(System.Guid,RMuseum.Models.PDFLibrary.ViewModels.PDFGanjoorLinkSuggestion)">
|
||||
<summary>
|
||||
suggest ganjoor link
|
||||
</summary>
|
||||
<param name="userId"></param>
|
||||
<param name="link"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="F:RMuseum.Services.Implementation.PDFLibraryService._context">
|
||||
<summary>
|
||||
Database Context
|
||||
|
||||
@ -2630,11 +2630,11 @@ namespace RMuseum.Services.Implementation
|
||||
{
|
||||
RArtifactMasterRecord artifact = await _context.Artifacts.Where(a => a.FriendlyUrl == link.ArtifactFriendlyUrl).SingleOrDefaultAsync();
|
||||
|
||||
GanjoorLink alreaySuggest =
|
||||
GanjoorLink alreadySuggest =
|
||||
await _context.GanjoorLinks.
|
||||
Where(l => l.GanjoorPostId == link.GanjoorPostId && l.ArtifactId == artifact.Id && l.ItemId == link.ItemId && l.ReviewResult != ReviewResult.Rejected)
|
||||
.SingleOrDefaultAsync();
|
||||
if (alreaySuggest != null)
|
||||
if (alreadySuggest != null)
|
||||
return new RServiceResult<GanjoorLinkViewModel>(null, "این مورد پیشتر پیشنهاد شده است.");
|
||||
|
||||
GanjoorLink suggestion =
|
||||
|
||||
@ -4,8 +4,11 @@ using Microsoft.Extensions.Configuration;
|
||||
using RMuseum.DbContext;
|
||||
using RMuseum.Models.Artifact;
|
||||
using RMuseum.Models.Artifact.ViewModels;
|
||||
using RMuseum.Models.GanjoorIntegration.ViewModels;
|
||||
using RMuseum.Models.GanjoorIntegration;
|
||||
using RMuseum.Models.PDFLibrary;
|
||||
using RMuseum.Models.PDFLibrary.ViewModels;
|
||||
using RSecurityBackend.Models.Auth.ViewModels;
|
||||
using RSecurityBackend.Models.Generic;
|
||||
using RSecurityBackend.Models.Image;
|
||||
using RSecurityBackend.Services;
|
||||
@ -1285,59 +1288,111 @@ namespace RMuseum.Services.Implementation
|
||||
/// <returns></returns>
|
||||
public async Task<RServiceResult<(PaginationMetadata PagingMeta, PDFBook[] Items)>> SearchPDFBooksAsync(PagingParameterModel paging, string term)
|
||||
{
|
||||
term = term.Trim().ApplyCorrectYeKe();
|
||||
|
||||
if (string.IsNullOrEmpty(term))
|
||||
try
|
||||
{
|
||||
return new RServiceResult<(PaginationMetadata PagingMeta, PDFBook[] Items)>((null, null), "خطای جستجوی عبارت خالی");
|
||||
}
|
||||
term = term.Trim().ApplyCorrectYeKe();
|
||||
|
||||
term = term.Replace("", " ");//replace zwnj with space
|
||||
|
||||
string searchConditions;
|
||||
if (term.IndexOf('"') == 0 && term.LastIndexOf('"') == (term.Length - 1))
|
||||
{
|
||||
searchConditions = term.Replace("\"", "").Replace("'", "");
|
||||
searchConditions = $"\"{searchConditions}\"";
|
||||
}
|
||||
else
|
||||
{
|
||||
string[] words = term.Replace("\"", "").Replace("'", "").Split(' ', StringSplitOptions.RemoveEmptyEntries);
|
||||
|
||||
searchConditions = "";
|
||||
string emptyOrAnd = "";
|
||||
foreach (string word in words)
|
||||
if (string.IsNullOrEmpty(term))
|
||||
{
|
||||
searchConditions += $" {emptyOrAnd} \"*{word}*\" ";
|
||||
emptyOrAnd = " AND ";
|
||||
return new RServiceResult<(PaginationMetadata PagingMeta, PDFBook[] Items)>((null, null), "خطای جستجوی عبارت خالی");
|
||||
}
|
||||
|
||||
term = term.Replace("", " ");//replace zwnj with space
|
||||
|
||||
string searchConditions;
|
||||
if (term.IndexOf('"') == 0 && term.LastIndexOf('"') == (term.Length - 1))
|
||||
{
|
||||
searchConditions = term.Replace("\"", "").Replace("'", "");
|
||||
searchConditions = $"\"{searchConditions}\"";
|
||||
}
|
||||
else
|
||||
{
|
||||
string[] words = term.Replace("\"", "").Replace("'", "").Split(' ', StringSplitOptions.RemoveEmptyEntries);
|
||||
|
||||
searchConditions = "";
|
||||
string emptyOrAnd = "";
|
||||
foreach (string word in words)
|
||||
{
|
||||
searchConditions += $" {emptyOrAnd} \"*{word}*\" ";
|
||||
emptyOrAnd = " AND ";
|
||||
}
|
||||
}
|
||||
//full text catalogue should be created manually
|
||||
|
||||
var source =
|
||||
_context.PDFBooks.AsNoTracking().Include(a => a.Tags)
|
||||
.Where(p =>
|
||||
p.Status == PublishStatus.Published
|
||||
&&
|
||||
(
|
||||
EF.Functions.Contains(p.Title, searchConditions)
|
||||
||
|
||||
EF.Functions.Contains(p.AuthorsLine, searchConditions)
|
||||
||
|
||||
EF.Functions.Contains(p.TranslatorsLine, searchConditions)
|
||||
||
|
||||
EF.Functions.Contains(p.Description, searchConditions)
|
||||
||
|
||||
p.Tags.Where(t => EF.Functions.Contains(t.Value, searchConditions) || EF.Functions.Contains(t.ValueInEnglish, searchConditions)).Any()
|
||||
)
|
||||
).OrderBy(i => i.Title);
|
||||
|
||||
|
||||
(PaginationMetadata PagingMeta, PDFBook[] Items) paginatedResult =
|
||||
await QueryablePaginator<PDFBook>.Paginate(source, paging);
|
||||
|
||||
|
||||
return new RServiceResult<(PaginationMetadata PagingMeta, PDFBook[] Items)>(paginatedResult);
|
||||
}
|
||||
//full text catalogue should be created manually
|
||||
catch (Exception exp)
|
||||
{
|
||||
return new RServiceResult<(PaginationMetadata PagingMeta, PDFBook[] Items)>((null, null), exp.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
var source =
|
||||
_context.PDFBooks.AsNoTracking().Include(a => a.Tags)
|
||||
.Where(p =>
|
||||
p.Status == PublishStatus.Published
|
||||
&&
|
||||
(
|
||||
EF.Functions.Contains(p.Title, searchConditions)
|
||||
||
|
||||
EF.Functions.Contains(p.AuthorsLine, searchConditions)
|
||||
||
|
||||
EF.Functions.Contains(p.TranslatorsLine, searchConditions)
|
||||
||
|
||||
EF.Functions.Contains(p.Description, searchConditions)
|
||||
||
|
||||
p.Tags.Where(t => EF.Functions.Contains(t.Value, searchConditions) || EF.Functions.Contains(t.ValueInEnglish, searchConditions)).Any()
|
||||
)
|
||||
).OrderBy(i => i.Title);
|
||||
/// <summary>
|
||||
/// suggest ganjoor link
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <param name="link"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<RServiceResult<bool>> SuggestGanjoorLink(Guid userId, PDFGanjoorLinkSuggestion link)
|
||||
{
|
||||
try
|
||||
{
|
||||
PDFBook pdfBook = await _context.PDFBooks.AsNoTracking().Where(a => a.Id == link.PDFBookId).SingleOrDefaultAsync();
|
||||
|
||||
PDFGanjoorLink alreadySuggest =
|
||||
await _context.PDFGanjoorLinks.AsNoTracking().
|
||||
Where(l => l.GanjoorPostId == link.GanjoorPostId && l.PDFBookId == pdfBook.Id && l.PageNumber == link.PageNumber && l.ReviewResult != ReviewResult.Rejected)
|
||||
.SingleOrDefaultAsync();
|
||||
if (alreadySuggest != null)
|
||||
return new RServiceResult<bool>(false, "این مورد پیشتر پیشنهاد شده است.");
|
||||
|
||||
(PaginationMetadata PagingMeta, PDFBook[] Items) paginatedResult =
|
||||
await QueryablePaginator<PDFBook>.Paginate(source, paging);
|
||||
PDFGanjoorLink suggestion =
|
||||
new PDFGanjoorLink()
|
||||
{
|
||||
GanjoorPostId = link.GanjoorPostId,
|
||||
GanjoorTitle = link.GanjoorTitle,
|
||||
GanjoorUrl = link.GanjoorUrl,
|
||||
PDFBookId = pdfBook.Id,
|
||||
PageNumber = link.PageNumber,
|
||||
SuggestedById = userId,
|
||||
SuggestionDate = DateTime.Now,
|
||||
ReviewResult = ReviewResult.Awaiting,
|
||||
ExternalThumbnailImageUrl = (await _context.PDFPages.AsNoTracking().Where(l => l.PDFBookId == link.PDFBookId && l.PageNumber == link.PageNumber).SingleAsync()).ExtenalThumbnailImageUrl,
|
||||
PDFPageTitle = pdfBook.Title + " - صفحهٔ " + link.PageNumber.ToString().ToPersianNumbers()
|
||||
};
|
||||
|
||||
_context.PDFGanjoorLinks.Add(suggestion);
|
||||
await _context.SaveChangesAsync();
|
||||
|
||||
return new RServiceResult<(PaginationMetadata PagingMeta, PDFBook[] Items)>(paginatedResult);
|
||||
return new RServiceResult<bool>(true);
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
return new RServiceResult<bool>(false, exp.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -1356,6 +1411,7 @@ namespace RMuseum.Services.Implementation
|
||||
/// ftp service
|
||||
/// </summary>
|
||||
protected readonly IQueuedFTPUploadService _ftpService;
|
||||
|
||||
/// <summary>
|
||||
/// Configuration
|
||||
/// </summary>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user