source: iknow-api/Data/AppDbContext.cs@ a92a2a4

Last change on this file since a92a2a4 was a92a2a4, checked in by imbrsk <boris696boris@…>, 11 months ago

ADDEED ALL MODESL :)

  • Property mode set to 100644
File size: 5.1 KB
Line 
1using Microsoft.EntityFrameworkCore;
2using iknow_api.Models;
3
4namespace iknow_api.Data
5{
6 public class AppDbContext : DbContext
7 {
8 public AppDbContext(DbContextOptions<AppDbContext> options)
9 : base(options) { }
10
11 public DbSet<User> User { get; set; }
12 public DbSet<ContactInfo> ContactInfo { get; set; }
13 public DbSet<HighSchool> HighSchool { get; set; }
14 public DbSet<EnrollmentInfo> EnrollmentInfo { get; set; }
15 public DbSet<RefreshToken> RefreshToken { get; set; }
16
17 public DbSet<Subject> Subjects { get; set; }
18 public DbSet<DependencySubject> DependencySubjects { get; set; }
19
20
21 protected override void OnModelCreating(ModelBuilder modelBuilder)
22 {
23 base.OnModelCreating(modelBuilder);
24
25 // -------------------------
26 // DependencySubject (self-referencing many-to-many)
27 // -------------------------
28 modelBuilder.Entity<DependencySubject>()
29 .HasKey(ds => new { ds.SubjectId, ds.DependencyId });
30
31 modelBuilder.Entity<DependencySubject>()
32 .HasOne(ds => ds.Subject)
33 .WithMany(s => s.Dependencies)
34 .HasForeignKey(ds => ds.SubjectId)
35 .OnDelete(DeleteBehavior.Restrict);
36
37 modelBuilder.Entity<DependencySubject>()
38 .HasOne(ds => ds.Dependency)
39 .WithMany(s => s.Dependents)
40 .HasForeignKey(ds => ds.DependencyId)
41 .OnDelete(DeleteBehavior.Restrict);
42
43 // -------------------------
44 // MajorSubjects (many-to-many)
45 // -------------------------
46 modelBuilder.Entity<MajorSubjects>()
47 .HasKey(ab => new { ab.MajorId, ab.SubjectId });
48
49 modelBuilder.Entity<MajorSubjects>()
50 .HasOne(ab => ab.Majors)
51 .WithMany(a => a.Subjects)
52 .HasForeignKey(ab => ab.MajorId)
53 .OnDelete(DeleteBehavior.Cascade);
54
55 modelBuilder.Entity<MajorSubjects>()
56 .HasOne(ab => ab.Subjects)
57 .WithMany(b => b.Majors)
58 .HasForeignKey(ab => ab.SubjectId)
59 .OnDelete(DeleteBehavior.Cascade);
60
61 // -------------------------
62 // UserDocuments (many-to-many)
63 // -------------------------
64 modelBuilder.Entity<UserDocuments>()
65 .HasKey(ab => new { ab.UserId, ab.DocumentId });
66
67 modelBuilder.Entity<UserDocuments>()
68 .HasOne(ab => ab.User)
69 .WithMany(a => a.Documents)
70 .HasForeignKey(ab => ab.UserId)
71 .OnDelete(DeleteBehavior.Cascade);
72
73 modelBuilder.Entity<UserDocuments>()
74 .HasOne(ab => ab.Documents)
75 .WithMany(b => b.User)
76 .HasForeignKey(ab => ab.DocumentId)
77 .OnDelete(DeleteBehavior.Cascade);
78
79 // -------------------------
80 // Payment (user enrollment)
81 // -------------------------
82 modelBuilder.Entity<Payment>()
83 .HasKey(ab => new { ab.UserId, ab.EnrollmentInfoId });
84
85 modelBuilder.Entity<Payment>()
86 .HasOne(ab => ab.User)
87 .WithMany(a => a.EnrolledSemesters)
88 .HasForeignKey(ab => ab.UserId)
89 .OnDelete(DeleteBehavior.Cascade);
90
91 modelBuilder.Entity<Payment>()
92 .HasOne(ab => ab.EnrolledSemesters)
93 .WithMany(b => b.Users)
94 .HasForeignKey(ab => ab.EnrollmentInfoId)
95 .OnDelete(DeleteBehavior.Cascade);
96
97 // -------------------------
98 // SemesterSubject (student enrollments and professor assignments)
99 // -------------------------
100 modelBuilder.Entity<SemesterSubject>()
101 .HasKey(ss => ss.Id); // or composite key if you prefer {UserId, EnrolledSemesterId, SubjectId}
102
103 // Student enrollment
104 modelBuilder.Entity<SemesterSubject>()
105 .HasOne(ss => ss.User)
106 .WithMany(u => u.EnrolledSemesterUserSubjects)
107 .HasForeignKey(ss => ss.UserId)
108 .OnDelete(DeleteBehavior.Restrict);
109
110 // Professor teaching
111 modelBuilder.Entity<SemesterSubject>()
112 .HasOne(ss => ss.Professor)
113 .WithMany(u => u.TeachingSubjects)
114 .HasForeignKey(ss => ss.ProfessorId)
115 .OnDelete(DeleteBehavior.Restrict);
116
117 // Subject relation
118 modelBuilder.Entity<SemesterSubject>()
119 .HasOne(ss => ss.Subject)
120 .WithMany(s => s.SemesterSubjects)
121 .HasForeignKey(ss => ss.SubjectId)
122 .OnDelete(DeleteBehavior.Restrict);
123
124 // EnrolledSemester relation
125 modelBuilder.Entity<SemesterSubject>()
126 .HasOne(ss => ss.EnrolledSemester)
127 .WithMany(es => es.SemesterSubjects)
128 .HasForeignKey(ss => ss.EnrolledSemesterId)
129 .OnDelete(DeleteBehavior.Restrict);
130 }
131
132 }
133}
Note: See TracBrowser for help on using the repository browser.