Changeset aee2b88
- Timestamp:
- 12/16/25 23:05:19 (9 months ago)
- Branches:
- master
- Children:
- bb02e3a
- Parents:
- 61fd94e
- Files:
-
- 2 added
- 14 edited
- 2 moved
-
Program.cs (added)
-
iknow-api/Controllers/UserController.cs (modified) (3 diffs)
-
iknow-api/Data/AppDbContext.cs (modified) (2 diffs)
-
iknow-api/Migrations/20251216191800_InitialCreate.Designer.cs (moved) (moved from iknow-api/Migrations/20251211135004_inital.Designer.cs ) (9 diffs)
-
iknow-api/Migrations/20251216191800_InitialCreate.cs (moved) (moved from iknow-api/Migrations/20251211135004_inital.cs ) (8 diffs)
-
iknow-api/Migrations/AppDbContextModelSnapshot.cs (modified) (8 diffs)
-
iknow-api/Models/ActiveSemester.cs (modified) (2 diffs)
-
iknow-api/Models/EnrolledSemesters.cs (modified) (2 diffs)
-
iknow-api/Models/EnrollmentInfo.cs (modified) (1 diff)
-
iknow-api/Models/ProfessorSubjects.cs (added)
-
iknow-api/Models/Subjects.cs (modified) (1 diff)
-
iknow-api/Repository/Implementations/UserRepository.cs (modified) (1 diff)
-
iknow-api/Repository/Interface/IUserRepository.cs (modified) (1 diff)
-
iknow-api/Services/Implementations/AuthService.cs (modified) (1 diff)
-
iknow-api/Services/Implementations/UserService.cs (modified) (1 diff)
-
iknow-api/Services/Interfaces/IUserService.cs (modified) (1 diff)
-
iknow-api/appsettings.Development.json (modified) (1 diff)
-
iknow-api/appsettings.json (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
iknow-api/Controllers/UserController.cs
r61fd94e raee2b88 31 31 32 32 } 33 //"semesters": [34 // {35 // "id": 1,36 // "semester": "Зимски(2025/2026)",37 // "direction": "PIT23(2023)",38 // "quota": "Не плаќа-Редовен(2023)",39 // "note": "",40 // "studentCom": "Ги имам си...",41 // "sum": "0,30",42 // "paid": "0,00",43 // "ukim": "",44 // "createdOn": "22.09.2025",45 // "dateChanged": "22.09.2025",46 // "credits": "0,01",47 // "type": "Ред.",48 // "doc": "Не",49 // "doc1": "Не",50 // "verified": "Не",51 // "taxes": "0,00",52 // "signatures": "0/5",53 // "status": "валиден",54 // "completed": "Не"55 // },56 // ]57 //}58 33 [Authorize] 59 34 [HttpGet("getSemesters")] … … 67 42 var userData = await _userService.GetUserSemesters(token); 68 43 var results = new List<object>(); 69 70 for (int i=0; i<userData.Count; i++)44 45 for (int i = 0; i < userData.Count; i++) 71 46 { 72 47 var newResult = new 73 48 { 74 49 id = userData[i].Id, 75 //semester = (userData[i].Type == 0 ? "Зимски" : "Летен") + $"({userData[i].Year}/{userData[i].Year + 1})",50 semester = (userData[i].Semester.Type == 0 ? "Зимски" : "Летен") + $"({userData[i].Semester.Year}/{userData[i].Semester.Year + 1})", 76 51 direction = userData[i].Major?.Name ?? "", 77 52 quota = userData[i].QuotaType.ToString(), … … 99 74 } 100 75 return null; 101 102 } 103 // { 104 // "user": [ 105 // { 106 // "id": 2, 107 // "userId": 1, 108 // "user": null, 109 // "year": 2025, 110 // "type": 1, 111 // "quotaType": "privatna", 112 // "majorId": 1, 113 // "major": { 114 // "id": 1, 115 // "name": "PIT(2023)", 116 // "subjects": null 117 // }, 118 // "users": null, 119 // "semesterSubjects": null 120 // }, 121 // { 122 // "id": 1, 123 // "userId": 1, 124 // "user": null, 125 // "year": 2025, 126 // "type": 0, 127 // "quotaType": "privatna", 128 // "majorId": 1, 129 // "major": { 130 // "id": 1, 131 // "name": "PIT(2023)", 132 // "subjects": null 133 // }, 134 // "users": null, 135 // "semesterSubjects": null 136 // } 137 // ] 138 //} 76 } 77 78 [Authorize] 79 [HttpGet("getSubjects")] 80 public async Task<IActionResult> getSubjects() 81 { 82 var authHeader = Request.Headers["Authorization"].ToString(); 83 var token = authHeader.Substring("Bearer ".Length).Trim(); 84 // token = your JWT 85 var userData = await _userService.GetUserSemesters(token); 86 var results = new List<object>(); 87 var random = new Random(); 88 for (int i = 0; i < userData.Count; i++) 89 { 90 var newResult = new 91 { 92 id = userData[i].Id, 93 name = (userData[i].Semester.Type == 0 ? "Зимски" : "Летен") + $"({userData[i].Semester.Year}/{userData[i].Semester.Year + 1})", 94 status = "валиден", 95 serviceNumber = 1000000 + random.Next(10000, 100000) 96 }; 97 results.Add(newResult); 98 } 99 100 101 var subjectsBySemester = new Dictionary<string, List<object>>(); 102 103 foreach (var enrollment in userData) 104 { 105 // Create semester key like "winter_2025_2026" or "summer_2025_2026" 106 var semesterType = enrollment.Semester.Type == 0 ? "winter" : "summer"; 107 var semesterKey = $"{semesterType}_{enrollment.Semester.Year}_{enrollment.Semester.Year + 1}"; 108 109 // Initialize list if this semester key doesn't exist 110 if (!subjectsBySemester.ContainsKey(semesterKey)) 111 { 112 subjectsBySemester[semesterKey] = new List<object>(); 113 } 114 115 // Add subjects from this semester enrollment 116 if (enrollment.SemesterSubjects != null) 117 { 118 foreach (var semesterSubject in enrollment.SemesterSubjects) 119 { 120 var subject = semesterSubject.Subject; 121 if (subject != null) 122 { 123 var subjectData = new 124 { 125 id = subject.Id, 126 code = subject.Code ?? "", 127 hours = "2+4", // You may need to add this to your Subject model 128 kojPat = 1, // You may need to add this field 129 name = subject.Name ?? "", 130 semester = 5, // You may need to calculate or add this field 131 status = "Зад.", // Determine based on PassedSubject or other logic 132 signature = semesterSubject.Signature ? "Да" : "Не", 133 group = "", // You may need to add this field 134 professor = semesterSubject.Professor?.Name + " " + semesterSubject.Professor?.Surname ?? "", 135 }; 136 subjectsBySemester[semesterKey].Add(subjectData); 137 } 138 } 139 } 140 141 } 142 var currentSemester = userData.FirstOrDefault(); // Get the most recent/current semester 143 var semesterTypeGlobal = currentSemester.Semester.Type == 0 ? "winter" : "summer"; 144 var semesterData = new 145 { 146 id = $"{semesterTypeGlobal}_{currentSemester.Semester.Year}_{currentSemester.Semester.Year + 1}", 147 name = (currentSemester.Semester.Type == 0 ? "Зимски" : "Летен") + $" ({currentSemester.Semester.Year}/{currentSemester.Semester.Year + 1})", 148 status = "валиден", 149 serviceNumber = (1000000 + random.Next(10000, 100000)).ToString(), 150 ticketNumber = random.Next(100000, 1000000).ToString(), 151 debt = "0,00", 152 financialInfo = new 153 { 154 sum = 1, 155 paid = "0,00", 156 due = "0,00", 157 materialCosts = "Осигурување, Административна такса, Тетратки (испити), зимски семестар: 1000,00", 158 credits = "30,00", 159 totalCredits = "30,00", 160 MKSA = "750,00", 161 electronicRegistration = "100,00", 162 eUKIM = "350,00", 163 bankProvision = "25,00", 164 total = "2226,00" 165 } 166 }; 167 if (userData == null) return Ok(new { info = "can't get info" }); 168 //return Ok(new { semester = userData }); 169 return Ok(new { semesters = results, currentSemestar = semesterData, subjectsBySemester = subjectsBySemester }); 170 } 171 172 [Authorize] 173 [HttpGet("getPassedSubjects")] 174 public async Task<IActionResult> getPassedSubjects() 175 { 176 var authHeader = Request.Headers["Authorization"].ToString(); 177 if (!authHeader.StartsWith("Bearer ")) 178 return Unauthorized(); 179 180 var token = authHeader.Substring("Bearer ".Length).Trim(); 181 var passedSubjects = await _userService.GetUserPassedSubjects(token); 182 183 if (passedSubjects == null || !passedSubjects.Any()) 184 return Ok(new { info = "No passed subjects found", passedSubjects = new List<object>() }); 185 186 var results = new List<object>(); 187 188 foreach (var passed in passedSubjects) 189 { 190 if (passed.SemesterSubject?.Subject != null) 191 { 192 var result = new 193 { 194 id = passed.Id, 195 subjectId = passed.SemesterSubject.Subject.Id, 196 code = passed.SemesterSubject.Subject.Code ?? "", 197 subject = passed.SemesterSubject.Subject.Name ?? "", 198 credits = passed.SemesterSubject.Subject.AwardedCredits ?? 0, 199 grade = (int)passed.Grade, 200 gradeText = passed.Grade.ToString(), 201 date = passed.DatePassed.ToString("dd.MM.yyyy"), 202 semester = passed.SemesterSubject.EnrolledSemester?.Semester != null 203 ? (passed.SemesterSubject.EnrolledSemester.Semester.Type == 0 ? "Зимски" : "Летен") + 204 $" ({passed.SemesterSubject.EnrolledSemester.Semester.Year}/{passed.SemesterSubject.EnrolledSemester.Semester.Year + 1})" 205 : "", 206 professor = passed.SemesterSubject.Professor != null 207 ? $"{passed.SemesterSubject.Professor.Name} {passed.SemesterSubject.Professor.Surname}".Trim() 208 : "" 209 }; 210 results.Add(result); 211 } 212 } 213 214 return Ok(new { passedSubjects = results }); 215 } 216 139 217 } 140 218 } -
iknow-api/Data/AppDbContext.cs
r61fd94e raee2b88 25 25 public DbSet<Documents> Documents { get; set; } 26 26 public DbSet<Payment> Payments { get; set; } 27 public DbSet<ProfessorSubjects> ProfessorSubjects { get; set; } 27 28 28 29 … … 165 166 .HasForeignKey(es => es.Id) 166 167 .OnDelete(DeleteBehavior.Restrict); 168 169 // ------------------------- 170 // ProfessorSubjects (many-to-many: Professor -> Semester -> Subject) 171 // ------------------------- 172 modelBuilder.Entity<ProfessorSubjects>() 173 .HasKey(ps => new { ps.ProfessorId, ps.SemesterId, ps.SubjectId }); 174 175 modelBuilder.Entity<ProfessorSubjects>() 176 .HasOne(ps => ps.Professor) 177 .WithMany() 178 .HasForeignKey(ps => ps.ProfessorId) 179 .OnDelete(DeleteBehavior.Cascade); 180 181 modelBuilder.Entity<ProfessorSubjects>() 182 .HasOne(ps => ps.Semester) 183 .WithMany() 184 .HasForeignKey(ps => ps.SemesterId) 185 .OnDelete(DeleteBehavior.Cascade); 186 187 modelBuilder.Entity<ProfessorSubjects>() 188 .HasOne(ps => ps.Subject) 189 .WithMany() 190 .HasForeignKey(ps => ps.SubjectId) 191 .OnDelete(DeleteBehavior.Cascade); 167 192 } 168 193 -
iknow-api/Migrations/20251216191800_InitialCreate.Designer.cs
r61fd94e raee2b88 13 13 { 14 14 [DbContext(typeof(AppDbContext))] 15 [Migration("2025121 1135004_inital")]16 partial class inital15 [Migration("20251216191800_InitialCreate")] 16 partial class InitialCreate 17 17 { 18 18 /// <inheritdoc /> … … 28 28 modelBuilder.Entity("iknow_api.Models.ActiveSemesters", b => 29 29 { 30 b.Property<int>(" id")31 .ValueGeneratedOnAdd() 32 .HasColumnType("integer"); 33 34 NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>(" id"));30 b.Property<int>("Id") 31 .ValueGeneratedOnAdd() 32 .HasColumnType("integer"); 33 34 NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); 35 35 36 36 b.Property<int>("Type") 37 37 .HasColumnType("integer"); 38 38 39 b.Property<int>(" year")40 .HasColumnType("integer"); 41 42 b.HasKey(" id");39 b.Property<int>("Year") 40 .HasColumnType("integer"); 41 42 b.HasKey("Id"); 43 43 44 44 b.ToTable("ActiveSemesters"); … … 130 130 .HasColumnType("integer"); 131 131 132 b.Property<string>("No de")132 b.Property<string>("Note") 133 133 .HasColumnType("text"); 134 134 … … 136 136 .HasColumnType("integer"); 137 137 138 b.Property<int>("SemesterId") 139 .HasColumnType("integer"); 140 138 141 b.Property<string>("StudentComment") 139 142 .HasColumnType("text"); … … 142 145 .HasColumnType("integer"); 143 146 144 b.Property<DateTime>("Ver yfied")147 b.Property<DateTime>("Verified") 145 148 .HasColumnType("timestamp with time zone"); 146 149 … … 162 165 NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); 163 166 167 b.Property<int>("EnrollmentYear") 168 .HasColumnType("integer"); 169 164 170 b.Property<int>("MajorId") 165 171 .HasColumnType("integer"); 166 172 173 b.Property<int>("Quota") 174 .HasColumnType("integer"); 175 167 176 b.Property<string>("StudyStatus") 168 177 .HasColumnType("text"); … … 172 181 173 182 b.Property<int>("UserId") 174 .HasColumnType("integer");175 176 b.Property<int>("enrollmentYear")177 .HasColumnType("integer");178 179 b.Property<int>("quota")180 183 .HasColumnType("integer"); 181 184 … … 325 328 }); 326 329 330 modelBuilder.Entity("iknow_api.Models.ProfessorSubjects", b => 331 { 332 b.Property<int>("ProfessorId") 333 .HasColumnType("integer"); 334 335 b.Property<int>("SemesterId") 336 .HasColumnType("integer"); 337 338 b.Property<int>("SubjectId") 339 .HasColumnType("integer"); 340 341 b.HasKey("ProfessorId", "SemesterId", "SubjectId"); 342 343 b.HasIndex("SemesterId"); 344 345 b.HasIndex("SubjectId"); 346 347 b.ToTable("ProfessorSubjects"); 348 }); 349 327 350 modelBuilder.Entity("iknow_api.Models.RefreshToken", b => 328 351 { … … 616 639 }); 617 640 641 modelBuilder.Entity("iknow_api.Models.ProfessorSubjects", b => 642 { 643 b.HasOne("iknow_api.Models.User", "Professor") 644 .WithMany() 645 .HasForeignKey("ProfessorId") 646 .OnDelete(DeleteBehavior.Cascade) 647 .IsRequired(); 648 649 b.HasOne("iknow_api.Models.ActiveSemesters", "Semester") 650 .WithMany() 651 .HasForeignKey("SemesterId") 652 .OnDelete(DeleteBehavior.Cascade) 653 .IsRequired(); 654 655 b.HasOne("iknow_api.Models.Subject", "Subject") 656 .WithMany() 657 .HasForeignKey("SubjectId") 658 .OnDelete(DeleteBehavior.Cascade) 659 .IsRequired(); 660 661 b.Navigation("Professor"); 662 663 b.Navigation("Semester"); 664 665 b.Navigation("Subject"); 666 }); 667 618 668 modelBuilder.Entity("iknow_api.Models.RefreshToken", b => 619 669 { -
iknow-api/Migrations/20251216191800_InitialCreate.cs
r61fd94e raee2b88 10 10 { 11 11 /// <inheritdoc /> 12 public partial class inital: Migration12 public partial class InitialCreate : Migration 13 13 { 14 14 /// <inheritdoc /> … … 19 19 columns: table => new 20 20 { 21 id = table.Column<int>(type: "integer", nullable: false)22 .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), 23 year = table.Column<int>(type: "integer", nullable: false),21 Id = table.Column<int>(type: "integer", nullable: false) 22 .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), 23 Year = table.Column<int>(type: "integer", nullable: false), 24 24 Type = table.Column<int>(type: "integer", nullable: false) 25 25 }, 26 26 constraints: table => 27 27 { 28 table.PrimaryKey("PK_ActiveSemesters", x => x. id);28 table.PrimaryKey("PK_ActiveSemesters", x => x.Id); 29 29 }); 30 30 … … 181 181 MajorId = table.Column<int>(type: "integer", nullable: false), 182 182 StudentComment = table.Column<string>(type: "text", nullable: true), 183 No de = table.Column<string>(type: "text", nullable: true),183 Note = table.Column<string>(type: "text", nullable: true), 184 184 CratedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false), 185 185 LastChange = table.Column<DateTime>(type: "timestamp with time zone", nullable: false), 186 Veryfied = table.Column<DateTime>(type: "timestamp with time zone", nullable: false) 186 Verified = table.Column<DateTime>(type: "timestamp with time zone", nullable: false), 187 SemesterId = table.Column<int>(type: "integer", nullable: false) 187 188 }, 188 189 constraints: table => … … 193 194 column: x => x.Id, 194 195 principalTable: "ActiveSemesters", 195 principalColumn: " id",196 principalColumn: "Id", 196 197 onDelete: ReferentialAction.Restrict); 197 198 table.ForeignKey( … … 215 216 Id = table.Column<int>(type: "integer", nullable: false) 216 217 .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), 217 enrollmentYear = table.Column<int>(type: "integer", nullable: false),218 quota = table.Column<int>(type: "integer", nullable: false),218 EnrollmentYear = table.Column<int>(type: "integer", nullable: false), 219 Quota = table.Column<int>(type: "integer", nullable: false), 219 220 MajorId = table.Column<int>(type: "integer", nullable: false), 220 221 UserId = table.Column<int>(type: "integer", nullable: false), … … 256 257 name: "FK_HighSchool_User_UserId", 257 258 column: x => x.UserId, 259 principalTable: "User", 260 principalColumn: "Id", 261 onDelete: ReferentialAction.Cascade); 262 }); 263 264 migrationBuilder.CreateTable( 265 name: "ProfessorSubjects", 266 columns: table => new 267 { 268 ProfessorId = table.Column<int>(type: "integer", nullable: false), 269 SemesterId = table.Column<int>(type: "integer", nullable: false), 270 SubjectId = table.Column<int>(type: "integer", nullable: false) 271 }, 272 constraints: table => 273 { 274 table.PrimaryKey("PK_ProfessorSubjects", x => new { x.ProfessorId, x.SemesterId, x.SubjectId }); 275 table.ForeignKey( 276 name: "FK_ProfessorSubjects_ActiveSemesters_SemesterId", 277 column: x => x.SemesterId, 278 principalTable: "ActiveSemesters", 279 principalColumn: "Id", 280 onDelete: ReferentialAction.Cascade); 281 table.ForeignKey( 282 name: "FK_ProfessorSubjects_Subjects_SubjectId", 283 column: x => x.SubjectId, 284 principalTable: "Subjects", 285 principalColumn: "Id", 286 onDelete: ReferentialAction.Cascade); 287 table.ForeignKey( 288 name: "FK_ProfessorSubjects_User_ProfessorId", 289 column: x => x.ProfessorId, 258 290 principalTable: "User", 259 291 principalColumn: "Id", … … 466 498 467 499 migrationBuilder.CreateIndex( 500 name: "IX_ProfessorSubjects_SemesterId", 501 table: "ProfessorSubjects", 502 column: "SemesterId"); 503 504 migrationBuilder.CreateIndex( 505 name: "IX_ProfessorSubjects_SubjectId", 506 table: "ProfessorSubjects", 507 column: "SubjectId"); 508 509 migrationBuilder.CreateIndex( 468 510 name: "IX_RefreshToken_UserId", 469 511 table: "RefreshToken", … … 521 563 522 564 migrationBuilder.DropTable( 565 name: "ProfessorSubjects"); 566 567 migrationBuilder.DropTable( 523 568 name: "RefreshToken"); 524 569 -
iknow-api/Migrations/AppDbContextModelSnapshot.cs
r61fd94e raee2b88 25 25 modelBuilder.Entity("iknow_api.Models.ActiveSemesters", b => 26 26 { 27 b.Property<int>(" id")28 .ValueGeneratedOnAdd() 29 .HasColumnType("integer"); 30 31 NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>(" id"));27 b.Property<int>("Id") 28 .ValueGeneratedOnAdd() 29 .HasColumnType("integer"); 30 31 NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); 32 32 33 33 b.Property<int>("Type") 34 34 .HasColumnType("integer"); 35 35 36 b.Property<int>(" year")37 .HasColumnType("integer"); 38 39 b.HasKey(" id");36 b.Property<int>("Year") 37 .HasColumnType("integer"); 38 39 b.HasKey("Id"); 40 40 41 41 b.ToTable("ActiveSemesters"); … … 127 127 .HasColumnType("integer"); 128 128 129 b.Property<string>("No de")129 b.Property<string>("Note") 130 130 .HasColumnType("text"); 131 131 … … 133 133 .HasColumnType("integer"); 134 134 135 b.Property<int>("SemesterId") 136 .HasColumnType("integer"); 137 135 138 b.Property<string>("StudentComment") 136 139 .HasColumnType("text"); … … 139 142 .HasColumnType("integer"); 140 143 141 b.Property<DateTime>("Ver yfied")144 b.Property<DateTime>("Verified") 142 145 .HasColumnType("timestamp with time zone"); 143 146 … … 159 162 NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); 160 163 164 b.Property<int>("EnrollmentYear") 165 .HasColumnType("integer"); 166 161 167 b.Property<int>("MajorId") 162 168 .HasColumnType("integer"); 163 169 170 b.Property<int>("Quota") 171 .HasColumnType("integer"); 172 164 173 b.Property<string>("StudyStatus") 165 174 .HasColumnType("text"); … … 169 178 170 179 b.Property<int>("UserId") 171 .HasColumnType("integer");172 173 b.Property<int>("enrollmentYear")174 .HasColumnType("integer");175 176 b.Property<int>("quota")177 180 .HasColumnType("integer"); 178 181 … … 322 325 }); 323 326 327 modelBuilder.Entity("iknow_api.Models.ProfessorSubjects", b => 328 { 329 b.Property<int>("ProfessorId") 330 .HasColumnType("integer"); 331 332 b.Property<int>("SemesterId") 333 .HasColumnType("integer"); 334 335 b.Property<int>("SubjectId") 336 .HasColumnType("integer"); 337 338 b.HasKey("ProfessorId", "SemesterId", "SubjectId"); 339 340 b.HasIndex("SemesterId"); 341 342 b.HasIndex("SubjectId"); 343 344 b.ToTable("ProfessorSubjects"); 345 }); 346 324 347 modelBuilder.Entity("iknow_api.Models.RefreshToken", b => 325 348 { … … 613 636 }); 614 637 638 modelBuilder.Entity("iknow_api.Models.ProfessorSubjects", b => 639 { 640 b.HasOne("iknow_api.Models.User", "Professor") 641 .WithMany() 642 .HasForeignKey("ProfessorId") 643 .OnDelete(DeleteBehavior.Cascade) 644 .IsRequired(); 645 646 b.HasOne("iknow_api.Models.ActiveSemesters", "Semester") 647 .WithMany() 648 .HasForeignKey("SemesterId") 649 .OnDelete(DeleteBehavior.Cascade) 650 .IsRequired(); 651 652 b.HasOne("iknow_api.Models.Subject", "Subject") 653 .WithMany() 654 .HasForeignKey("SubjectId") 655 .OnDelete(DeleteBehavior.Cascade) 656 .IsRequired(); 657 658 b.Navigation("Professor"); 659 660 b.Navigation("Semester"); 661 662 b.Navigation("Subject"); 663 }); 664 615 665 modelBuilder.Entity("iknow_api.Models.RefreshToken", b => 616 666 { -
iknow-api/Models/ActiveSemester.cs
r61fd94e raee2b88 1 using Microsoft.VisualBasic; 1 2 3 2 4 3 5 namespace iknow_api.Models … … 9 11 public class ActiveSemesters 10 12 { 11 public int id { get; set; }12 public int year { get; set; }13 public int Id { get; set; } 14 public int Year { get; set; } 13 15 public sType Type { get; set; } 14 16 public ICollection<EnrolledSemesters>? EnrolledSemesters { get; set; } -
iknow-api/Models/EnrolledSemesters.cs
r61fd94e raee2b88 5 5 public class EnrolledSemesters 6 6 { 7 //Add type of semester winter/summer 7 8 public int Id { get; set; } 8 9 public int UserId { get; set; } … … 11 12 public int MajorId { get; set; } 12 13 public string? StudentComment { get; set; } 13 public string? No de { get; set; }14 public string? Note { get; set; } 14 15 public DateTime CratedAt { get; set; } 15 16 public DateTime LastChange { get; set; } 16 public DateTime Veryfied { get; set; } 17 public DateTime Verified { get; set; } 18 public int SemesterId { get; set; } 17 19 public ActiveSemesters? Semester { get; set; } 18 20 public Major? Major { get; set; } -
iknow-api/Models/EnrollmentInfo.cs
r61fd94e raee2b88 12 12 { 13 13 public int Id { get; set; } 14 public int enrollmentYear { get; set; }15 public Quota quota { get; set; }14 public int EnrollmentYear { get; set; } 15 public Quota Quota { get; set; } 16 16 public int MajorId { get; set; } 17 17 public Major? Major { get; set; } -
iknow-api/Models/Subjects.cs
r61fd94e raee2b88 12 12 public ICollection<MajorSubjects>? Majors { get; set; } 13 13 public ICollection<SemesterSubject>? SemesterSubjects { get; set; } 14 14 15 } 15 16 } -
iknow-api/Repository/Implementations/UserRepository.cs
r61fd94e raee2b88 66 66 { 67 67 return await _context.EnrolledSemesters 68 .AsNoTracking() 68 69 .Include(es => es.Major) 70 .Include(es => es.Semester) 71 .Include(es => es.SemesterSubjects) 72 .ThenInclude(ss => ss.Subject) 73 .Include(es => es.SemesterSubjects) 74 .ThenInclude(ss => ss.Professor) 69 75 .Where(es => es.UserId == id) 76 .AsSplitQuery() // This helps avoid cartesian explosion 77 .ToListAsync(); 78 } 79 80 public async Task<List<PassedSubject>> GetUserPassedSubjectsAsync(int id) 81 { 82 return await _context.PassedSubjects 83 .AsNoTracking() 84 .Include(ps => ps.SemesterSubject) 85 .ThenInclude(ss => ss.Subject) 86 .Include(ps => ps.SemesterSubject) 87 .ThenInclude(ss => ss.EnrolledSemester) 88 .ThenInclude(es => es.Semester) 89 .Include(ps => ps.SemesterSubject) 90 .ThenInclude(ss => ss.Professor) 91 .Where(ps => ps.SemesterSubject.UserId == id) 70 92 .ToListAsync(); 71 93 } -
iknow-api/Repository/Interface/IUserRepository.cs
r61fd94e raee2b88 14 14 Task<List<EnrolledSemesters>?> GetUserSemestersAsync(int id); 15 15 Task<User?> GetOnlyUserByIdAsync(int id); 16 16 Task<List<PassedSubject>> GetUserPassedSubjectsAsync(int id); 17 17 } 18 18 } -
iknow-api/Services/Implementations/AuthService.cs
r61fd94e raee2b88 88 88 { 89 89 UserId = userId, 90 enrollmentYear = registerDto.enrollmentYear,91 quota = (Models.Quota)registerDto.quotaType,90 EnrollmentYear = registerDto.enrollmentYear, 91 Quota = (Models.Quota)registerDto.quotaType, 92 92 MajorId = registerDto.majorType, 93 93 StudyStatus = registerDto.studyStatus, -
iknow-api/Services/Implementations/UserService.cs
r61fd94e raee2b88 48 48 } 49 49 50 public async Task<List<PassedSubject>> GetUserPassedSubjects(string JWT) 51 { 52 var userId = ExtractUserIdFromJwt(JWT); 53 if (userId == null) 54 return null; 55 56 var passedSubjects = await _userRepository.GetUserPassedSubjectsAsync(userId.Value); 57 if (passedSubjects == null) 58 return null; 59 else 60 return passedSubjects; 61 } 62 50 63 private int? ExtractUserIdFromJwt(string token) 51 64 { -
iknow-api/Services/Interfaces/IUserService.cs
r61fd94e raee2b88 7 7 Task<User> GetUserData(string userId); 8 8 Task<List<EnrolledSemesters>> GetUserSemesters(string userId); 9 Task<List<PassedSubject>> GetUserPassedSubjects(string userId); 9 10 } 10 11 } -
iknow-api/appsettings.Development.json
r61fd94e raee2b88 7 7 }, 8 8 "ConnectionStrings": { 9 "DefaultConnection": "Host=ep- blue-glitter-ag6m81xo-pooler.c-2.eu-central-1.aws.neon.tech; Database=neondb; Username=neondb_owner; Password=npg_SxbBZmtw4I7P; SSL Mode=VerifyFull; Channel Binding=Require;"9 "DefaultConnection": "Host=ep-divine-term-aghfotgc-pooler.c-2.eu-central-1.aws.neon.tech; Database=neondb; Username=neondb_owner; Password=npg_SxbBZmtw4I7P; SSL Mode=VerifyFull; Channel Binding=Require;" 10 10 } 11 11 } -
iknow-api/appsettings.json
r61fd94e raee2b88 7 7 }, 8 8 "ConnectionStrings": { 9 "DefaultConnection": "Host=ep- blue-glitter-ag6m81xo-pooler.c-2.eu-central-1.aws.neon.tech; Database=neondb; Username=neondb_owner; Password=npg_SxbBZmtw4I7P; SSL Mode=VerifyFull; Channel Binding=Require;"9 "DefaultConnection": "Host=ep-divine-term-aghfotgc-pooler.c-2.eu-central-1.aws.neon.tech; Database=neondb; Username=neondb_owner; Password=npg_SxbBZmtw4I7P; SSL Mode=VerifyFull; Channel Binding=Require;" 10 10 }, 11 11 "Jwt": {
Note:
See TracChangeset
for help on using the changeset viewer.
