source: iknow-api/Data/AppDbContext.cs@ 39f76a9

Last change on this file since 39f76a9 was 39f76a9, checked in by imbrsk <boris696boris@…>, 10 months ago

feat: Add ActiveSemesters model and update related entities

  • Introduced ActiveSemesters model with properties: id, year, and Type.
  • Updated EnrolledSemesters model to include new properties: CratedAt, LastChange, Veryfied, Node, and StudentComment.
  • Modified Payment model to change the primary key and updated table name to Payments.
  • Added Signature property to SemesterSubject model and updated table name to SemesterSubjects.
  • Created new migration to reflect changes in the database schema.
  • Updated User model to include a reference to Payments.
  • Property mode set to 100644
File size: 6.7 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 public DbSet<Subject> Subjects { get; set; }
17 public DbSet<DependencySubject> DependencySubjects { get; set; }
18 public DbSet<Major> Majors { get; set; }
19 public DbSet<PassedSubject> PassedSubjects { get; set; }
20 public DbSet<EnrolledSemesters> EnrolledSemesters { get; set; }
21 public DbSet<ActiveSemesters> ActiveSemesters { get; set; }
22 public DbSet<SemesterSubject> SemesterSubjects { get; set; }
23 public DbSet<MajorSubjects> MajorSubjects { get; set; }
24 public DbSet<UserDocuments> UserDocuments { get; set; }
25 public DbSet<Documents> Documents { get; set; }
26 public DbSet<Payment> Payments { get; set; }
27
28
29 protected override void OnModelCreating(ModelBuilder modelBuilder)
30 {
31 base.OnModelCreating(modelBuilder);
32
33 modelBuilder.Entity<Major>().HasData(
34 new Major { Id = 1, Name = "PIT" },
35 new Major { Id = 2, Name = "SIIS" },
36 new Major { Id = 3, Name = "SEIS" },
37 new Major { Id = 4, Name = "KN" }
38 );
39
40
41 // -------------------------
42 // DependencySubject (self-referencing many-to-many)
43 // -------------------------
44 modelBuilder.Entity<DependencySubject>()
45 .HasKey(ds => new { ds.SubjectId, ds.DependencyId });
46
47 modelBuilder.Entity<DependencySubject>()
48 .HasOne(ds => ds.Subject)
49 .WithMany(s => s.Dependencies)
50 .HasForeignKey(ds => ds.SubjectId)
51 .OnDelete(DeleteBehavior.Restrict);
52
53 modelBuilder.Entity<DependencySubject>()
54 .HasOne(ds => ds.Dependency)
55 .WithMany(s => s.Dependents)
56 .HasForeignKey(ds => ds.DependencyId)
57 .OnDelete(DeleteBehavior.Restrict);
58
59 // -------------------------
60 // MajorSubjects (many-to-many)
61 // -------------------------
62 modelBuilder.Entity<MajorSubjects>()
63 .HasKey(ab => new { ab.MajorId, ab.SubjectId });
64
65 modelBuilder.Entity<MajorSubjects>()
66 .HasOne(ab => ab.Majors)
67 .WithMany(a => a.Subjects)
68 .HasForeignKey(ab => ab.MajorId)
69 .OnDelete(DeleteBehavior.Cascade);
70
71 modelBuilder.Entity<MajorSubjects>()
72 .HasOne(ab => ab.Subjects)
73 .WithMany(b => b.Majors)
74 .HasForeignKey(ab => ab.SubjectId)
75 .OnDelete(DeleteBehavior.Cascade);
76
77 // -------------------------
78 // UserDocuments (many-to-many)
79 // -------------------------
80 modelBuilder.Entity<UserDocuments>()
81 .HasKey(ab => new { ab.UserId, ab.DocumentId });
82
83 modelBuilder.Entity<UserDocuments>()
84 .HasOne(ab => ab.User)
85 .WithMany(a => a.Documents)
86 .HasForeignKey(ab => ab.UserId)
87 .OnDelete(DeleteBehavior.Cascade);
88
89 modelBuilder.Entity<UserDocuments>()
90 .HasOne(ab => ab.Documents)
91 .WithMany(b => b.User)
92 .HasForeignKey(ab => ab.DocumentId)
93 .OnDelete(DeleteBehavior.Cascade);
94
95 // -------------------------
96 // Payment (user enrollment)
97 // -------------------------
98 modelBuilder.Entity<Payment>()
99 .HasKey(p => p.Id);
100
101 modelBuilder.Entity<Payment>()
102 .HasOne(p => p.User)
103 .WithMany(u => u.EnrolledSemesters)
104 .HasForeignKey(p => p.UserId)
105 .OnDelete(DeleteBehavior.Cascade);
106
107 modelBuilder.Entity<Payment>()
108 .HasOne(p => p.EnrolledSemesters)
109 .WithMany(es => es.Users)
110 .HasForeignKey(p => p.EnrollmentInfoId)
111 .OnDelete(DeleteBehavior.Cascade);
112
113 // -------------------------
114 // SemesterSubject (student enrollments and professor assignments)
115 // -------------------------
116 modelBuilder.Entity<SemesterSubject>()
117 .HasKey(ss => ss.Id); // or composite key if you prefer {UserId, EnrolledSemesterId, SubjectId}
118
119 // Student enrollment
120 modelBuilder.Entity<SemesterSubject>()
121 .HasOne(ss => ss.User)
122 .WithMany(u => u.EnrolledSemesterUserSubjects)
123 .HasForeignKey(ss => ss.UserId)
124 .OnDelete(DeleteBehavior.Restrict);
125
126 // Professor teaching
127 modelBuilder.Entity<SemesterSubject>()
128 .HasOne(ss => ss.Professor)
129 .WithMany(u => u.TeachingSubjects)
130 .HasForeignKey(ss => ss.ProfessorId)
131 .OnDelete(DeleteBehavior.Restrict);
132
133 // Subject relation
134 modelBuilder.Entity<SemesterSubject>()
135 .HasOne(ss => ss.Subject)
136 .WithMany(s => s.SemesterSubjects)
137 .HasForeignKey(ss => ss.SubjectId)
138 .OnDelete(DeleteBehavior.Restrict);
139
140 // EnrolledSemester relation
141 modelBuilder.Entity<SemesterSubject>()
142 .HasOne(ss => ss.EnrolledSemester)
143 .WithMany(es => es.SemesterSubjects)
144 .HasForeignKey(ss => ss.EnrolledSemesterId)
145 .OnDelete(DeleteBehavior.Restrict);
146
147 // -------------------------
148 // PassedSubject (one-to-one with SemesterSubject)
149 // -------------------------
150 modelBuilder.Entity<PassedSubject>()
151 .HasKey(ps => ps.Id);
152
153 modelBuilder.Entity<PassedSubject>()
154 .HasOne(ps => ps.SemesterSubject)
155 .WithOne(ss => ss.PassedSubject)
156 .HasForeignKey<PassedSubject>(ps => ps.SemesterSubjectId)
157 .OnDelete(DeleteBehavior.Cascade);
158
159 // -------------------------
160 // ActiveSemesters to EnrolledSemesters (one-to-many)
161 // -------------------------
162 modelBuilder.Entity<EnrolledSemesters>()
163 .HasOne(es => es.Semester)
164 .WithMany(a => a.EnrolledSemesters)
165 .HasForeignKey(es => es.Id)
166 .OnDelete(DeleteBehavior.Restrict);
167 }
168
169 }
170}
Note: See TracBrowser for help on using the repository browser.