Ignore:
Timestamp:
12/08/25 21:51:12 (10 months ago)
Author:
Stefan-Saveski <stefan@…>
Branches:
master
Children:
18e0c10
Parents:
5e22720
Message:

Refactor and enhance application structure

Enhanced error handling in AuthController with detailed exception handling for user registration. Updated UserDTO to improve JSON serialization and renamed enums for clarity. Introduced new entities (Major, PassedSubject, etc.) and seeded initial data in AppDbContext.

Replaced legacy migrations with 20251208203846_InitialCreate, reflecting the updated schema. Fixed typographical errors and improved JSON serialization in Program.cs with case-insensitive property matching and enum handling.

Refactored repository interfaces for better null safety. Improved debugging in AuthService and updated connection strings. Added the PassedSubject entity and cleaned up redundant code and unused imports for better maintainability.

Location:
iknow-api/Migrations
Files:
2 added
2 deleted
1 edited

Legend:

Unmodified
Added
Removed
  • iknow-api/Migrations/AppDbContextModelSnapshot.cs

    r5e22720 rf0fc386  
    5757                });
    5858
     59            modelBuilder.Entity("iknow_api.Models.DependencySubject", b =>
     60                {
     61                    b.Property<int>("SubjectId")
     62                        .HasColumnType("integer");
     63
     64                    b.Property<int>("DependencyId")
     65                        .HasColumnType("integer");
     66
     67                    b.HasKey("SubjectId", "DependencyId");
     68
     69                    b.HasIndex("DependencyId");
     70
     71                    b.ToTable("DependencySubjects");
     72                });
     73
     74            modelBuilder.Entity("iknow_api.Models.Documents", b =>
     75                {
     76                    b.Property<int>("Id")
     77                        .ValueGeneratedOnAdd()
     78                        .HasColumnType("integer");
     79
     80                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
     81
     82                    b.Property<string>("body")
     83                        .HasColumnType("text");
     84
     85                    b.Property<int>("cost")
     86                        .HasColumnType("integer");
     87
     88                    b.Property<string>("name")
     89                        .HasColumnType("text");
     90
     91                    b.HasKey("Id");
     92
     93                    b.ToTable("Documents");
     94                });
     95
     96            modelBuilder.Entity("iknow_api.Models.EnrolledSemesters", b =>
     97                {
     98                    b.Property<int>("Id")
     99                        .ValueGeneratedOnAdd()
     100                        .HasColumnType("integer");
     101
     102                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
     103
     104                    b.Property<int>("MajorId")
     105                        .HasColumnType("integer");
     106
     107                    b.Property<int>("QuotaType")
     108                        .HasColumnType("integer");
     109
     110                    b.Property<int>("Type")
     111                        .HasColumnType("integer");
     112
     113                    b.Property<int>("UserId")
     114                        .HasColumnType("integer");
     115
     116                    b.Property<int>("Year")
     117                        .HasColumnType("integer");
     118
     119                    b.HasKey("Id");
     120
     121                    b.HasIndex("MajorId");
     122
     123                    b.HasIndex("UserId");
     124
     125                    b.ToTable("EnrolledSemesters");
     126                });
     127
    59128            modelBuilder.Entity("iknow_api.Models.EnrollmentInfo", b =>
    60129                {
     
    65134                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
    66135
     136                    b.Property<int>("MajorId")
     137                        .HasColumnType("integer");
     138
    67139                    b.Property<int>("UserId")
    68140                        .HasColumnType("integer");
     
    71143                        .HasColumnType("integer");
    72144
    73                     b.Property<int>("major")
    74                         .HasColumnType("integer");
    75 
    76                     b.HasKey("Id");
     145                    b.Property<int>("quota")
     146                        .HasColumnType("integer");
     147
     148                    b.HasKey("Id");
     149
     150                    b.HasIndex("MajorId");
    77151
    78152                    b.HasIndex("UserId")
     
    107181                });
    108182
     183            modelBuilder.Entity("iknow_api.Models.Major", b =>
     184                {
     185                    b.Property<int>("Id")
     186                        .ValueGeneratedOnAdd()
     187                        .HasColumnType("integer");
     188
     189                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
     190
     191                    b.Property<string>("Name")
     192                        .HasColumnType("text");
     193
     194                    b.HasKey("Id");
     195
     196                    b.ToTable("Majors");
     197
     198                    b.HasData(
     199                        new
     200                        {
     201                            Id = 1,
     202                            Name = "PIT"
     203                        },
     204                        new
     205                        {
     206                            Id = 2,
     207                            Name = "SIIS"
     208                        },
     209                        new
     210                        {
     211                            Id = 3,
     212                            Name = "SEIS"
     213                        },
     214                        new
     215                        {
     216                            Id = 4,
     217                            Name = "KN"
     218                        });
     219                });
     220
     221            modelBuilder.Entity("iknow_api.Models.MajorSubjects", b =>
     222                {
     223                    b.Property<int>("MajorId")
     224                        .HasColumnType("integer");
     225
     226                    b.Property<int>("SubjectId")
     227                        .HasColumnType("integer");
     228
     229                    b.Property<int>("Akreditacija")
     230                        .HasColumnType("integer");
     231
     232                    b.Property<int>("MandatorySemester")
     233                        .HasColumnType("integer");
     234
     235                    b.HasKey("MajorId", "SubjectId");
     236
     237                    b.HasIndex("SubjectId");
     238
     239                    b.ToTable("MajorSubjects");
     240                });
     241
     242            modelBuilder.Entity("iknow_api.Models.PassedSubject", b =>
     243                {
     244                    b.Property<int>("Id")
     245                        .ValueGeneratedOnAdd()
     246                        .HasColumnType("integer");
     247
     248                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
     249
     250                    b.Property<DateTime>("DatePassed")
     251                        .HasColumnType("timestamp with time zone");
     252
     253                    b.Property<int>("Grade")
     254                        .HasColumnType("integer");
     255
     256                    b.Property<int>("SemesterSubjectId")
     257                        .HasColumnType("integer");
     258
     259                    b.HasKey("Id");
     260
     261                    b.HasIndex("SemesterSubjectId")
     262                        .IsUnique();
     263
     264                    b.ToTable("PassedSubjects");
     265                });
     266
     267            modelBuilder.Entity("iknow_api.Models.Payment", b =>
     268                {
     269                    b.Property<int>("UserId")
     270                        .HasColumnType("integer");
     271
     272                    b.Property<int>("EnrollmentInfoId")
     273                        .HasColumnType("integer");
     274
     275                    b.Property<int>("Id")
     276                        .HasColumnType("integer");
     277
     278                    b.HasKey("UserId", "EnrollmentInfoId");
     279
     280                    b.HasIndex("EnrollmentInfoId");
     281
     282                    b.ToTable("Payment");
     283                });
     284
    109285            modelBuilder.Entity("iknow_api.Models.RefreshToken", b =>
    110286                {
     
    134310                });
    135311
     312            modelBuilder.Entity("iknow_api.Models.SemesterSubject", b =>
     313                {
     314                    b.Property<int>("Id")
     315                        .ValueGeneratedOnAdd()
     316                        .HasColumnType("integer");
     317
     318                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
     319
     320                    b.Property<int>("EnrolledSemesterId")
     321                        .HasColumnType("integer");
     322
     323                    b.Property<int>("ProfessorId")
     324                        .HasColumnType("integer");
     325
     326                    b.Property<int>("SubjectId")
     327                        .HasColumnType("integer");
     328
     329                    b.Property<int>("UserId")
     330                        .HasColumnType("integer");
     331
     332                    b.HasKey("Id");
     333
     334                    b.HasIndex("EnrolledSemesterId");
     335
     336                    b.HasIndex("ProfessorId");
     337
     338                    b.HasIndex("SubjectId");
     339
     340                    b.HasIndex("UserId");
     341
     342                    b.ToTable("SemesterSubject");
     343                });
     344
     345            modelBuilder.Entity("iknow_api.Models.Subject", b =>
     346                {
     347                    b.Property<int>("Id")
     348                        .ValueGeneratedOnAdd()
     349                        .HasColumnType("integer");
     350
     351                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
     352
     353                    b.Property<int?>("AwardedCredits")
     354                        .HasColumnType("integer");
     355
     356                    b.Property<string>("Code")
     357                        .HasColumnType("text");
     358
     359                    b.Property<int?>("DependencyCredit")
     360                        .HasColumnType("integer");
     361
     362                    b.Property<string>("Name")
     363                        .HasColumnType("text");
     364
     365                    b.HasKey("Id");
     366
     367                    b.ToTable("Subjects");
     368                });
     369
    136370            modelBuilder.Entity("iknow_api.Models.User", b =>
    137371                {
     
    174408                });
    175409
     410            modelBuilder.Entity("iknow_api.Models.UserDocuments", b =>
     411                {
     412                    b.Property<int>("UserId")
     413                        .HasColumnType("integer");
     414
     415                    b.Property<int>("DocumentId")
     416                        .HasColumnType("integer");
     417
     418                    b.HasKey("UserId", "DocumentId");
     419
     420                    b.HasIndex("DocumentId");
     421
     422                    b.ToTable("UserDocuments");
     423                });
     424
    176425            modelBuilder.Entity("iknow_api.Models.ContactInfo", b =>
    177426                {
     
    185434                });
    186435
     436            modelBuilder.Entity("iknow_api.Models.DependencySubject", b =>
     437                {
     438                    b.HasOne("iknow_api.Models.Subject", "Dependency")
     439                        .WithMany("Dependents")
     440                        .HasForeignKey("DependencyId")
     441                        .OnDelete(DeleteBehavior.Restrict)
     442                        .IsRequired();
     443
     444                    b.HasOne("iknow_api.Models.Subject", "Subject")
     445                        .WithMany("Dependencies")
     446                        .HasForeignKey("SubjectId")
     447                        .OnDelete(DeleteBehavior.Restrict)
     448                        .IsRequired();
     449
     450                    b.Navigation("Dependency");
     451
     452                    b.Navigation("Subject");
     453                });
     454
     455            modelBuilder.Entity("iknow_api.Models.EnrolledSemesters", b =>
     456                {
     457                    b.HasOne("iknow_api.Models.Major", "Major")
     458                        .WithMany()
     459                        .HasForeignKey("MajorId")
     460                        .OnDelete(DeleteBehavior.Cascade)
     461                        .IsRequired();
     462
     463                    b.HasOne("iknow_api.Models.User", "User")
     464                        .WithMany()
     465                        .HasForeignKey("UserId")
     466                        .OnDelete(DeleteBehavior.Cascade)
     467                        .IsRequired();
     468
     469                    b.Navigation("Major");
     470
     471                    b.Navigation("User");
     472                });
     473
    187474            modelBuilder.Entity("iknow_api.Models.EnrollmentInfo", b =>
    188475                {
     476                    b.HasOne("iknow_api.Models.Major", "Major")
     477                        .WithMany()
     478                        .HasForeignKey("MajorId")
     479                        .OnDelete(DeleteBehavior.Cascade)
     480                        .IsRequired();
     481
    189482                    b.HasOne("iknow_api.Models.User", "User")
    190483                        .WithOne("EnrollmentInfo")
     
    193486                        .IsRequired();
    194487
     488                    b.Navigation("Major");
     489
    195490                    b.Navigation("User");
    196491                });
     
    207502                });
    208503
     504            modelBuilder.Entity("iknow_api.Models.MajorSubjects", b =>
     505                {
     506                    b.HasOne("iknow_api.Models.Major", "Majors")
     507                        .WithMany("Subjects")
     508                        .HasForeignKey("MajorId")
     509                        .OnDelete(DeleteBehavior.Cascade)
     510                        .IsRequired();
     511
     512                    b.HasOne("iknow_api.Models.Subject", "Subjects")
     513                        .WithMany("Majors")
     514                        .HasForeignKey("SubjectId")
     515                        .OnDelete(DeleteBehavior.Cascade)
     516                        .IsRequired();
     517
     518                    b.Navigation("Majors");
     519
     520                    b.Navigation("Subjects");
     521                });
     522
     523            modelBuilder.Entity("iknow_api.Models.PassedSubject", b =>
     524                {
     525                    b.HasOne("iknow_api.Models.SemesterSubject", "SemesterSubject")
     526                        .WithOne("PassedSubject")
     527                        .HasForeignKey("iknow_api.Models.PassedSubject", "SemesterSubjectId")
     528                        .OnDelete(DeleteBehavior.Cascade)
     529                        .IsRequired();
     530
     531                    b.Navigation("SemesterSubject");
     532                });
     533
     534            modelBuilder.Entity("iknow_api.Models.Payment", b =>
     535                {
     536                    b.HasOne("iknow_api.Models.EnrolledSemesters", "EnrolledSemesters")
     537                        .WithMany("Users")
     538                        .HasForeignKey("EnrollmentInfoId")
     539                        .OnDelete(DeleteBehavior.Cascade)
     540                        .IsRequired();
     541
     542                    b.HasOne("iknow_api.Models.User", "User")
     543                        .WithMany("EnrolledSemesters")
     544                        .HasForeignKey("UserId")
     545                        .OnDelete(DeleteBehavior.Cascade)
     546                        .IsRequired();
     547
     548                    b.Navigation("EnrolledSemesters");
     549
     550                    b.Navigation("User");
     551                });
     552
    209553            modelBuilder.Entity("iknow_api.Models.RefreshToken", b =>
    210554                {
     
    218562                });
    219563
     564            modelBuilder.Entity("iknow_api.Models.SemesterSubject", b =>
     565                {
     566                    b.HasOne("iknow_api.Models.EnrolledSemesters", "EnrolledSemester")
     567                        .WithMany("SemesterSubjects")
     568                        .HasForeignKey("EnrolledSemesterId")
     569                        .OnDelete(DeleteBehavior.Restrict)
     570                        .IsRequired();
     571
     572                    b.HasOne("iknow_api.Models.User", "Professor")
     573                        .WithMany("TeachingSubjects")
     574                        .HasForeignKey("ProfessorId")
     575                        .OnDelete(DeleteBehavior.Restrict)
     576                        .IsRequired();
     577
     578                    b.HasOne("iknow_api.Models.Subject", "Subject")
     579                        .WithMany("SemesterSubjects")
     580                        .HasForeignKey("SubjectId")
     581                        .OnDelete(DeleteBehavior.Restrict)
     582                        .IsRequired();
     583
     584                    b.HasOne("iknow_api.Models.User", "User")
     585                        .WithMany("EnrolledSemesterUserSubjects")
     586                        .HasForeignKey("UserId")
     587                        .OnDelete(DeleteBehavior.Restrict)
     588                        .IsRequired();
     589
     590                    b.Navigation("EnrolledSemester");
     591
     592                    b.Navigation("Professor");
     593
     594                    b.Navigation("Subject");
     595
     596                    b.Navigation("User");
     597                });
     598
     599            modelBuilder.Entity("iknow_api.Models.UserDocuments", b =>
     600                {
     601                    b.HasOne("iknow_api.Models.Documents", "Documents")
     602                        .WithMany("User")
     603                        .HasForeignKey("DocumentId")
     604                        .OnDelete(DeleteBehavior.Cascade)
     605                        .IsRequired();
     606
     607                    b.HasOne("iknow_api.Models.User", "User")
     608                        .WithMany("Documents")
     609                        .HasForeignKey("UserId")
     610                        .OnDelete(DeleteBehavior.Cascade)
     611                        .IsRequired();
     612
     613                    b.Navigation("Documents");
     614
     615                    b.Navigation("User");
     616                });
     617
     618            modelBuilder.Entity("iknow_api.Models.Documents", b =>
     619                {
     620                    b.Navigation("User");
     621                });
     622
     623            modelBuilder.Entity("iknow_api.Models.EnrolledSemesters", b =>
     624                {
     625                    b.Navigation("SemesterSubjects");
     626
     627                    b.Navigation("Users");
     628                });
     629
     630            modelBuilder.Entity("iknow_api.Models.Major", b =>
     631                {
     632                    b.Navigation("Subjects");
     633                });
     634
     635            modelBuilder.Entity("iknow_api.Models.SemesterSubject", b =>
     636                {
     637                    b.Navigation("PassedSubject");
     638                });
     639
     640            modelBuilder.Entity("iknow_api.Models.Subject", b =>
     641                {
     642                    b.Navigation("Dependencies");
     643
     644                    b.Navigation("Dependents");
     645
     646                    b.Navigation("Majors");
     647
     648                    b.Navigation("SemesterSubjects");
     649                });
     650
    220651            modelBuilder.Entity("iknow_api.Models.User", b =>
    221652                {
    222653                    b.Navigation("ContactInfo");
    223654
     655                    b.Navigation("Documents");
     656
     657                    b.Navigation("EnrolledSemesterUserSubjects");
     658
     659                    b.Navigation("EnrolledSemesters");
     660
    224661                    b.Navigation("EnrollmentInfo");
    225662
    226663                    b.Navigation("HighSchool");
     664
     665                    b.Navigation("TeachingSubjects");
    227666                });
    228667#pragma warning restore 612, 618
Note: See TracChangeset for help on using the changeset viewer.