source: iknow-api/Data/AppDbContext.cs@ 691f152

Last change on this file since 691f152 was 691f152, checked in by Stefan-Saveski <stefansaveski19@…>, 10 months ago

Add getSemesters endpoint and related data access

Introduce a new getSemesters endpoint in UserController.cs to retrieve user semester data using JWT authentication.

Add DbSet<EnrolledSemesters> to AppDbContext.cs for database interaction.

Implement GetUserSemestersAsync in UserRepository.cs to fetch semesters by user ID, and update IUserRepository.cs to declare this method.

Add GetUserSemesters method in UserService.cs to extract user ID from JWT and retrieve semesters, updating IUserService.cs accordingly.

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