#208 bookmark related methods

This commit is contained in:
Hamid Reza Mohammadi 2021-09-25 18:19:58 +03:30
parent 6fc3497f6c
commit 798edb14e2
6 changed files with 341 additions and 64 deletions

View File

@ -334,6 +334,11 @@ namespace RMuseum.DbContext
/// poem translations
/// </summary>
public DbSet<GanjoorPoemTranslation> GanjoorPoemTranslations { get; set; }
/// <summary>
/// ganjoor bookmarks
/// </summary>
public DbSet<GanjoorUserBookmark> GanjoorUserBookmarks { get; set; }
}
}

View File

@ -12,6 +12,10 @@
/// <summary>
/// Public Favorite
/// </summary>
Favorite = 1
Favorite = 1,
/// <summary>
/// Private Note (GanjoorComment)
/// </summary>
Note = 2
}
}

View File

@ -7,7 +7,7 @@ namespace RMuseum.Models.Ganjoor
/// <summary>
/// Ganjoor Bookmark
/// </summary>
public class GanjoorBookmark
public class GanjoorUserBookmark
{
/// <summary>
/// Id

View File

@ -1916,6 +1916,11 @@
poem translations
</summary>
</member>
<member name="P:RMuseum.DbContext.RMuseumDbContext.GanjoorUserBookmarks">
<summary>
ganjoor bookmarks
</summary>
</member>
<member name="T:RMuseum.Models.Accounting.DonationExpenditure">
<summary>
donation expenditures
@ -2934,6 +2939,11 @@
Public Favorite
</summary>
</member>
<member name="F:RMuseum.Models.Bookmark.RBookmarkType.Note">
<summary>
Private Note (GanjoorComment)
</summary>
</member>
<member name="T:RMuseum.Models.Bookmark.RUserBookmark">
<summary>
User Bookmarks
@ -4359,66 +4369,6 @@
correction review result
</summary>
</member>
<member name="T:RMuseum.Models.Ganjoor.GanjoorBookmark">
<summary>
Ganjoor Bookmark
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.GanjoorBookmark.Id">
<summary>
Id
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.GanjoorBookmark.UserId">
<summary>
User Id
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.GanjoorBookmark.User">
<summary>
User
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.GanjoorBookmark.PoemId">
<summary>
Poem Id
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.GanjoorBookmark.Poem">
<summary>
Poem
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.GanjoorBookmark.VerseId">
<summary>
Verse Id
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.GanjoorBookmark.Verse">
<summary>
Verse
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.GanjoorBookmark.DateTime">
<summary>
DateTime
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.GanjoorBookmark.RBookmarkType">
<summary>
Type
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.GanjoorBookmark.Rating">
<summary>
rating
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.GanjoorBookmark.Note">
<summary>
User Note
</summary>
</member>
<member name="T:RMuseum.Models.Ganjoor.GanjoorCat">
<summary>
Ganjoor Category
@ -5293,6 +5243,66 @@
ganjoor TOC options
</summary>
</member>
<member name="T:RMuseum.Models.Ganjoor.GanjoorUserBookmark">
<summary>
Ganjoor Bookmark
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.GanjoorUserBookmark.Id">
<summary>
Id
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.GanjoorUserBookmark.UserId">
<summary>
User Id
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.GanjoorUserBookmark.User">
<summary>
User
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.GanjoorUserBookmark.PoemId">
<summary>
Poem Id
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.GanjoorUserBookmark.Poem">
<summary>
Poem
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.GanjoorUserBookmark.VerseId">
<summary>
Verse Id
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.GanjoorUserBookmark.Verse">
<summary>
Verse
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.GanjoorUserBookmark.DateTime">
<summary>
DateTime
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.GanjoorUserBookmark.RBookmarkType">
<summary>
Type
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.GanjoorUserBookmark.Rating">
<summary>
rating
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.GanjoorUserBookmark.Note">
<summary>
User Note
</summary>
</member>
<member name="T:RMuseum.Models.Ganjoor.GanjoorVerse">
<summary>
Ganjoor Verse
@ -8582,6 +8592,51 @@
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IGanjoorService.BookmarkVerse(System.Int32,System.Int32,System.Guid,RMuseum.Models.Bookmark.RBookmarkType)">
<summary>
Bookmark Verse
</summary>
<param name="poemId"></param>
<param name="verseId"></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)">
<summary>
get user ganjoor bookmarks
</summary>
<param name="poemId"></param>
<param name="userId"></param>
<param name="type"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IGanjoorService.GetVerseGanjoorUserBookmarks(System.Int32,System.Int32,System.Guid)">
<summary>
get verse bookmarks
</summary>
<param name="poemId"></param>
<param name="verseId"></param>
<param name="userId"></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.GetBookmarks(RSecurityBackend.Models.Generic.PagingParameterModel,System.Guid,RMuseum.Models.Bookmark.RBookmarkType)">
<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">
<summary>
translation service implementation
@ -9620,6 +9675,54 @@
<summary>
IGanjoorService implementation
</summary>
<summary>
IGanjoorService implementation
</summary>
</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="verseId"></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)">
<summary>
get user ganjoor bookmarks
</summary>
<param name="poemId"></param>
<param name="userId"></param>
<param name="type"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.GanjoorService.GetVerseGanjoorUserBookmarks(System.Int32,System.Int32,System.Guid)">
<summary>
get verse bookmarks
</summary>
<param name="poemId"></param>
<param name="verseId"></param>
<param name="userId"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.GanjoorService.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.Implementation.GanjoorService.GetBookmarks(RSecurityBackend.Models.Generic.PagingParameterModel,System.Guid,RMuseum.Models.Bookmark.RBookmarkType)">
<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)">
<summary>

View File

@ -1,4 +1,5 @@
using Microsoft.AspNetCore.Http;
using RMuseum.Models.Bookmark;
using RMuseum.Models.Ganjoor;
using RMuseum.Models.Ganjoor.ViewModels;
using RMuseum.Models.GanjoorAudio.ViewModels;
@ -566,6 +567,49 @@ namespace RMuseum.Services
/// <returns></returns>
RServiceResult<bool> StartUpdatingMundexPage(Guid editingUserId);
/// <summary>
/// Bookmark Verse
/// </summary>
/// <param name="poemId"></param>
/// <param name="verseId"></param>
/// <param name="userId"></param>
/// <param name="type"></param>
/// <returns></returns>
Task<RServiceResult<GanjoorUserBookmark>> BookmarkVerse(int poemId, int verseId, Guid userId, RBookmarkType type);
/// <summary>
/// get user ganjoor bookmarks
/// </summary>
/// <param name="poemId"></param>
/// <param name="userId"></param>
/// <param name="type"></param>
/// <returns></returns>
Task<RServiceResult<GanjoorUserBookmark[]>> GetPoemGanjoorUserBookmarks(int poemId, Guid userId, RBookmarkType type);
/// <summary>
/// get verse bookmarks
/// </summary>
/// <param name="poemId"></param>
/// <param name="verseId"></param>
/// <param name="userId"></param>
/// <returns></returns>
Task<RServiceResult<GanjoorUserBookmark[]>> GetVerseGanjoorUserBookmarks(int poemId, int verseId, Guid userId);
/// <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)>> GetBookmarks(PagingParameterModel paging, Guid userId, RBookmarkType type);
}
}

View File

@ -0,0 +1,121 @@
using Microsoft.EntityFrameworkCore;
using RMuseum.Models.Ganjoor;
using RSecurityBackend.Models.Generic;
using System;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using RMuseum.Models.Artifact;
using RSecurityBackend.Services.Implementation;
using RMuseum.Models.Bookmark;
namespace RMuseum.Services.Implementation
{
/// <summary>
/// IGanjoorService implementation
/// </summary>
public partial class GanjoorService : IGanjoorService
{
/// <summary>
/// Bookmark Verse
/// </summary>
/// <param name="poemId"></param>
/// <param name="verseId"></param>
/// <param name="userId"></param>
/// <param name="type"></param>
/// <returns></returns>
public async Task<RServiceResult<GanjoorUserBookmark>> BookmarkVerse(int poemId, int verseId, Guid userId, RBookmarkType type)
{
if ((await _context.GanjoorUserBookmarks.Where(b => b.UserId == userId && b.PoemId == poemId && b.VerseId == verseId && b.RBookmarkType == type).SingleOrDefaultAsync()) != null)
{
return new RServiceResult<GanjoorUserBookmark>(null, "Artifact is already bookmarked/faved.");
}
GanjoorUserBookmark bookmark =
new GanjoorUserBookmark()
{
UserId = userId,
PoemId = poemId,
VerseId = verseId,
RBookmarkType = type,
DateTime = DateTime.Now,
Note = ""
};
_context.GanjoorUserBookmarks.Add(bookmark);
await _context.SaveChangesAsync();
return new RServiceResult<GanjoorUserBookmark>(bookmark);
}
/// <summary>
/// get user ganjoor bookmarks
/// </summary>
/// <param name="poemId"></param>
/// <param name="userId"></param>
/// <param name="type"></param>
/// <returns></returns>
public async Task<RServiceResult<GanjoorUserBookmark[]>> GetPoemGanjoorUserBookmarks(int poemId, Guid userId, RBookmarkType type)
{
GanjoorUserBookmark[] bookmarks = await _context.GanjoorUserBookmarks.Where(b => b.PoemId == poemId && b.UserId == userId && b.RBookmarkType == type).ToArrayAsync();
return new RServiceResult<GanjoorUserBookmark[]>(bookmarks);
}
/// <summary>
/// get verse bookmarks
/// </summary>
/// <param name="poemId"></param>
/// <param name="verseId"></param>
/// <param name="userId"></param>
/// <returns></returns>
public async Task<RServiceResult<GanjoorUserBookmark[]>> GetVerseGanjoorUserBookmarks(int poemId, int verseId, Guid userId)
{
GanjoorUserBookmark[] bookmarks = await _context.GanjoorUserBookmarks.Where(b => b.PoemId == poemId && b.VerseId == verseId && b.UserId == userId).ToArrayAsync();
return new RServiceResult<GanjoorUserBookmark[]>(bookmarks);
}
/// <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>
public async Task<RServiceResult<bool>> DeleteGanjoorBookmark(Guid bookmarkId, Guid userId)
{
GanjoorUserBookmark bookmark = await _context.GanjoorUserBookmarks.Where(b => b.Id == bookmarkId && b.UserId == userId).SingleOrDefaultAsync();
if (bookmark == null)
{
return new RServiceResult<bool>(false, "bookmark not found");
}
_context.GanjoorUserBookmarks.Remove(bookmark);
await _context.SaveChangesAsync();
return new RServiceResult<bool>(true);
}
/// <summary>
/// get user bookmarks (artifacts and items)
/// </summary>
/// <param name="paging"></param>
/// <param name="userId"></param>
/// <param name="type"></param>
/// <returns></returns>
public async Task<RServiceResult<(PaginationMetadata PagingMeta, GanjoorUserBookmark[] Bookmarks)>> GetBookmarks(PagingParameterModel paging, Guid userId, RBookmarkType type)
{
var source =
_context.GanjoorUserBookmarks
.Include(b => b.Poem)
.Include(b => b.Verse)
.Where(b => b.UserId == userId && b.RBookmarkType == type)
.OrderByDescending(b => b.DateTime)
.AsQueryable();
(PaginationMetadata PagingMeta, GanjoorUserBookmark[] Bookmarks) paginatedResult =
await QueryablePaginator<GanjoorUserBookmark>.Paginate(source, paging);
return new RServiceResult<(PaginationMetadata PagingMeta, GanjoorUserBookmark[] Bookmarks)>(paginatedResult);
}
}
}