more generalized poem related images

This commit is contained in:
Hamid Reza Mohammadi 2021-01-01 16:58:03 +03:30
parent e1d00095ca
commit e5fe3a91ed
6 changed files with 148 additions and 22 deletions

View File

@ -215,11 +215,11 @@ namespace RMuseum.Controllers
[HttpGet]
[Route("poem/{id}/images")]
[AllowAnonymous]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(GanjoorLinkViewModel[]))]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(PoemRelatedImage[]))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
public async Task<IActionResult> GetPoemImages(int id)
{
RServiceResult<GanjoorLinkViewModel[]> res =
RServiceResult<PoemRelatedImage[]> res =
await _ganjoorService.GetPoemImages(id);
if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString);

View File

@ -71,6 +71,6 @@ namespace RMuseum.Models.Ganjoor.ViewModels
/// <summary>
/// Images
/// </summary>
public GanjoorLinkViewModel[] Images { get; set; }
public PoemRelatedImage[] Images { get; set; }
}
}

View File

@ -0,0 +1,49 @@
namespace RMuseum.Models.Ganjoor.ViewModels
{
/// <summary>
/// Related Image Type
/// </summary>
public enum PoemRelatedImageType
{
/// <summary>
/// musueum.ganjoor.net link
/// </summary>
MuseumLink = 0,
/// <summary>
/// external link
/// </summary>
ExternalLink = 1
}
/// <summary>
/// Poem Related Images
/// </summary>
public class PoemRelatedImage
{
/// <summary>
/// Image Order
/// </summary>
public int ImageOrder { get; set; }
/// <summary>
/// poem related image type
/// </summary>
public PoemRelatedImageType PoemRelatedImageType { get; set; }
/// <summary>
/// thumbnail image url
/// </summary>
public string ThumbnailImageUrl { get; set; }
/// <summary>
/// target page url
/// </summary>
public string TargetPageUrl { get; set; }
/// <summary>
/// alternate text
/// </summary>
public string AltText { get; set; }
}
}

View File

@ -860,7 +860,18 @@
</member>
<member name="M:RMuseum.Controllers.RecitationController.GetXMLContent(System.Int32)">
<summary>
get the corresponding xml file contemnts (xml) for the narration
get the corresponding xml file contents (xml) for the narration
</summary>
<remarks>
it could be protected (Authorized), but I guess I would have problems with available client components support,
so I preferred it to be anonymous, as it does not harm anybody I guess
</remarks>
<param name="id"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.RecitationController.GetXMLFile(System.Int32)">
<summary>
get the corresponding xml file for the recitation
</summary>
<remarks>
it could be protected (Authorized), but I guess I would have problems with available client components support,
@ -2360,7 +2371,7 @@
</member>
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PublicRecitationViewModel.XmlText">
<summary>
Xml Url
Xml Text, xml file url is https://ganjgah.ir/api/audio/file/{audio.Id}.xml
</summary>
</member>
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PublicRecitationViewModel.PlainText">
@ -3687,6 +3698,51 @@
text
</summary>
</member>
<member name="T:RMuseum.Models.Ganjoor.ViewModels.PoemRelatedImageType">
<summary>
Related Image Type
</summary>
</member>
<member name="F:RMuseum.Models.Ganjoor.ViewModels.PoemRelatedImageType.MuseumLink">
<summary>
musueum.ganjoor.net link
</summary>
</member>
<member name="F:RMuseum.Models.Ganjoor.ViewModels.PoemRelatedImageType.ExternalLink">
<summary>
external link
</summary>
</member>
<member name="T:RMuseum.Models.Ganjoor.ViewModels.PoemRelatedImage">
<summary>
Poem Related Images
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.ViewModels.PoemRelatedImage.ImageOrder">
<summary>
Image Order
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.ViewModels.PoemRelatedImage.PoemRelatedImageType">
<summary>
poem related image type
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.ViewModels.PoemRelatedImage.ThumbnailImageUrl">
<summary>
thumbnail image url
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.ViewModels.PoemRelatedImage.TargetPageUrl">
<summary>
target page url
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.ViewModels.PoemRelatedImage.AltText">
<summary>
alternate text
</summary>
</member>
<member name="T:RMuseum.Models.ImportJob.ImportJob">
<summary>
Import Job

View File

@ -96,7 +96,7 @@ namespace RMuseum.Services
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
Task<RServiceResult<GanjoorLinkViewModel[]>> GetPoemImages(int id);
Task<RServiceResult<PoemRelatedImage[]>> GetPoemImages(int id);
/// <summary>
/// get a random poem from hafez

View File

@ -325,11 +325,11 @@ namespace RMuseum.Services.Implementation
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task<RServiceResult<GanjoorLinkViewModel[]>> GetPoemImages(int id)
public async Task<RServiceResult<PoemRelatedImage[]>> GetPoemImages(int id)
{
try
{
var source =
var museumSrc =
from link in _context.GanjoorLinks.Include(l => l.Artifact).Include(l => l.Item).ThenInclude(i => i.Images)
join poem in _context.GanjoorPoems
on link.GanjoorPostId equals poem.Id
@ -338,24 +338,45 @@ namespace RMuseum.Services.Implementation
&&
poem.Id == id
orderby link.ReviewDate
select new GanjoorLinkViewModel()
select new PoemRelatedImage()
{
Id = link.Id,
GanjoorPostId = link.GanjoorPostId,
GanjoorUrl = $"https://ganjoor.net{poem.FullUrl}",
GanjoorTitle = poem.FullTitle,
EntityName = $"{link.Artifact.Name} » {link.Item.Name}",
EntityFriendlyUrl = $"https://museum.ganjoor.net/items/{link.Artifact.FriendlyUrl}/{link.Item.FriendlyUrl}",
EntityImageId = link.Item.Images.First().Id,//the most important data field, image url is https://ganjgah.ir/api/images/thumb/{EntityImageId}.jpg
ReviewResult = link.ReviewResult,
Synchronized = link.Synchronized,
SuggestedBy = null //intentional (this is going to be used in an anonymous method)
PoemRelatedImageType = PoemRelatedImageType.MuseumLink,
ThumbnailImageUrl = $"https://ganjgah.ir/api/images/thumb/{link.Item.Images.First().Id}.jpg",
TargetPageUrl = $"https://museum.ganjoor.net/items/{link.Artifact.FriendlyUrl}/{link.Item.FriendlyUrl}",
AltText = $"{link.Artifact.Name} » {link.Item.Name}",
};
return new RServiceResult<GanjoorLinkViewModel[]>(await source.ToArrayAsync());
List<PoemRelatedImage> museumImages = await museumSrc.ToListAsync();
var externalSrc =
from link in _context.PinterestLinks
join poem in _context.GanjoorPoems
on link.GanjoorPostId equals poem.Id
where
link.ReviewResult == Models.GanjoorIntegration.ReviewResult.Approved
&&
poem.Id == id
orderby link.ReviewDate
select new PoemRelatedImage()
{
PoemRelatedImageType = PoemRelatedImageType.ExternalLink,
ThumbnailImageUrl = $"https://ganjgah.ir/api/images/thumb/{link.Item.Images.First().Id}.jpg",
TargetPageUrl = $"https://museum.ganjoor.net/items/{link.Artifact.FriendlyUrl}/{link.Item.FriendlyUrl}",
AltText = link.AltText,
};
museumImages.AddRange(await externalSrc.ToListAsync());
for(int i=0; i<museumImages.Count; i++)
{
museumImages[i].ImageOrder = 0;
}
return new RServiceResult<PoemRelatedImage[]>(museumImages.ToArray());
}
catch (Exception exp)
{
return new RServiceResult<GanjoorLinkViewModel[]>(null, exp.ToString());
return new RServiceResult<PoemRelatedImage[]>(null, exp.ToString());
}
}
@ -512,7 +533,7 @@ namespace RMuseum.Services.Implementation
rc = rcRes.Result;
}
GanjoorLinkViewModel[] imgs = null;
PoemRelatedImage[] imgs = null;
if(images)
{
var imgsRes = await GetPoemImages(id);