#66 suggest song api

This commit is contained in:
Hamid Reza Mohammadi 2021-01-17 19:02:00 +03:30
parent db1ef736dd
commit 2e8dd59d5d
4 changed files with 136 additions and 3 deletions

View File

@ -7,6 +7,9 @@ using RMuseum.Models.GanjoorAudio.ViewModels;
using RMuseum.Models.GanjoorIntegration.ViewModels;
using RMuseum.Services;
using RSecurityBackend.Models.Generic;
using RSecurityBackend.Services;
using System;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
@ -249,6 +252,37 @@ namespace RMuseum.Controllers
return Ok(res.Result);
}
/// <summary>
/// suggest song for poem
/// </summary>
/// <param name="song"></param>
/// <returns></returns>
[HttpPost]
[Route("song")]
[Authorize]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(PoemMusicTrackViewModel))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
[ProducesResponseType((int)HttpStatusCode.Forbidden)]
public async Task<IActionResult> SuggestSong([FromBody] PoemMusicTrackViewModel song)
{
Guid userId =
new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
Guid sessionId =
new Guid(User.Claims.FirstOrDefault(c => c.Type == "SessionId").Value);
RServiceResult<bool> sessionCheckResult = await _appUserService.SessionExists(userId, sessionId);
if (!string.IsNullOrEmpty(sessionCheckResult.ExceptionString))
{
return StatusCode((int)HttpStatusCode.Forbidden);
}
var res =
await _ganjoorService.SuggestSong(userId, song);
if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString);
return Ok(res.Result);
}
/// <summary>
/// get a random poem from hafez
/// </summary>
@ -327,13 +361,20 @@ namespace RMuseum.Controllers
protected readonly IGanjoorService _ganjoorService;
/// <summary>
/// IAppUserService instance
/// </summary>
protected IAppUserService _appUserService;
/// <summary>
/// constructor
/// </summary>
/// <param name="ganjoorService"></param>
public GanjoorController(IGanjoorService ganjoorService)
/// <param name="appUserService"></param>
public GanjoorController(IGanjoorService ganjoorService, IAppUserService appUserService)
{
_ganjoorService = ganjoorService;
_appUserService = appUserService;
}
}
}

View File

@ -707,6 +707,13 @@
<param name="id"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.SuggestSong(RMuseum.Models.Ganjoor.ViewModels.PoemMusicTrackViewModel)">
<summary>
suggest song for poem
</summary>
<param name="song"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.Faal">
<summary>
get a random poem from hafez
@ -736,11 +743,17 @@
Ganjoor Service
</summary>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.#ctor(RMuseum.Services.IGanjoorService)">
<member name="F:RMuseum.Controllers.GanjoorController._appUserService">
<summary>
IAppUserService instance
</summary>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.#ctor(RMuseum.Services.IGanjoorService,RSecurityBackend.Services.IAppUserService)">
<summary>
constructor
</summary>
<param name="ganjoorService"></param>
<param name="appUserService"></param>
</member>
<member name="M:RMuseum.Controllers.ImageController.Get(System.Guid,System.String)">
<summary>
@ -4172,7 +4185,7 @@
<member name="P:RMuseum.Models.Ganjoor.ViewModels.PoemMusicTrackViewModel.PoemId">
<summary>
poem id
</summary>
</summary>a
</member>
<member name="P:RMuseum.Models.Ganjoor.ViewModels.PoemMusicTrackViewModel.TrackType">
<summary>
@ -5509,6 +5522,14 @@
<param name="id"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IGanjoorService.SuggestSong(System.Guid,RMuseum.Models.Ganjoor.ViewModels.PoemMusicTrackViewModel)">
<summary>
suggest song
</summary>
<param name="userId"></param>
<param name="song"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IGanjoorService.Faal">
<summary>
get a random poem from hafez
@ -6325,6 +6346,14 @@
<param name="navigation"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.GanjoorService.SuggestSong(System.Guid,RMuseum.Models.Ganjoor.ViewModels.PoemMusicTrackViewModel)">
<summary>
suggest song
</summary>
<param name="userId"></param>
<param name="song"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.GanjoorService.Faal">
<summary>
get a random poem from hafez

View File

@ -3,6 +3,7 @@ using RMuseum.Models.Ganjoor.ViewModels;
using RMuseum.Models.GanjoorAudio.ViewModels;
using RMuseum.Models.GanjoorIntegration.ViewModels;
using RSecurityBackend.Models.Generic;
using System;
using System.Threading.Tasks;
namespace RMuseum.Services
@ -105,6 +106,14 @@ namespace RMuseum.Services
/// <returns></returns>
Task<RServiceResult<PoemRelatedImage[]>> GetPoemImages(int id);
/// <summary>
/// suggest song
/// </summary>
/// <param name="userId"></param>
/// <param name="song"></param>
/// <returns></returns>
Task<RServiceResult<PoemMusicTrackViewModel>> SuggestSong(Guid userId, PoemMusicTrackViewModel song);
/// <summary>
/// get a random poem from hafez
/// </summary>

View File

@ -721,6 +721,59 @@ namespace RMuseum.Services.Implementation
}
}
/// <summary>
/// suggest song
/// </summary>
/// <param name="userId"></param>
/// <param name="song"></param>
/// <returns></returns>
public async Task<RServiceResult<PoemMusicTrackViewModel>> SuggestSong(Guid userId, PoemMusicTrackViewModel song)
{
try
{
var alreadySuggestedSong = await _context.GanjoorPoemMusicTracks.Where(t => t.PoemId == song.PoemId && t.TrackType == song.TrackType && t.TrackUrl == song.TrackUrl).FirstOrDefaultAsync();
if(alreadySuggestedSong != null)
{
return new RServiceResult<PoemMusicTrackViewModel>(null, "این آهنگ پیشتر برای این شعر پیشنهاد داده شده است.");
}
var sug =
new PoemMusicTrack()
{
TrackType = song.TrackType,
PoemId = song.PoemId,
ArtistName = song.ArtistName,
ArtistUrl = song.ArtistUrl,
AlbumName = song.AlbumName,
AlbumUrl = song.AlbumUrl,
TrackName = song.TrackName,
TrackUrl = song.TrackUrl,
SuggestedById = userId
};
GanjoorSinger singer = await _context.GanjoorSingers.Where(s => s.Url == song.ArtistUrl).FirstOrDefaultAsync();
if (singer != null)
{
sug.SingerId = singer.Id;
}
_context.GanjoorPoemMusicTracks.Add
(
sug
);
await _context.SaveChangesAsync();
song.Id = sug.Id;
return new RServiceResult<PoemMusicTrackViewModel>(song);
}
catch(Exception exp)
{
return new RServiceResult<PoemMusicTrackViewModel>(null, exp.ToString());
}
}
/// <summary>
/// get a random poem from hafez
/// </summary>
@ -1519,6 +1572,7 @@ namespace RMuseum.Services.Implementation
/// </summary>
protected readonly IBackgroundTaskQueue _backgroundTaskQueue;
/// <summary>
/// constructor