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] [HttpGet]
[Route("poem/{id}/images")] [Route("poem/{id}/images")]
[AllowAnonymous] [AllowAnonymous]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(GanjoorLinkViewModel[]))] [ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(PoemRelatedImage[]))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))] [ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
public async Task<IActionResult> GetPoemImages(int id) public async Task<IActionResult> GetPoemImages(int id)
{ {
RServiceResult<GanjoorLinkViewModel[]> res = RServiceResult<PoemRelatedImage[]> res =
await _ganjoorService.GetPoemImages(id); await _ganjoorService.GetPoemImages(id);
if (!string.IsNullOrEmpty(res.ExceptionString)) if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString); return BadRequest(res.ExceptionString);

View File

@ -71,6 +71,6 @@ namespace RMuseum.Models.Ganjoor.ViewModels
/// <summary> /// <summary>
/// Images /// Images
/// </summary> /// </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>
<member name="M:RMuseum.Controllers.RecitationController.GetXMLContent(System.Int32)"> <member name="M:RMuseum.Controllers.RecitationController.GetXMLContent(System.Int32)">
<summary> <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> </summary>
<remarks> <remarks>
it could be protected (Authorized), but I guess I would have problems with available client components support, it could be protected (Authorized), but I guess I would have problems with available client components support,
@ -2360,7 +2371,7 @@
</member> </member>
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PublicRecitationViewModel.XmlText"> <member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PublicRecitationViewModel.XmlText">
<summary> <summary>
Xml Url Xml Text, xml file url is https://ganjgah.ir/api/audio/file/{audio.Id}.xml
</summary> </summary>
</member> </member>
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PublicRecitationViewModel.PlainText"> <member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PublicRecitationViewModel.PlainText">
@ -3687,6 +3698,51 @@
text text
</summary> </summary>
</member> </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"> <member name="T:RMuseum.Models.ImportJob.ImportJob">
<summary> <summary>
Import Job Import Job

View File

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

View File

@ -325,11 +325,11 @@ namespace RMuseum.Services.Implementation
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <returns></returns> /// <returns></returns>
public async Task<RServiceResult<GanjoorLinkViewModel[]>> GetPoemImages(int id) public async Task<RServiceResult<PoemRelatedImage[]>> GetPoemImages(int id)
{ {
try try
{ {
var source = var museumSrc =
from link in _context.GanjoorLinks.Include(l => l.Artifact).Include(l => l.Item).ThenInclude(i => i.Images) from link in _context.GanjoorLinks.Include(l => l.Artifact).Include(l => l.Item).ThenInclude(i => i.Images)
join poem in _context.GanjoorPoems join poem in _context.GanjoorPoems
on link.GanjoorPostId equals poem.Id on link.GanjoorPostId equals poem.Id
@ -338,24 +338,45 @@ namespace RMuseum.Services.Implementation
&& &&
poem.Id == id poem.Id == id
orderby link.ReviewDate orderby link.ReviewDate
select new GanjoorLinkViewModel() select new PoemRelatedImage()
{ {
Id = link.Id, PoemRelatedImageType = PoemRelatedImageType.MuseumLink,
GanjoorPostId = link.GanjoorPostId, ThumbnailImageUrl = $"https://ganjgah.ir/api/images/thumb/{link.Item.Images.First().Id}.jpg",
GanjoorUrl = $"https://ganjoor.net{poem.FullUrl}", TargetPageUrl = $"https://museum.ganjoor.net/items/{link.Artifact.FriendlyUrl}/{link.Item.FriendlyUrl}",
GanjoorTitle = poem.FullTitle, AltText = $"{link.Artifact.Name} » {link.Item.Name}",
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)
}; };
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) 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; rc = rcRes.Result;
} }
GanjoorLinkViewModel[] imgs = null; PoemRelatedImage[] imgs = null;
if(images) if(images)
{ {
var imgsRes = await GetPoemImages(id); var imgsRes = await GetPoemImages(id);