diff --git a/.vs/StudyLib/v16/.suo b/.vs/StudyLib/v16/.suo index 477fa7a..a5a9228 100644 Binary files a/.vs/StudyLib/v16/.suo and b/.vs/StudyLib/v16/.suo differ diff --git a/API/Controllers/GroupsController.cs b/API/Controllers/GroupsController.cs index c403d5b..6b8a5a9 100644 --- a/API/Controllers/GroupsController.cs +++ b/API/Controllers/GroupsController.cs @@ -118,7 +118,7 @@ namespace StudyLib.API.Controllers [HttpGet("leave/{id}/{userId}")] public async Task LeaveGroup(long id, string userId) { - var user = await _context.Users.FindAsync(userId); + var user = await _context.Users.Where(u => u.Id == userId).Include(u => u.Groups).SingleOrDefaultAsync(); var groups = user.Groups.Where(g => g.ID != id).ToList(); diff --git a/API/Controllers/SubjectsController.cs b/API/Controllers/SubjectsController.cs index bc251f7..9c3d264 100644 --- a/API/Controllers/SubjectsController.cs +++ b/API/Controllers/SubjectsController.cs @@ -30,8 +30,8 @@ namespace StudyLib.API.Controllers return await _context.Subjects.Where(s => s.Group.ID == groupId).Include(s => s.Comments).Include(s => s.Assignments).Include(s => s.Tests).ToListAsync(); } - [HttpGet("get-by-id/{id}")] - public async Task> GetSubject(long id) + [HttpGet("get-by-id/{id}/{userId}")] + public async Task> GetSubject(long id, string userId) { var subject = await _context.Subjects.Where(s => s.ID == id).Include(s => s.Comments).Include(s => s.Assignments).Include(s => s.Tests).SingleOrDefaultAsync(); @@ -40,6 +40,10 @@ namespace StudyLib.API.Controllers return NotFound(); } + subject.EditedBy = userId; + _context.Entry(subject).State = EntityState.Modified; + await _context.SaveChangesAsync(); + return subject; } @@ -133,6 +137,23 @@ namespace StudyLib.API.Controllers return subject; } + [HttpGet("unlock/{id}")] + public async Task> UnlockSubject(long id) + { + var subject = await _context.Subjects.FindAsync(id); + + if (subject == null) + { + return NotFound(); + } + + subject.EditedBy = null; + _context.Entry(subject).State = EntityState.Modified; + await _context.SaveChangesAsync(); + + return NoContent(); + } + private bool SubjectExists(long id) { return _context.Subjects.Any(e => e.ID == id); diff --git a/API/Models/Subject.cs b/API/Models/Subject.cs index 6723a24..eda2f16 100644 --- a/API/Models/Subject.cs +++ b/API/Models/Subject.cs @@ -17,6 +17,8 @@ namespace StudyLib.Models public string LabTeacher { get; set; } public bool MainExam { get; set; } + + public string EditedBy { get; set; } public long GroupId { get; set; } diff --git a/Migrations/20210103192936_EditedBy.Designer.cs b/Migrations/20210103192936_EditedBy.Designer.cs new file mode 100644 index 0000000..9869196 --- /dev/null +++ b/Migrations/20210103192936_EditedBy.Designer.cs @@ -0,0 +1,578 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using StudyLib.API.Data; + +namespace StudyLib.Migrations +{ + [DbContext(typeof(StudyLibContext))] + [Migration("20210103192936_EditedBy")] + partial class EditedBy + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .UseIdentityColumns() + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("ProductVersion", "5.0.0"); + + modelBuilder.Entity("GroupUser", b => + { + b.Property("GroupsID") + .HasColumnType("bigint"); + + b.Property("UsersId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("GroupsID", "UsersId"); + + b.HasIndex("UsersId"); + + b.ToTable("GroupUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("AspNetRoles"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .UseIdentityColumn(); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .UseIdentityColumn(); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("RoleId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("LoginProvider") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens"); + }); + + modelBuilder.Entity("StudyLib.API.Models.Comment", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .UseIdentityColumn(); + + b.Property("SubjectId") + .HasColumnType("bigint"); + + b.Property("Text") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("ID"); + + b.HasIndex("SubjectId"); + + b.ToTable("Comments"); + }); + + modelBuilder.Entity("StudyLib.API.Models.Group", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .UseIdentityColumn(); + + b.Property("AdminId") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasColumnType("nvarchar(max)"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("ID"); + + b.ToTable("Groups"); + }); + + modelBuilder.Entity("StudyLib.API.Models.GroupCandidate", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .UseIdentityColumn(); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("ID"); + + b.HasIndex("GroupId"); + + b.HasIndex("UserId"); + + b.ToTable("GroupCandidates"); + }); + + modelBuilder.Entity("StudyLib.API.Models.SubjectDeleteRequest", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .UseIdentityColumn(); + + b.Property("SubjectId") + .HasColumnType("bigint"); + + b.HasKey("ID"); + + b.HasIndex("SubjectId"); + + b.ToTable("SubjectDeleteRequests"); + }); + + modelBuilder.Entity("StudyLib.API.Models.User", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("bit"); + + b.Property("FullName") + .HasColumnType("nvarchar(max)"); + + b.Property("LockoutEnabled") + .HasColumnType("bit"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit"); + + b.Property("SecurityStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("AspNetUsers"); + }); + + modelBuilder.Entity("StudyLib.Models.Assignment", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .UseIdentityColumn(); + + b.Property("Deadline") + .HasColumnType("datetime2"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("FinalMarkPercent") + .HasColumnType("float"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SubjectId") + .HasColumnType("bigint"); + + b.HasKey("ID"); + + b.HasIndex("SubjectId"); + + b.ToTable("Assignments"); + }); + + modelBuilder.Entity("StudyLib.Models.Subject", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .UseIdentityColumn(); + + b.Property("ExamDate") + .HasColumnType("datetime2"); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("LabTeacher") + .HasColumnType("nvarchar(max)"); + + b.Property("LectureTeacher") + .HasColumnType("nvarchar(max)"); + + b.Property("MainExam") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("editedBy") + .HasColumnType("nvarchar(max)"); + + b.HasKey("ID"); + + b.HasIndex("GroupId"); + + b.ToTable("Subjects"); + }); + + modelBuilder.Entity("StudyLib.Models.Test", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .UseIdentityColumn(); + + b.Property("Date") + .HasColumnType("datetime2"); + + b.Property("FinalMarkPercent") + .HasColumnType("float"); + + b.Property("Scope") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SubjectId") + .HasColumnType("bigint"); + + b.HasKey("ID"); + + b.HasIndex("SubjectId"); + + b.ToTable("Tests"); + }); + + modelBuilder.Entity("GroupUser", b => + { + b.HasOne("StudyLib.API.Models.Group", null) + .WithMany() + .HasForeignKey("GroupsID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("StudyLib.API.Models.User", null) + .WithMany() + .HasForeignKey("UsersId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("StudyLib.API.Models.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("StudyLib.API.Models.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("StudyLib.API.Models.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("StudyLib.API.Models.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("StudyLib.API.Models.Comment", b => + { + b.HasOne("StudyLib.Models.Subject", "Subject") + .WithMany("Comments") + .HasForeignKey("SubjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subject"); + }); + + modelBuilder.Entity("StudyLib.API.Models.GroupCandidate", b => + { + b.HasOne("StudyLib.API.Models.Group", "Group") + .WithMany("GroupCandidates") + .HasForeignKey("GroupId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("StudyLib.API.Models.User", "User") + .WithMany("GroupCandidates") + .HasForeignKey("UserId"); + + b.Navigation("Group"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("StudyLib.API.Models.SubjectDeleteRequest", b => + { + b.HasOne("StudyLib.Models.Subject", "Subject") + .WithMany() + .HasForeignKey("SubjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subject"); + }); + + modelBuilder.Entity("StudyLib.Models.Assignment", b => + { + b.HasOne("StudyLib.Models.Subject", "Subject") + .WithMany("Assignments") + .HasForeignKey("SubjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subject"); + }); + + modelBuilder.Entity("StudyLib.Models.Subject", b => + { + b.HasOne("StudyLib.API.Models.Group", "Group") + .WithMany("Subjects") + .HasForeignKey("GroupId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Group"); + }); + + modelBuilder.Entity("StudyLib.Models.Test", b => + { + b.HasOne("StudyLib.Models.Subject", "Subject") + .WithMany("Tests") + .HasForeignKey("SubjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subject"); + }); + + modelBuilder.Entity("StudyLib.API.Models.Group", b => + { + b.Navigation("GroupCandidates"); + + b.Navigation("Subjects"); + }); + + modelBuilder.Entity("StudyLib.API.Models.User", b => + { + b.Navigation("GroupCandidates"); + }); + + modelBuilder.Entity("StudyLib.Models.Subject", b => + { + b.Navigation("Assignments"); + + b.Navigation("Comments"); + + b.Navigation("Tests"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Migrations/20210103192936_EditedBy.cs b/Migrations/20210103192936_EditedBy.cs new file mode 100644 index 0000000..908fa06 --- /dev/null +++ b/Migrations/20210103192936_EditedBy.cs @@ -0,0 +1,23 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace StudyLib.Migrations +{ + public partial class EditedBy : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "editedBy", + table: "Subjects", + type: "nvarchar(max)", + nullable: true); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "editedBy", + table: "Subjects"); + } + } +} diff --git a/Migrations/20210103193005_EditedBy2.Designer.cs b/Migrations/20210103193005_EditedBy2.Designer.cs new file mode 100644 index 0000000..a944113 --- /dev/null +++ b/Migrations/20210103193005_EditedBy2.Designer.cs @@ -0,0 +1,578 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using StudyLib.API.Data; + +namespace StudyLib.Migrations +{ + [DbContext(typeof(StudyLibContext))] + [Migration("20210103193005_EditedBy2")] + partial class EditedBy2 + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .UseIdentityColumns() + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("ProductVersion", "5.0.0"); + + modelBuilder.Entity("GroupUser", b => + { + b.Property("GroupsID") + .HasColumnType("bigint"); + + b.Property("UsersId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("GroupsID", "UsersId"); + + b.HasIndex("UsersId"); + + b.ToTable("GroupUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("AspNetRoles"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .UseIdentityColumn(); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .UseIdentityColumn(); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("RoleId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("LoginProvider") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens"); + }); + + modelBuilder.Entity("StudyLib.API.Models.Comment", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .UseIdentityColumn(); + + b.Property("SubjectId") + .HasColumnType("bigint"); + + b.Property("Text") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("ID"); + + b.HasIndex("SubjectId"); + + b.ToTable("Comments"); + }); + + modelBuilder.Entity("StudyLib.API.Models.Group", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .UseIdentityColumn(); + + b.Property("AdminId") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasColumnType("nvarchar(max)"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("ID"); + + b.ToTable("Groups"); + }); + + modelBuilder.Entity("StudyLib.API.Models.GroupCandidate", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .UseIdentityColumn(); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("ID"); + + b.HasIndex("GroupId"); + + b.HasIndex("UserId"); + + b.ToTable("GroupCandidates"); + }); + + modelBuilder.Entity("StudyLib.API.Models.SubjectDeleteRequest", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .UseIdentityColumn(); + + b.Property("SubjectId") + .HasColumnType("bigint"); + + b.HasKey("ID"); + + b.HasIndex("SubjectId"); + + b.ToTable("SubjectDeleteRequests"); + }); + + modelBuilder.Entity("StudyLib.API.Models.User", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("bit"); + + b.Property("FullName") + .HasColumnType("nvarchar(max)"); + + b.Property("LockoutEnabled") + .HasColumnType("bit"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit"); + + b.Property("SecurityStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("AspNetUsers"); + }); + + modelBuilder.Entity("StudyLib.Models.Assignment", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .UseIdentityColumn(); + + b.Property("Deadline") + .HasColumnType("datetime2"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("FinalMarkPercent") + .HasColumnType("float"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SubjectId") + .HasColumnType("bigint"); + + b.HasKey("ID"); + + b.HasIndex("SubjectId"); + + b.ToTable("Assignments"); + }); + + modelBuilder.Entity("StudyLib.Models.Subject", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .UseIdentityColumn(); + + b.Property("EditedBy") + .HasColumnType("nvarchar(max)"); + + b.Property("ExamDate") + .HasColumnType("datetime2"); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("LabTeacher") + .HasColumnType("nvarchar(max)"); + + b.Property("LectureTeacher") + .HasColumnType("nvarchar(max)"); + + b.Property("MainExam") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("ID"); + + b.HasIndex("GroupId"); + + b.ToTable("Subjects"); + }); + + modelBuilder.Entity("StudyLib.Models.Test", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .UseIdentityColumn(); + + b.Property("Date") + .HasColumnType("datetime2"); + + b.Property("FinalMarkPercent") + .HasColumnType("float"); + + b.Property("Scope") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SubjectId") + .HasColumnType("bigint"); + + b.HasKey("ID"); + + b.HasIndex("SubjectId"); + + b.ToTable("Tests"); + }); + + modelBuilder.Entity("GroupUser", b => + { + b.HasOne("StudyLib.API.Models.Group", null) + .WithMany() + .HasForeignKey("GroupsID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("StudyLib.API.Models.User", null) + .WithMany() + .HasForeignKey("UsersId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("StudyLib.API.Models.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("StudyLib.API.Models.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("StudyLib.API.Models.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("StudyLib.API.Models.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("StudyLib.API.Models.Comment", b => + { + b.HasOne("StudyLib.Models.Subject", "Subject") + .WithMany("Comments") + .HasForeignKey("SubjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subject"); + }); + + modelBuilder.Entity("StudyLib.API.Models.GroupCandidate", b => + { + b.HasOne("StudyLib.API.Models.Group", "Group") + .WithMany("GroupCandidates") + .HasForeignKey("GroupId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("StudyLib.API.Models.User", "User") + .WithMany("GroupCandidates") + .HasForeignKey("UserId"); + + b.Navigation("Group"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("StudyLib.API.Models.SubjectDeleteRequest", b => + { + b.HasOne("StudyLib.Models.Subject", "Subject") + .WithMany() + .HasForeignKey("SubjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subject"); + }); + + modelBuilder.Entity("StudyLib.Models.Assignment", b => + { + b.HasOne("StudyLib.Models.Subject", "Subject") + .WithMany("Assignments") + .HasForeignKey("SubjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subject"); + }); + + modelBuilder.Entity("StudyLib.Models.Subject", b => + { + b.HasOne("StudyLib.API.Models.Group", "Group") + .WithMany("Subjects") + .HasForeignKey("GroupId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Group"); + }); + + modelBuilder.Entity("StudyLib.Models.Test", b => + { + b.HasOne("StudyLib.Models.Subject", "Subject") + .WithMany("Tests") + .HasForeignKey("SubjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subject"); + }); + + modelBuilder.Entity("StudyLib.API.Models.Group", b => + { + b.Navigation("GroupCandidates"); + + b.Navigation("Subjects"); + }); + + modelBuilder.Entity("StudyLib.API.Models.User", b => + { + b.Navigation("GroupCandidates"); + }); + + modelBuilder.Entity("StudyLib.Models.Subject", b => + { + b.Navigation("Assignments"); + + b.Navigation("Comments"); + + b.Navigation("Tests"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Migrations/20210103193005_EditedBy2.cs b/Migrations/20210103193005_EditedBy2.cs new file mode 100644 index 0000000..fbb71d2 --- /dev/null +++ b/Migrations/20210103193005_EditedBy2.cs @@ -0,0 +1,23 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace StudyLib.Migrations +{ + public partial class EditedBy2 : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameColumn( + name: "editedBy", + table: "Subjects", + newName: "EditedBy"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameColumn( + name: "EditedBy", + table: "Subjects", + newName: "editedBy"); + } + } +} diff --git a/Migrations/StudyLibContextModelSnapshot.cs b/Migrations/StudyLibContextModelSnapshot.cs index 796cb21..826b479 100644 --- a/Migrations/StudyLibContextModelSnapshot.cs +++ b/Migrations/StudyLibContextModelSnapshot.cs @@ -356,6 +356,9 @@ namespace StudyLib.Migrations .HasColumnType("bigint") .UseIdentityColumn(); + b.Property("EditedBy") + .HasColumnType("nvarchar(max)"); + b.Property("ExamDate") .HasColumnType("datetime2"); diff --git a/bin/Debug/net5.0/StudyLib.dll b/bin/Debug/net5.0/StudyLib.dll index fba0460..61b81cb 100644 Binary files a/bin/Debug/net5.0/StudyLib.dll and b/bin/Debug/net5.0/StudyLib.dll differ diff --git a/bin/Debug/net5.0/StudyLib.pdb b/bin/Debug/net5.0/StudyLib.pdb index cd94d79..cd15ed5 100644 Binary files a/bin/Debug/net5.0/StudyLib.pdb and b/bin/Debug/net5.0/StudyLib.pdb differ diff --git a/bin/Debug/net5.0/ref/StudyLib.dll b/bin/Debug/net5.0/ref/StudyLib.dll index 8e3dd95..f21c476 100644 Binary files a/bin/Debug/net5.0/ref/StudyLib.dll and b/bin/Debug/net5.0/ref/StudyLib.dll differ diff --git a/obj/Debug/net5.0/StudyLib.csproj.CoreCompileInputs.cache b/obj/Debug/net5.0/StudyLib.csproj.CoreCompileInputs.cache index a4bc5cd..26b3de3 100644 --- a/obj/Debug/net5.0/StudyLib.csproj.CoreCompileInputs.cache +++ b/obj/Debug/net5.0/StudyLib.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -119b850527e9f659a5a20a28f72de7822bb65ba5 +1bfc0accae85c0aef096b7a83846583c2f400f56 diff --git a/obj/Debug/net5.0/StudyLib.csprojAssemblyReference.cache b/obj/Debug/net5.0/StudyLib.csprojAssemblyReference.cache index 1e87a93..124e315 100644 Binary files a/obj/Debug/net5.0/StudyLib.csprojAssemblyReference.cache and b/obj/Debug/net5.0/StudyLib.csprojAssemblyReference.cache differ diff --git a/obj/Debug/net5.0/StudyLib.dll b/obj/Debug/net5.0/StudyLib.dll index fba0460..61b81cb 100644 Binary files a/obj/Debug/net5.0/StudyLib.dll and b/obj/Debug/net5.0/StudyLib.dll differ diff --git a/obj/Debug/net5.0/StudyLib.pdb b/obj/Debug/net5.0/StudyLib.pdb index cd94d79..cd15ed5 100644 Binary files a/obj/Debug/net5.0/StudyLib.pdb and b/obj/Debug/net5.0/StudyLib.pdb differ diff --git a/obj/Debug/net5.0/ref/StudyLib.dll b/obj/Debug/net5.0/ref/StudyLib.dll index 8e3dd95..f21c476 100644 Binary files a/obj/Debug/net5.0/ref/StudyLib.dll and b/obj/Debug/net5.0/ref/StudyLib.dll differ