Files
Ghadir/backend/Data/AppDbContext.cs
2026-06-03 18:31:41 +03:30

193 lines
10 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}
);
}
}