193 lines
10 KiB
C#
193 lines
10 KiB
C#
using Microsoft.EntityFrameworkCore;
|
||
using backend.Models;
|
||
|
||
namespace backend.Data;
|
||
|
||
public class AppDbContext : DbContext
|
||
{
|
||
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
|
||
|
||
public DbSet<User> Users => Set<User>();
|
||
public DbSet<QuizQuestion> QuizQuestions => Set<QuizQuestion>();
|
||
public DbSet<UserQuizAttempt> UserQuizAttempts => Set<UserQuizAttempt>();
|
||
public DbSet<UserQuizAnswer> UserQuizAnswers => Set<UserQuizAnswer>();
|
||
public DbSet<KhatmItem> KhatmItems => Set<KhatmItem>();
|
||
public DbSet<UserKhatmSelection> UserKhatmSelections => Set<UserKhatmSelection>();
|
||
public DbSet<UserTotalScore> UserTotalScores => Set<UserTotalScore>();
|
||
|
||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||
{
|
||
base.OnModelCreating(modelBuilder);
|
||
|
||
// User
|
||
modelBuilder.Entity<User>(entity =>
|
||
{
|
||
entity.HasIndex(u => u.Contact).IsUnique();
|
||
entity.HasIndex(u => u.TrackingCode).IsUnique();
|
||
|
||
entity.HasOne(u => u.QuizAttempt)
|
||
.WithOne(qa => qa.User)
|
||
.HasForeignKey<UserQuizAttempt>(qa => qa.UserId)
|
||
.OnDelete(DeleteBehavior.Cascade);
|
||
|
||
entity.HasOne(u => u.TotalScore)
|
||
.WithOne(ts => ts.User)
|
||
.HasForeignKey<UserTotalScore>(ts => ts.UserId)
|
||
.OnDelete(DeleteBehavior.Cascade);
|
||
});
|
||
|
||
// UserQuizAttempt
|
||
modelBuilder.Entity<UserQuizAttempt>(entity =>
|
||
{
|
||
entity.HasIndex(qa => qa.UserId).IsUnique();
|
||
|
||
entity.HasMany(qa => qa.Answers)
|
||
.WithOne(a => a.QuizAttempt)
|
||
.HasForeignKey(a => a.UserQuizAttemptId)
|
||
.OnDelete(DeleteBehavior.Cascade);
|
||
});
|
||
|
||
// UserQuizAnswer
|
||
modelBuilder.Entity<UserQuizAnswer>(entity =>
|
||
{
|
||
entity.HasOne(a => a.Question)
|
||
.WithMany(q => q.Answers)
|
||
.HasForeignKey(a => a.QuestionId)
|
||
.OnDelete(DeleteBehavior.Cascade);
|
||
});
|
||
|
||
// UserKhatmSelection
|
||
modelBuilder.Entity<UserKhatmSelection>(entity =>
|
||
{
|
||
entity.HasIndex(uk => new { uk.UserId, uk.KhatmItemId }).IsUnique();
|
||
|
||
entity.HasOne(uk => uk.User)
|
||
.WithMany(u => u.KhatmSelections)
|
||
.HasForeignKey(uk => uk.UserId)
|
||
.OnDelete(DeleteBehavior.Cascade);
|
||
|
||
entity.HasOne(uk => uk.KhatmItem)
|
||
.WithMany(ki => ki.UserSelections)
|
||
.HasForeignKey(uk => uk.KhatmItemId)
|
||
.OnDelete(DeleteBehavior.Cascade);
|
||
});
|
||
|
||
// UserTotalScore
|
||
modelBuilder.Entity<UserTotalScore>(entity =>
|
||
{
|
||
entity.HasIndex(ts => ts.UserId).IsUnique();
|
||
});
|
||
|
||
// Seed data: KhatmItems
|
||
modelBuilder.Entity<KhatmItem>().HasData(
|
||
new KhatmItem { Id = 1, Title = "ختم نادعلی", Points = 5, Url = "https://example.com/khatm/nadali" },
|
||
new KhatmItem { Id = 2, Title = "خطبه غدیر", Points = 10, Url = "https://example.com/khatm/ghadir" },
|
||
new KhatmItem { Id = 3, Title = "دعای توسل", Points = 7, Url = "https://example.com/khatm/tavassol" }
|
||
);
|
||
|
||
// Seed data: QuizQuestions
|
||
modelBuilder.Entity<QuizQuestion>().HasData(
|
||
new QuizQuestion
|
||
{
|
||
Id = 1,
|
||
QuestionText = "كدام يك از آيات زير مربوط به حجاب نمي باشد؟",
|
||
Option1 = "آيه 31 سوره نور",
|
||
Option2 = "آيه 58 – 60 سوره نور",
|
||
Option3 = "آيه 59 – 60 سوره احزاب",
|
||
Option4 = "آيه 59 – 60 سوره نساء",
|
||
CorrectOption = 4
|
||
},
|
||
new QuizQuestion
|
||
{
|
||
Id = 2,
|
||
QuestionText = "اين قسمت از آيه 31 سوره نور « قل للمومنات يغضضن من ابصار هن و يحفظن فروجهن» بيانگر كدام دو تكليف است؟",
|
||
Option1 = "پوشش – عفاف",
|
||
Option2 = "ترك نظر – پوشش",
|
||
Option3 = "ترك نظر – پاكدامني",
|
||
Option4 = "پوشش – پاكدامني",
|
||
CorrectOption = 3
|
||
},
|
||
new QuizQuestion
|
||
{
|
||
Id = 3,
|
||
QuestionText = "منظور از (( قواعد )) در سوره نور آيات 58-60 چه كساني هستند؟",
|
||
Option1 = "زنان سالخورده اي كه اميدي به ازدواج ايشان نمي باشد",
|
||
Option2 = "بردگان و مملوكان",
|
||
Option3 = "طفيلياني كه نيازي به زن ندارند",
|
||
Option4 = "اطفال نابالغ ولو مميز نزديك به بلوغ",
|
||
CorrectOption = 1
|
||
},
|
||
new QuizQuestion
|
||
{
|
||
Id = 4,
|
||
QuestionText = "هشتمین بخش خطبه غدیر در چه موضوعی است؟",
|
||
Option1 = "در مورد ثمرات ولایت و محبت اهلبیت",
|
||
Option2 = "در مورد جنبه غضب الهی",
|
||
Option3 = "در مورد امام مهدی علیهالسلام",
|
||
Option4 = "اقرار لسانی",
|
||
CorrectOption = 3
|
||
},
|
||
new QuizQuestion
|
||
{
|
||
Id = 5,
|
||
QuestionText = "لقب «امیرالمؤمنین» توسط چه کسی به مولا علی علیهالسلام اطلاق شد؟",
|
||
Option1 = "این لقب به دستور مستقیم از جانب خداوند به ایشان داده شد",
|
||
Option2 = "پیامبر اکرم، خودشان این لقب را انتخاب کردند",
|
||
Option3 = "مردم به علت فضائل بسیار ایشان، این لقب را انتخاب کردند",
|
||
Option4 = "به درخواست خود ایشان بود",
|
||
CorrectOption = 1
|
||
},
|
||
new QuizQuestion
|
||
{
|
||
Id = 6,
|
||
QuestionText = "طبق فرمایش پیامبر اکرم در غدیر، عبارت «إِنَّ الإِنسَانَ لَفِي خُسْرٍ»، «انسان در زیان است» درباره چه کسانی است؟",
|
||
Option1 = "کسانی که خبر اسلام به آنان نرسیده است",
|
||
Option2 = "کسانی که در مدیریت زمان ضعیف هستند",
|
||
Option3 = "دشمنان آل محمد (صلیاللهعلیهوآله)",
|
||
Option4 = "اهل کتاب",
|
||
CorrectOption = 3
|
||
},
|
||
new QuizQuestion
|
||
{
|
||
Id = 7,
|
||
QuestionText = "در کدام آیه از قرآن مجید خداوند می فرماید که درباره علی تفریط و کوتاهی نکنید؟",
|
||
Option1 = "سوره کهف آیه ۲۸",
|
||
Option2 = "سوره انعام آیه ۶۱",
|
||
Option3 = "سوره زمر ۵۶",
|
||
Option4 = "سوره طه ۴۵",
|
||
CorrectOption = 3
|
||
},
|
||
new QuizQuestion
|
||
{
|
||
Id = 8,
|
||
QuestionText = "طبق آیه 67 سوره مائده وظيفه رسول خدا در برابر امامت چيست و آيه در شأن چه كسی نازل شده است؟\n«يَا أَيُّهَا الرَّسُولُ بَلِّغْ مَا أُنْزِلَ إِلَيْكَ مِنْ رَبِّكَ وَإِنْ لَمْ تَفْعَلْ فَمَا بَلَّغْتَ رِسَالَتَهُ ...»",
|
||
Option1 = "تعيين امامت ،علی عليه السلام",
|
||
Option2 = "تبليغ امامت، علی عليه السلام",
|
||
Option3 = "تعيين و تبليغ امامت، علی عليه السلام",
|
||
Option4 = "سپردن تعیین امامت به مردم",
|
||
CorrectOption = 2
|
||
},
|
||
new QuizQuestion
|
||
{
|
||
Id = 9,
|
||
QuestionText = "طبق روایت امام رضا علیه السلام برترین عید امت اسلامی کدام است؟",
|
||
Option1 = "عید غدیر، روز تبلیغ و معرفی امیرالمومنین به عنوان جانشین پیامبر",
|
||
Option2 = "روز جمعه",
|
||
Option3 = "عید قربان، حج تمتع",
|
||
Option4 = "عید فطر، پایان یک ماه بندگی",
|
||
CorrectOption = 1
|
||
},
|
||
new QuizQuestion
|
||
{
|
||
Id = 10,
|
||
QuestionText = "با توجه به مطلبی که در آیه شریفه «الْيَوْمَ أَكْمَلْتُ لَكُمْ دِينَكُمْ وَ أَتْمَمْتُ عَلَيْكُمْ نِعْمَتِي وَ رَضِيتُ لَكُمُ الْإِسْلامَ دِينا» در روز غدیر نازل گشته است. کدام گزینه صحیح نمیباشد؟",
|
||
Option1 = "با ابلاغ ولایت و امامت امیرالمومنین(علیه السلام) توسط پیامبر اکرم(صلی الله علیه و آله) دین کامل گشت",
|
||
Option2 = "خداوند با ابلاغ ولایت و امامت امیرالمومنین(علیه السلام) و یازده فرزند پاکشان از اسلام اعلام رضایت فرمودند",
|
||
Option3 = "شرط اینکه دین شخص مسلمان مورد رضایت خداوند متعال قرار گیرد پذیرش ولایت و امامت ائمه (علیهم السلام) است",
|
||
Option4 = "امامت از فروع دین بوده و قبول یا عدم پذیرش آن لطمهای به آن شخص وارد نمیکند",
|
||
CorrectOption = 4
|
||
}
|
||
);
|
||
}
|
||
}
|