Ignore:
Timestamp:
10/30/25 17:22:08 (11 months ago)
Author:
imbrsk <boris696boris@…>
Branches:
master
Children:
f0fc386
Parents:
586825e
Message:

ADDEED ALL MODESL :)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • iknow-api/Data/AppDbContext.cs

    r586825e r5e22720  
    1414        public DbSet<EnrollmentInfo> EnrollmentInfo { get; set; }
    1515        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
    16132    }
    17133}
Note: See TracChangeset for help on using the changeset viewer.