#208 simplifying bookmaring api

This commit is contained in:
Hamid Reza Mohammadi 2021-09-27 09:43:25 +03:30
parent 08a492ceb9
commit 08ab7b6711
4 changed files with 84 additions and 266 deletions

View File

@ -1883,89 +1883,30 @@ namespace RMuseum.Controllers
}
/// <summary>
/// bookmark verse
/// </summary>
/// <param name="poemId"></param>
/// <param name="vOrder"></param>
/// <returns></returns>
[HttpPost]
[Route("bookmark/{poemId}/{vOrder}")]
[Authorize]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(GanjoorUserBookmark))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
public async Task<IActionResult> BookmarkVerse(int poemId, int vOrder)
{
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
RServiceResult<GanjoorUserBookmark> res = await _ganjoorService.BookmarkVerse(poemId, vOrder, loggedOnUserId, RBookmarkType.Bookmark);
if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString);
return Ok(res.Result);
}
/// <summary>
/// delete bookmark / fav / private note
/// </summary>
/// <param name="bookmarkId"></param>
/// <returns></returns>
[HttpDelete]
[Route("bookmark/{bookmarkId}")]
[Authorize]
[ProducesResponseType((int)HttpStatusCode.OK)]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
public async Task<IActionResult> DeleteBookmark(Guid bookmarkId)
{
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
RServiceResult<bool> res = await _ganjoorService.DeleteGanjoorBookmark(bookmarkId, loggedOnUserId);
if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString);
return Ok();
}
/// <summary>
/// switch bookmark
/// </summary>
/// <param name="poemId"></param>
/// <param name="vOrder"></param>
/// <param name="coupletIndex"></param>
/// <returns></returns>
[HttpPost]
[Route("bookmark/switch/{poemId}/{vOrder}")]
[Route("bookmark/switch/{poemId}/{coupletIndex}")]
[Authorize]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(GanjoorUserBookmark))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
public async Task<IActionResult> SwitchBookmark(int poemId, int vOrder)
public async Task<IActionResult> SwitchCoupletBookmark(int poemId, int coupletIndex)
{
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
RServiceResult<GanjoorUserBookmark> res = await _ganjoorService.SwitchBookmarkVerse(poemId, vOrder, loggedOnUserId, RBookmarkType.Bookmark);
if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString);
return Ok(res.Result);
}
/// <summary>
/// fav poem
/// </summary>
/// <param name="poemId"></param>
/// <param name="vOrder"></param>
/// <returns></returns>
[HttpPost]
[Route("fav/{poemId}/{vOrder}")]
[Authorize]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(GanjoorUserBookmark))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
public async Task<IActionResult> FavArtifact(int poemId, int vOrder)
{
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
RServiceResult<GanjoorUserBookmark> res = await _ganjoorService.BookmarkVerse(poemId, vOrder, loggedOnUserId, RBookmarkType.Favorite);
RServiceResult<GanjoorUserBookmark> res = await _ganjoorService.SwitchCoupletBookmark(loggedOnUserId, poemId, coupletIndex);
if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString);
return Ok(res.Result);
}
/// <summary>
/// poem bookmarks info
/// get poem user bookmarks
/// </summary>
/// <param name="poemId"></param>
/// <returns></returns>
@ -1974,49 +1915,30 @@ namespace RMuseum.Controllers
[Authorize]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(GanjoorUserBookmark[]))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
public async Task<IActionResult> GetPoemGanjoorUserBookmarks(int poemId)
public async Task<IActionResult> GetPoemUserBookmarks(int poemId)
{
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
RServiceResult<GanjoorUserBookmark[]> res = await _ganjoorService.GetPoemGanjoorUserBookmarks(poemId, loggedOnUserId, RBookmarkType.Bookmark);
RServiceResult<GanjoorUserBookmark[]> res = await _ganjoorService.GetPoemUserBookmarks(loggedOnUserId, poemId);
if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString);
return Ok(res.Result);
}
/// <summary>
/// poem fav info
/// is the poem couplet is bookmarked by user
/// </summary>
/// <param name="poemId"></param>
/// <param name="coupletIndex"></param>
/// <returns></returns>
[HttpGet]
[Route("fav/{poemId}")]
[Route("bookmark/{poemId}/{coupletIndex}")]
[Authorize]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(GanjoorUserBookmark[]))]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(bool))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
public async Task<IActionResult> GetPoemGanjoorUserFavs(int poemId)
public async Task<IActionResult> IsCoupletBookmarked(int poemId, int coupletIndex)
{
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
RServiceResult<GanjoorUserBookmark[]> res = await _ganjoorService.GetPoemGanjoorUserBookmarks(poemId, loggedOnUserId, RBookmarkType.Favorite);
if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString);
return Ok(res.Result);
}
/// <summary>
/// item bookmarks info
/// </summary>
/// <param name="poemId"></param>
/// <param name="vOrder"></param>
/// <returns></returns>
[HttpGet]
[Route("bookmark/{poemId}/{vOrder}")]
[Authorize]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(GanjoorUserBookmark[]))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
public async Task<IActionResult> GetVerseGanjoorUserBookmarks(int poemId, int vOrder)
{
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
RServiceResult<GanjoorUserBookmark[]> res = await _ganjoorService.GetVerseGanjoorUserBookmarks(poemId, vOrder, loggedOnUserId);
RServiceResult<bool> res = await _ganjoorService.IsCoupletBookmarked(loggedOnUserId, poemId, coupletIndex);
if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString);
return Ok(res.Result);
@ -2035,28 +1957,7 @@ namespace RMuseum.Controllers
{
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
RServiceResult<(PaginationMetadata PagingMeta, GanjoorUserBookmark[] Bookmarks)> res = await _ganjoorService.GetUserBookmarks(paging, loggedOnUserId, RBookmarkType.Bookmark);
if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString);
// Paging Header
HttpContext.Response.Headers.Add("paging-headers", JsonConvert.SerializeObject(res.Result.PagingMeta));
return Ok(res.Result.Bookmarks);
}
/// <summary>
/// user favorites
/// </summary>
/// <returns></returns>
[HttpGet]
[Route("fav")]
[Authorize]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(GanjoorUserBookmark[]))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
public async Task<IActionResult> GetUserFavorites([FromQuery] PagingParameterModel paging)
{
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
RServiceResult<(PaginationMetadata PagingMeta, GanjoorUserBookmark[] Bookmarks)> res = await _ganjoorService.GetUserBookmarks(paging, loggedOnUserId, RBookmarkType.Favorite);
RServiceResult<(PaginationMetadata PagingMeta, GanjoorUserBookmark[] Bookmarks)> res = await _ganjoorService.GetUserBookmarks(paging, loggedOnUserId);
if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString);
// Paging Header

View File

@ -1210,57 +1210,27 @@
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.BookmarkVerse(System.Int32,System.Int32)">
<summary>
bookmark verse
</summary>
<param name="poemId"></param>
<param name="vOrder"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.DeleteBookmark(System.Guid)">
<summary>
delete bookmark / fav / private note
</summary>
<param name="bookmarkId"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.SwitchBookmark(System.Int32,System.Int32)">
<member name="M:RMuseum.Controllers.GanjoorController.SwitchCoupletBookmark(System.Int32,System.Int32)">
<summary>
switch bookmark
</summary>
<param name="poemId"></param>
<param name="vOrder"></param>
<param name="coupletIndex"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.FavArtifact(System.Int32,System.Int32)">
<member name="M:RMuseum.Controllers.GanjoorController.GetPoemUserBookmarks(System.Int32)">
<summary>
fav poem
</summary>
<param name="poemId"></param>
<param name="vOrder"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.GetPoemGanjoorUserBookmarks(System.Int32)">
<summary>
poem bookmarks info
get poem user bookmarks
</summary>
<param name="poemId"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.GetPoemGanjoorUserFavs(System.Int32)">
<member name="M:RMuseum.Controllers.GanjoorController.IsCoupletBookmarked(System.Int32,System.Int32)">
<summary>
poem fav info
is the poem couplet is bookmarked by user
</summary>
<param name="poemId"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.GetVerseGanjoorUserBookmarks(System.Int32,System.Int32)">
<summary>
item bookmarks info
</summary>
<param name="poemId"></param>
<param name="vOrder"></param>
<param name="coupletIndex"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.GetUserBookmarks(RSecurityBackend.Models.Generic.PagingParameterModel)">
@ -1269,12 +1239,6 @@
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.GetUserFavorites(RSecurityBackend.Models.Generic.PagingParameterModel)">
<summary>
user favorites
</summary>
<returns></returns>
</member>
<member name="P:RMuseum.Controllers.GanjoorController.ReadOnlyMode">
<summary>
readonly mode
@ -8657,59 +8621,38 @@
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IGanjoorService.BookmarkVerse(System.Int32,System.Int32,System.Guid,RMuseum.Models.Bookmark.RBookmarkType)">
<member name="M:RMuseum.Services.IGanjoorService.SwitchCoupletBookmark(System.Guid,System.Int32,System.Int32)">
<summary>
Bookmark Verse
Switch Bookmark for couplet
</summary>
<param name="poemId"></param>
<param name="vOrder"></param>
<param name="userId"></param>
<param name="type"></param>
<param name="poemId"></param>
<param name="coupletIndex"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IGanjoorService.SwitchBookmarkVerse(System.Int32,System.Int32,System.Guid,RMuseum.Models.Bookmark.RBookmarkType)">
<summary>
Switch Bookmark Verse
</summary>
<param name="poemId"></param>
<param name="vOrder"></param>
<param name="userId"></param>
<param name="type"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IGanjoorService.GetPoemGanjoorUserBookmarks(System.Int32,System.Guid,RMuseum.Models.Bookmark.RBookmarkType)">
<member name="M:RMuseum.Services.IGanjoorService.GetPoemUserBookmarks(System.Guid,System.Int32)">
<summary>
get user ganjoor bookmarks
</summary>
<param name="poemId"></param>
<param name="userId"></param>
<param name="type"></param>
<param name="poemId"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IGanjoorService.GetVerseGanjoorUserBookmarks(System.Int32,System.Int32,System.Guid)">
<member name="M:RMuseum.Services.IGanjoorService.IsCoupletBookmarked(System.Guid,System.Int32,System.Int32)">
<summary>
get verse bookmarks
</summary>
<param name="poemId"></param>
<param name="vOrder"></param>
<param name="userId"></param>
<param name="poemId"></param>
<param name="coupletIndex"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IGanjoorService.DeleteGanjoorBookmark(System.Guid,System.Guid)">
<summary>
delete user bookmark
/// </summary>
<param name="bookmarkId"></param>
<param name="userId">to make sure a user can not delete another user's bookmarks</param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IGanjoorService.GetUserBookmarks(RSecurityBackend.Models.Generic.PagingParameterModel,System.Guid,RMuseum.Models.Bookmark.RBookmarkType)">
<member name="M:RMuseum.Services.IGanjoorService.GetUserBookmarks(RSecurityBackend.Models.Generic.PagingParameterModel,System.Guid)">
<summary>
get user bookmarks (artifacts and items)
</summary>
<param name="paging"></param>
<param name="userId"></param>
<param name="type"></param>
<returns></returns>
</member>
<member name="T:RMuseum.Services.IGanjoorTranslationService">
@ -9754,42 +9697,39 @@
IGanjoorService implementation
</summary>
</member>
<member name="M:RMuseum.Services.Implementation.GanjoorService.SwitchBookmarkVerse(System.Int32,System.Int32,System.Guid,RMuseum.Models.Bookmark.RBookmarkType)">
<member name="M:RMuseum.Services.Implementation.GanjoorService.SwitchCoupletBookmark(System.Guid,System.Int32,System.Int32)">
<summary>
Switch Bookmark for couplet
</summary>
<param name="userId"></param>
<param name="poemId"></param>
<param name="coupletIndex"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.GanjoorService.BookmarkVerse(System.Int32,System.Int32,System.Guid)">
<summary>
Bookmark Verse
</summary>
<param name="poemId"></param>
<param name="vOrder"></param>
<param name="verseId"></param>
<param name="userId"></param>
<param name="type"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.GanjoorService.BookmarkVerse(System.Int32,System.Int32,System.Guid,RMuseum.Models.Bookmark.RBookmarkType)">
<summary>
Bookmark Verse
</summary>
<param name="poemId"></param>
<param name="vOrder"></param>
<param name="userId"></param>
<param name="type"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.GanjoorService.GetPoemGanjoorUserBookmarks(System.Int32,System.Guid,RMuseum.Models.Bookmark.RBookmarkType)">
<member name="M:RMuseum.Services.Implementation.GanjoorService.GetPoemUserBookmarks(System.Guid,System.Int32)">
<summary>
get user ganjoor bookmarks
</summary>
<param name="poemId"></param>
<param name="userId"></param>
<param name="type"></param>
<param name="poemId"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.GanjoorService.GetVerseGanjoorUserBookmarks(System.Int32,System.Int32,System.Guid)">
<member name="M:RMuseum.Services.Implementation.GanjoorService.IsCoupletBookmarked(System.Guid,System.Int32,System.Int32)">
<summary>
get verse bookmarks
</summary>
<param name="poemId"></param>
<param name="vOrder"></param>
<param name="userId"></param>
<param name="poemId"></param>
<param name="coupletIndex"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.GanjoorService.DeleteGanjoorBookmark(System.Guid,System.Guid)">
@ -9800,13 +9740,12 @@
<param name="userId">to make sure a user can not delete another user's bookmarks</param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.GanjoorService.GetUserBookmarks(RSecurityBackend.Models.Generic.PagingParameterModel,System.Guid,RMuseum.Models.Bookmark.RBookmarkType)">
<member name="M:RMuseum.Services.Implementation.GanjoorService.GetUserBookmarks(RSecurityBackend.Models.Generic.PagingParameterModel,System.Guid)">
<summary>
get user bookmarks (artifacts and items)
</summary>
<param name="paging"></param>
<param name="userId"></param>
<param name="type"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.GanjoorService.StartUpdatingMundexPage(System.Guid)">

View File

@ -567,59 +567,40 @@ namespace RMuseum.Services
/// <returns></returns>
RServiceResult<bool> StartUpdatingMundexPage(Guid editingUserId);
/// <summary>
/// Bookmark Verse
/// </summary>
/// <param name="poemId"></param>
/// <param name="vOrder"></param>
/// <param name="userId"></param>
/// <param name="type"></param>
/// <returns></returns>
Task<RServiceResult<GanjoorUserBookmark>> BookmarkVerse(int poemId, int vOrder, Guid userId, RBookmarkType type);
/// <summary>
/// Switch Bookmark Verse
/// Switch Bookmark for couplet
/// </summary>
/// <param name="poemId"></param>
/// <param name="vOrder"></param>
/// <param name="userId"></param>
/// <param name="type"></param>
/// <param name="poemId"></param>
/// <param name="coupletIndex"></param>
/// <returns></returns>
Task<RServiceResult<GanjoorUserBookmark>> SwitchBookmarkVerse(int poemId, int vOrder, Guid userId, RBookmarkType type);
Task<RServiceResult<GanjoorUserBookmark>> SwitchCoupletBookmark(Guid userId, int poemId, int coupletIndex);
/// <summary>
/// get user ganjoor bookmarks
/// </summary>
/// <param name="poemId"></param>
/// <param name="userId"></param>
/// <param name="type"></param>
/// <param name="poemId"></param>
/// <returns></returns>
Task<RServiceResult<GanjoorUserBookmark[]>> GetPoemGanjoorUserBookmarks(int poemId, Guid userId, RBookmarkType type);
Task<RServiceResult<GanjoorUserBookmark[]>> GetPoemUserBookmarks(Guid userId, int poemId);
/// <summary>
/// get verse bookmarks
/// </summary>
/// <param name="poemId"></param>
/// <param name="vOrder"></param>
/// <param name="userId"></param>
/// <param name="poemId"></param>
/// <param name="coupletIndex"></param>
/// <returns></returns>
Task<RServiceResult<GanjoorUserBookmark[]>> GetVerseGanjoorUserBookmarks(int poemId, int vOrder, Guid userId);
Task<RServiceResult<bool>> IsCoupletBookmarked(Guid userId, int poemId, int coupletIndex);
/// <summary>
/// delete user bookmark
/// /// </summary>
/// <param name="bookmarkId"></param>
/// <param name="userId">to make sure a user can not delete another user's bookmarks</param>
/// <returns></returns>
Task<RServiceResult<bool>> DeleteGanjoorBookmark(Guid bookmarkId, Guid userId);
/// <summary>
/// get user bookmarks (artifacts and items)
/// </summary>
/// <param name="paging"></param>
/// <param name="userId"></param>
/// <param name="type"></param>
/// <returns></returns>
Task<RServiceResult<(PaginationMetadata PagingMeta, GanjoorUserBookmark[] Bookmarks)>> GetUserBookmarks(PagingParameterModel paging, Guid userId, RBookmarkType type);
Task<RServiceResult<(PaginationMetadata PagingMeta, GanjoorUserBookmark[] Bookmarks)>> GetUserBookmarks(PagingParameterModel paging, Guid userId);
}
}

View File

@ -17,17 +17,18 @@ namespace RMuseum.Services.Implementation
public partial class GanjoorService : IGanjoorService
{
/// <summary>
/// Bookmark Verse
/// Switch Bookmark for couplet
/// </summary>
/// <param name="poemId"></param>
/// <param name="vOrder"></param>
/// <param name="userId"></param>
/// <param name="type"></param>
/// <param name="poemId"></param>
/// <param name="coupletIndex"></param>
/// <returns></returns>
public async Task<RServiceResult<GanjoorUserBookmark>> SwitchBookmarkVerse(int poemId, int vOrder, Guid userId, RBookmarkType type)
public async Task<RServiceResult<GanjoorUserBookmark>> SwitchCoupletBookmark(Guid userId, int poemId, int coupletIndex)
{
var verse = await _context.GanjoorVerses.Where(v => v.PoemId == poemId && v.VOrder == vOrder).SingleAsync();
var bookmark = await _context.GanjoorUserBookmarks.Where(b => b.UserId == userId && b.PoemId == poemId && b.VerseId == verse.Id && b.RBookmarkType == type).SingleOrDefaultAsync();
int? verseId = await _GetVerseIdFromCoupletIndex(poemId, coupletIndex);
if (verseId == null)
return new RServiceResult<GanjoorUserBookmark>(null, "verse not found");
var bookmark = await _context.GanjoorUserBookmarks.Where(b => b.UserId == userId && b.PoemId == poemId && b.VerseId == verseId).SingleOrDefaultAsync();
if (bookmark != null)
{
var res = await DeleteGanjoorBookmark(bookmark.Id, userId);
@ -38,7 +39,7 @@ namespace RMuseum.Services.Implementation
}
else
{
var res = await BookmarkVerse(poemId, vOrder, userId, type);
var res = await BookmarkVerse(poemId, (int)verseId, userId);
if(!string.IsNullOrEmpty(res.ExceptionString))
return res;
bookmark = res.Result;
@ -51,16 +52,14 @@ namespace RMuseum.Services.Implementation
/// Bookmark Verse
/// </summary>
/// <param name="poemId"></param>
/// <param name="vOrder"></param>
/// <param name="verseId"></param>
/// <param name="userId"></param>
/// <param name="type"></param>
/// <returns></returns>
public async Task<RServiceResult<GanjoorUserBookmark>> BookmarkVerse(int poemId, int vOrder, Guid userId, RBookmarkType type)
public async Task<RServiceResult<GanjoorUserBookmark>> BookmarkVerse(int poemId, int verseId, Guid userId)
{
var verse = await _context.GanjoorVerses.Where(v => v.PoemId == poemId && v.VOrder == vOrder).SingleAsync();
if ((await _context.GanjoorUserBookmarks.Where(b => b.UserId == userId && b.PoemId == poemId && b.VerseId == verse.Id && b.RBookmarkType == type).SingleOrDefaultAsync()) != null)
if ((await _context.GanjoorUserBookmarks.Where(b => b.UserId == userId && b.PoemId == poemId && b.VerseId == verseId).SingleOrDefaultAsync()) != null)
{
return new RServiceResult<GanjoorUserBookmark>(null, "Artifact is already bookmarked/faved.");
return new RServiceResult<GanjoorUserBookmark>(null, "Verse is already bookmarkeded.");
}
GanjoorUserBookmark bookmark =
@ -68,8 +67,7 @@ namespace RMuseum.Services.Implementation
{
UserId = userId,
PoemId = poemId,
VerseId = verse.Id,
RBookmarkType = type,
VerseId = verseId,
DateTime = DateTime.Now,
Note = ""
};
@ -83,28 +81,28 @@ namespace RMuseum.Services.Implementation
/// <summary>
/// get user ganjoor bookmarks
/// </summary>
/// <param name="poemId"></param>
/// <param name="userId"></param>
/// <param name="type"></param>
/// <param name="poemId"></param>
/// <returns></returns>
public async Task<RServiceResult<GanjoorUserBookmark[]>> GetPoemGanjoorUserBookmarks(int poemId, Guid userId, RBookmarkType type)
public async Task<RServiceResult<GanjoorUserBookmark[]>> GetPoemUserBookmarks(Guid userId, int poemId)
{
GanjoorUserBookmark[] bookmarks = await _context.GanjoorUserBookmarks.Where(b => b.PoemId == poemId && b.UserId == userId && b.RBookmarkType == type).ToArrayAsync();
GanjoorUserBookmark[] bookmarks = await _context.GanjoorUserBookmarks.Where(b => b.PoemId == poemId && b.UserId == userId).ToArrayAsync();
return new RServiceResult<GanjoorUserBookmark[]>(bookmarks);
}
/// <summary>
/// get verse bookmarks
/// </summary>
/// <param name="poemId"></param>
/// <param name="vOrder"></param>
/// <param name="userId"></param>
/// <param name="poemId"></param>
/// <param name="coupletIndex"></param>
/// <returns></returns>
public async Task<RServiceResult<GanjoorUserBookmark[]>> GetVerseGanjoorUserBookmarks(int poemId, int vOrder, Guid userId)
public async Task<RServiceResult<bool>> IsCoupletBookmarked(Guid userId, int poemId, int coupletIndex)
{
var verse = await _context.GanjoorVerses.Where(v => v.PoemId == poemId && v.VOrder == vOrder).SingleAsync();
GanjoorUserBookmark[] bookmarks = await _context.GanjoorUserBookmarks.Where(b => b.PoemId == poemId && b.VerseId == verse.Id && b.UserId == userId).ToArrayAsync();
return new RServiceResult<GanjoorUserBookmark[]>(bookmarks);
int? verseId = await _GetVerseIdFromCoupletIndex(poemId, coupletIndex);
if (verseId == null)
return new RServiceResult<bool>(false, "verse not found");
return new RServiceResult<bool>(await _context.GanjoorUserBookmarks.Where(b => b.PoemId == poemId && b.VerseId == verseId && b.UserId == userId).AnyAsync());
}
@ -131,15 +129,14 @@ namespace RMuseum.Services.Implementation
/// </summary>
/// <param name="paging"></param>
/// <param name="userId"></param>
/// <param name="type"></param>
/// <returns></returns>
public async Task<RServiceResult<(PaginationMetadata PagingMeta, GanjoorUserBookmark[] Bookmarks)>> GetUserBookmarks(PagingParameterModel paging, Guid userId, RBookmarkType type)
public async Task<RServiceResult<(PaginationMetadata PagingMeta, GanjoorUserBookmark[] Bookmarks)>> GetUserBookmarks(PagingParameterModel paging, Guid userId)
{
var source =
_context.GanjoorUserBookmarks
.Include(b => b.Poem)
.Include(b => b.Verse)
.Where(b => b.UserId == userId && b.RBookmarkType == type)
.Where(b => b.UserId == userId)
.OrderByDescending(b => b.DateTime)
.AsQueryable();