#208 simplifying db structures
This commit is contained in:
parent
08ab7b6711
commit
b0cfd18469
@ -120,6 +120,13 @@ namespace RMuseum.DbContext
|
||||
.HasIndex(m => m.Name)
|
||||
.IsUnique();
|
||||
|
||||
builder.Entity<GanjoorUserBookmark>().HasOne(b => b.Verse)
|
||||
.WithMany().Metadata.DeleteBehavior = DeleteBehavior.Restrict;
|
||||
|
||||
builder.Entity<GanjoorUserBookmark>()
|
||||
.HasIndex(b => new { b.UserId, b.PoemId, b.VerseId })
|
||||
.IsUnique();
|
||||
|
||||
|
||||
//Index set suggested by SQL Server Tuning Wizard -- end
|
||||
|
||||
|
||||
@ -10,7 +10,7 @@ using RMuseum.DbContext;
|
||||
namespace RMuseum.Migrations
|
||||
{
|
||||
[DbContext(typeof(RMuseumDbContext))]
|
||||
[Migration("20210925151537_GanjoorUserBookmarks")]
|
||||
[Migration("20210927065456_GanjoorUserBookmarks")]
|
||||
partial class GanjoorUserBookmarks
|
||||
{
|
||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||
@ -995,26 +995,26 @@ namespace RMuseum.Migrations
|
||||
b.Property<int>("PoemId")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<int>("RBookmarkType")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<int>("Rating")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<Guid>("UserId")
|
||||
.HasColumnType("uniqueidentifier");
|
||||
|
||||
b.Property<int?>("VerseId")
|
||||
b.Property<int?>("Verse2Id")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<int>("VerseId")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("PoemId");
|
||||
|
||||
b.HasIndex("UserId");
|
||||
b.HasIndex("Verse2Id");
|
||||
|
||||
b.HasIndex("VerseId");
|
||||
|
||||
b.HasIndex("UserId", "PoemId", "VerseId")
|
||||
.IsUnique();
|
||||
|
||||
b.ToTable("GanjoorUserBookmarks");
|
||||
});
|
||||
|
||||
@ -2677,15 +2677,23 @@ namespace RMuseum.Migrations
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.HasOne("RMuseum.Models.Ganjoor.GanjoorVerse", "Verse2")
|
||||
.WithMany()
|
||||
.HasForeignKey("Verse2Id");
|
||||
|
||||
b.HasOne("RMuseum.Models.Ganjoor.GanjoorVerse", "Verse")
|
||||
.WithMany()
|
||||
.HasForeignKey("VerseId");
|
||||
.HasForeignKey("VerseId")
|
||||
.OnDelete(DeleteBehavior.Restrict)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("Poem");
|
||||
|
||||
b.Navigation("User");
|
||||
|
||||
b.Navigation("Verse");
|
||||
|
||||
b.Navigation("Verse2");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("RMuseum.Models.Ganjoor.GanjoorVerse", b =>
|
||||
@ -14,11 +14,10 @@ namespace RMuseum.Migrations
|
||||
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
|
||||
UserId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
|
||||
PoemId = table.Column<int>(type: "int", nullable: false),
|
||||
VerseId = table.Column<int>(type: "int", nullable: true),
|
||||
DateTime = table.Column<DateTime>(type: "datetime2", nullable: false),
|
||||
RBookmarkType = table.Column<int>(type: "int", nullable: false),
|
||||
Rating = table.Column<int>(type: "int", nullable: false),
|
||||
Note = table.Column<string>(type: "nvarchar(max)", nullable: true)
|
||||
VerseId = table.Column<int>(type: "int", nullable: false),
|
||||
Verse2Id = table.Column<int>(type: "int", nullable: true),
|
||||
Note = table.Column<string>(type: "nvarchar(max)", nullable: true),
|
||||
DateTime = table.Column<DateTime>(type: "datetime2", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
@ -35,6 +34,12 @@ namespace RMuseum.Migrations
|
||||
principalTable: "GanjoorPoems",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_GanjoorUserBookmarks_GanjoorVerses_Verse2Id",
|
||||
column: x => x.Verse2Id,
|
||||
principalTable: "GanjoorVerses",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Restrict);
|
||||
table.ForeignKey(
|
||||
name: "FK_GanjoorUserBookmarks_GanjoorVerses_VerseId",
|
||||
column: x => x.VerseId,
|
||||
@ -49,9 +54,15 @@ namespace RMuseum.Migrations
|
||||
column: "PoemId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_GanjoorUserBookmarks_UserId",
|
||||
name: "IX_GanjoorUserBookmarks_UserId_PoemId_VerseId",
|
||||
table: "GanjoorUserBookmarks",
|
||||
column: "UserId");
|
||||
columns: new[] { "UserId", "PoemId", "VerseId" },
|
||||
unique: true);
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_GanjoorUserBookmarks_Verse2Id",
|
||||
table: "GanjoorUserBookmarks",
|
||||
column: "Verse2Id");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_GanjoorUserBookmarks_VerseId",
|
||||
@ -993,26 +993,26 @@ namespace RMuseum.Migrations
|
||||
b.Property<int>("PoemId")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<int>("RBookmarkType")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<int>("Rating")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<Guid>("UserId")
|
||||
.HasColumnType("uniqueidentifier");
|
||||
|
||||
b.Property<int?>("VerseId")
|
||||
b.Property<int?>("Verse2Id")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<int>("VerseId")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("PoemId");
|
||||
|
||||
b.HasIndex("UserId");
|
||||
b.HasIndex("Verse2Id");
|
||||
|
||||
b.HasIndex("VerseId");
|
||||
|
||||
b.HasIndex("UserId", "PoemId", "VerseId")
|
||||
.IsUnique();
|
||||
|
||||
b.ToTable("GanjoorUserBookmarks");
|
||||
});
|
||||
|
||||
@ -2675,15 +2675,23 @@ namespace RMuseum.Migrations
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.HasOne("RMuseum.Models.Ganjoor.GanjoorVerse", "Verse2")
|
||||
.WithMany()
|
||||
.HasForeignKey("Verse2Id");
|
||||
|
||||
b.HasOne("RMuseum.Models.Ganjoor.GanjoorVerse", "Verse")
|
||||
.WithMany()
|
||||
.HasForeignKey("VerseId");
|
||||
.HasForeignKey("VerseId")
|
||||
.OnDelete(DeleteBehavior.Restrict)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("Poem");
|
||||
|
||||
b.Navigation("User");
|
||||
|
||||
b.Navigation("Verse");
|
||||
|
||||
b.Navigation("Verse2");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("RMuseum.Models.Ganjoor.GanjoorVerse", b =>
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
using RMuseum.Models.Bookmark;
|
||||
using RSecurityBackend.Models.Auth.Db;
|
||||
using RSecurityBackend.Models.Auth.Db;
|
||||
using System;
|
||||
|
||||
namespace RMuseum.Models.Ganjoor
|
||||
@ -37,31 +36,31 @@ namespace RMuseum.Models.Ganjoor
|
||||
/// <summary>
|
||||
/// Verse Id
|
||||
/// </summary>
|
||||
public int? VerseId { get; set; }
|
||||
public int VerseId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Verse
|
||||
/// </summary>
|
||||
public virtual GanjoorVerse Verse { get; set; }
|
||||
public GanjoorVerse Verse { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Verse 2 Id
|
||||
/// </summary>
|
||||
public int? Verse2Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Verse 2
|
||||
/// </summary>
|
||||
public virtual GanjoorVerse Verse2 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// note
|
||||
/// </summary>
|
||||
public string Note { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// DateTime
|
||||
/// </summary>
|
||||
public DateTime DateTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Type
|
||||
/// </summary>
|
||||
public RBookmarkType RBookmarkType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// rating
|
||||
/// </summary>
|
||||
public int Rating { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// User Note
|
||||
/// </summary>
|
||||
public string Note { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@ -5312,24 +5312,24 @@
|
||||
Verse
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.GanjoorUserBookmark.DateTime">
|
||||
<member name="P:RMuseum.Models.Ganjoor.GanjoorUserBookmark.Verse2Id">
|
||||
<summary>
|
||||
DateTime
|
||||
Verse 2 Id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.GanjoorUserBookmark.RBookmarkType">
|
||||
<member name="P:RMuseum.Models.Ganjoor.GanjoorUserBookmark.Verse2">
|
||||
<summary>
|
||||
Type
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.GanjoorUserBookmark.Rating">
|
||||
<summary>
|
||||
rating
|
||||
Verse 2
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.GanjoorUserBookmark.Note">
|
||||
<summary>
|
||||
User Note
|
||||
note
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.GanjoorUserBookmark.DateTime">
|
||||
<summary>
|
||||
DateTime
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.Ganjoor.GanjoorVerse">
|
||||
@ -9706,12 +9706,13 @@
|
||||
<param name="coupletIndex"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.GanjoorService.BookmarkVerse(System.Int32,System.Int32,System.Guid)">
|
||||
<member name="M:RMuseum.Services.Implementation.GanjoorService.BookmarkVerse(System.Int32,System.Int32,System.Nullable{System.Int32},System.Guid)">
|
||||
<summary>
|
||||
Bookmark Verse
|
||||
</summary>
|
||||
<param name="poemId"></param>
|
||||
<param name="verseId"></param>
|
||||
<param name="verse2Id"></param>
|
||||
<param name="userId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
@ -9904,6 +9905,14 @@
|
||||
<param name="coupletIndex"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.GanjoorService._GetVerse12IdFromCoupletIndex(System.Int32,System.Int32)">
|
||||
<summary>
|
||||
verse 1/ 2 id from couplet index
|
||||
</summary>
|
||||
<param name="poemId"></param>
|
||||
<param name="coupletIndex"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.GanjoorService.GetPoemComments(System.Int32,System.Guid,System.Nullable{System.Int32})">
|
||||
<summary>
|
||||
get poem comments
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using RMuseum.Models.Bookmark;
|
||||
using RMuseum.Models.Ganjoor;
|
||||
using RMuseum.Models.Ganjoor.ViewModels;
|
||||
using RMuseum.Models.GanjoorAudio.ViewModels;
|
||||
|
||||
@ -5,9 +5,7 @@ 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
|
||||
{
|
||||
@ -25,10 +23,10 @@ namespace RMuseum.Services.Implementation
|
||||
/// <returns></returns>
|
||||
public async Task<RServiceResult<GanjoorUserBookmark>> SwitchCoupletBookmark(Guid userId, int poemId, int coupletIndex)
|
||||
{
|
||||
int? verseId = await _GetVerseIdFromCoupletIndex(poemId, coupletIndex);
|
||||
if (verseId == null)
|
||||
(int Verse1, int? Verse2)? verse12 = await _GetVerse12IdFromCoupletIndex(poemId, coupletIndex);
|
||||
if (verse12 == 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();
|
||||
var bookmark = await _context.GanjoorUserBookmarks.Where(b => b.UserId == userId && b.PoemId == poemId && b.VerseId == verse12.Value.Verse1).SingleOrDefaultAsync();
|
||||
if (bookmark != null)
|
||||
{
|
||||
var res = await DeleteGanjoorBookmark(bookmark.Id, userId);
|
||||
@ -39,7 +37,7 @@ namespace RMuseum.Services.Implementation
|
||||
}
|
||||
else
|
||||
{
|
||||
var res = await BookmarkVerse(poemId, (int)verseId, userId);
|
||||
var res = await BookmarkVerse(poemId, verse12.Value.Verse1, verse12.Value.Verse2, userId);
|
||||
if(!string.IsNullOrEmpty(res.ExceptionString))
|
||||
return res;
|
||||
bookmark = res.Result;
|
||||
@ -53,9 +51,10 @@ namespace RMuseum.Services.Implementation
|
||||
/// </summary>
|
||||
/// <param name="poemId"></param>
|
||||
/// <param name="verseId"></param>
|
||||
/// <param name="verse2Id"></param>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<RServiceResult<GanjoorUserBookmark>> BookmarkVerse(int poemId, int verseId, Guid userId)
|
||||
public async Task<RServiceResult<GanjoorUserBookmark>> BookmarkVerse(int poemId, int verseId, int? verse2Id, Guid userId)
|
||||
{
|
||||
if ((await _context.GanjoorUserBookmarks.Where(b => b.UserId == userId && b.PoemId == poemId && b.VerseId == verseId).SingleOrDefaultAsync()) != null)
|
||||
{
|
||||
@ -68,8 +67,8 @@ namespace RMuseum.Services.Implementation
|
||||
UserId = userId,
|
||||
PoemId = poemId,
|
||||
VerseId = verseId,
|
||||
Verse2Id = verse2Id,
|
||||
DateTime = DateTime.Now,
|
||||
Note = ""
|
||||
};
|
||||
|
||||
_context.GanjoorUserBookmarks.Add(bookmark);
|
||||
|
||||
@ -545,6 +545,52 @@ namespace RMuseum.Services.Implementation
|
||||
return res;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// verse 1/ 2 id from couplet index
|
||||
/// </summary>
|
||||
/// <param name="poemId"></param>
|
||||
/// <param name="coupletIndex"></param>
|
||||
/// <returns></returns>
|
||||
private async Task<(int Verse1, int? Verse2)?> _GetVerse12IdFromCoupletIndex(int poemId, int coupletIndex)
|
||||
{
|
||||
int? Verse1Id = null;
|
||||
int? Verse2Id = null;
|
||||
|
||||
var verses = await _context.GanjoorVerses.Where(v => v.PoemId == poemId).OrderBy(v => v.VOrder).ToListAsync();
|
||||
int cIndex = -1;
|
||||
for (int i = 0; i < verses.Count; i++)
|
||||
{
|
||||
if (verses[i].VersePosition != VersePosition.Left && verses[i].VersePosition != VersePosition.CenteredVerse2)
|
||||
cIndex++;
|
||||
if (cIndex == coupletIndex)
|
||||
{
|
||||
Verse1Id = verses[i].Id;
|
||||
if (verses[i].VersePosition == VersePosition.Right)
|
||||
{
|
||||
if (i < verses.Count - 1)
|
||||
{
|
||||
Verse2Id = verses[i + 1].Id;
|
||||
}
|
||||
}
|
||||
if (verses[i].VersePosition == VersePosition.CenteredVerse1)
|
||||
{
|
||||
if (i < verses.Count - 1)
|
||||
{
|
||||
if (verses[i + 1].VersePosition == VersePosition.CenteredVerse2)
|
||||
{
|
||||
Verse2Id = verses[i + 1].Id;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (Verse1Id == null)
|
||||
return null;
|
||||
return ((int)Verse1Id, Verse2Id);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user