diff --git a/server/StudySharp.ApplicationServices/Commands/Auth/RegisterNewUserCommand.cs b/server/StudySharp.ApplicationServices/Commands/Auth/RegisterNewUserCommand.cs index 812bb58..a99b9d7 100644 --- a/server/StudySharp.ApplicationServices/Commands/Auth/RegisterNewUserCommand.cs +++ b/server/StudySharp.ApplicationServices/Commands/Auth/RegisterNewUserCommand.cs @@ -65,7 +65,7 @@ public async Task Handle(RegisterNewUserCommand request, Cancel return OperationResult.Fail(userRegisteredResult.Errors.Select(_ => _.Description).ToList()); } - var userObtainedRoleStudentResult = await _userManager.AddToRoleAsync(newUser, DomainRoles.Student.ToString()); + var userObtainedRoleStudentResult = await _userManager.AddToRoleAsync(newUser, DomainRoles.DomainUser.ToString()); if (!userObtainedRoleStudentResult.Succeeded) { diff --git a/server/StudySharp.Domain/Enums/DomainRoles.cs b/server/StudySharp.Domain/Enums/DomainRoles.cs index 74ccc8a..4229027 100644 --- a/server/StudySharp.Domain/Enums/DomainRoles.cs +++ b/server/StudySharp.Domain/Enums/DomainRoles.cs @@ -2,9 +2,8 @@ { public enum DomainRoles { - Unknown = 0, - Teacher = 1, - Student = 2, + DomainUser = 1, + Teacher = 2, Moderator = 3, Admin = 4, } diff --git a/server/StudySharp.Domain/Models/AppearanceType.cs b/server/StudySharp.Domain/Models/AppearanceType.cs new file mode 100644 index 0000000..2462b29 --- /dev/null +++ b/server/StudySharp.Domain/Models/AppearanceType.cs @@ -0,0 +1,9 @@ +namespace StudySharp.Domain.Models +{ + public enum AppearanceType + { + IsPublic = 1, + IsPrivate = 2, + IsInternal = 3, + } +} diff --git a/server/StudySharp.Domain/Models/Course.cs b/server/StudySharp.Domain/Models/Course.cs index ddbd1f4..ec95c10 100644 --- a/server/StudySharp.Domain/Models/Course.cs +++ b/server/StudySharp.Domain/Models/Course.cs @@ -9,8 +9,11 @@ public sealed class Course : IWithDateCreated, IWithDateModified public int Id { get; set; } public string Name { get; set; } public List Tags { get; set; } - public int TeacherId { get; set; } + public int? TeacherId { get; set; } public Teacher Teacher { get; set; } + public int? OrganizationId { get; set; } + public Organization Organization { get; set; } + public AppearanceType Appearance { get; set; } public List TheoryBlocks { get; set; } public List PracticalBlocks { get; set; } public DateTimeOffset DateCreated { get; private set; } diff --git a/server/StudySharp.Domain/Models/DomainUser.cs b/server/StudySharp.Domain/Models/DomainUser.cs new file mode 100644 index 0000000..89465df --- /dev/null +++ b/server/StudySharp.Domain/Models/DomainUser.cs @@ -0,0 +1,12 @@ +namespace StudySharp.Domain.Models +{ + public sealed class DomainUser + { + public int Id { get; set; } + public int AppUserId { get; set; } + public int? TeacherId { get; set; } + public Teacher Teacher { get; set; } + public string FirstName { get; set; } + public string LastName { get; set; } + } +} diff --git a/server/StudySharp.Domain/Models/Organization.cs b/server/StudySharp.Domain/Models/Organization.cs new file mode 100644 index 0000000..2bf6841 --- /dev/null +++ b/server/StudySharp.Domain/Models/Organization.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using StudySharp.Domain.Contracts; + +namespace StudySharp.Domain.Models +{ + public sealed class Organization : IWithDateCreated + { + public int Id { get; set; } + public string Name { get; set; } + public string Description { get; set; } + public int OwnerId { get; set; } + public OrganizationStatus Status { get; set; } + public DateTimeOffset DateCreated { get; private set; } + void IWithDateCreated.SetDateCreated(DateTimeOffset value) => DateCreated = value; + public List Members { get; set; } + } +} diff --git a/server/StudySharp.Domain/Models/OrganizationRepresentative.cs b/server/StudySharp.Domain/Models/OrganizationRepresentative.cs new file mode 100644 index 0000000..694ec0b --- /dev/null +++ b/server/StudySharp.Domain/Models/OrganizationRepresentative.cs @@ -0,0 +1,12 @@ +namespace StudySharp.Domain.Models +{ + public sealed class OrganizationRepresentative + { + public int OrganizationId { get; set; } + public int MemberId { get; set; } + public bool CanCreate { get; set; } + public bool CanEdit { get; set; } + public bool CanDelete { get; set; } + public bool IsOrganizationManager { get; set; } + } +} diff --git a/server/StudySharp.Domain/Models/OrganizationStatus.cs b/server/StudySharp.Domain/Models/OrganizationStatus.cs new file mode 100644 index 0000000..9b888d2 --- /dev/null +++ b/server/StudySharp.Domain/Models/OrganizationStatus.cs @@ -0,0 +1,9 @@ +namespace StudySharp.Domain.Models +{ + public enum OrganizationStatus + { + New = 1, + OnConsideration = 2, + Confirmed = 3, + } +} diff --git a/server/StudySharp.Domain/Models/Teacher.cs b/server/StudySharp.Domain/Models/Teacher.cs index 5a96fc6..46a128e 100644 --- a/server/StudySharp.Domain/Models/Teacher.cs +++ b/server/StudySharp.Domain/Models/Teacher.cs @@ -4,10 +4,7 @@ namespace StudySharp.Domain.Models { public sealed class Teacher { - public int UserId { get; set; } public int Id { get; set; } - public string FirstName { get; set; } - public string LastName { get; set; } public List Courses { get; set; } } } diff --git a/server/StudySharp.DomainServices/Configurations/CourseConfiguration.cs b/server/StudySharp.DomainServices/Configurations/CourseConfiguration.cs index 992259f..ec4d589 100644 --- a/server/StudySharp.DomainServices/Configurations/CourseConfiguration.cs +++ b/server/StudySharp.DomainServices/Configurations/CourseConfiguration.cs @@ -4,7 +4,7 @@ namespace StudySharp.DomainServices.Configurations { - public class ContentConfiguration : IEntityTypeConfiguration + public sealed class CourseConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { diff --git a/server/StudySharp.DomainServices/Configurations/DomainUserConfiguration.cs b/server/StudySharp.DomainServices/Configurations/DomainUserConfiguration.cs new file mode 100644 index 0000000..90742d4 --- /dev/null +++ b/server/StudySharp.DomainServices/Configurations/DomainUserConfiguration.cs @@ -0,0 +1,28 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; +using StudySharp.Domain.Models; + +namespace StudySharp.DomainServices.Configurations +{ + public sealed class DomainUserConfiguration : IEntityTypeConfiguration + { + public void Configure(EntityTypeBuilder builder) + { + builder + .HasKey(_ => _.Id); + + builder + .Property(_ => _.FirstName) + .IsRequired(); + + builder + .Property(_ => _.LastName) + .IsRequired(); + + builder + .HasOne(_ => _.Teacher) + .WithOne() + .HasForeignKey(_ => _.TeacherId); + } + } +} diff --git a/server/StudySharp.DomainServices/Configurations/OrganizationConfiguration.cs b/server/StudySharp.DomainServices/Configurations/OrganizationConfiguration.cs new file mode 100644 index 0000000..a995531 --- /dev/null +++ b/server/StudySharp.DomainServices/Configurations/OrganizationConfiguration.cs @@ -0,0 +1,15 @@ +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; +using StudySharp.Domain.Models; + +namespace StudySharp.DomainServices.Configurations +{ + public sealed class OrganizationConfiguration : IEntityTypeConfiguration + { + public void Configure(EntityTypeBuilder builder) + { + throw new NotImplementedException(); + } + } +} diff --git a/server/StudySharp.DomainServices/Configurations/OrganizationRepresentativeConfiguration.cs b/server/StudySharp.DomainServices/Configurations/OrganizationRepresentativeConfiguration.cs new file mode 100644 index 0000000..e98cd3b --- /dev/null +++ b/server/StudySharp.DomainServices/Configurations/OrganizationRepresentativeConfiguration.cs @@ -0,0 +1,15 @@ +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; +using StudySharp.Domain.Models; + +namespace StudySharp.DomainServices.Configurations +{ + public sealed class OrganizationRepresentativeConfiguration : IEntityTypeConfiguration + { + public void Configure(EntityTypeBuilder builder) + { + throw new NotImplementedException(); + } + } +} diff --git a/server/StudySharp.DomainServices/Configurations/QuizConfiguration.cs b/server/StudySharp.DomainServices/Configurations/QuizConfiguration.cs index 9893a48..a8c89e2 100644 --- a/server/StudySharp.DomainServices/Configurations/QuizConfiguration.cs +++ b/server/StudySharp.DomainServices/Configurations/QuizConfiguration.cs @@ -4,7 +4,7 @@ namespace StudySharp.DomainServices.Configurations { - public class QuizConfiguration : IEntityTypeConfiguration + public sealed class QuizConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { diff --git a/server/StudySharp.DomainServices/Configurations/TagConfiguration.cs b/server/StudySharp.DomainServices/Configurations/TagConfiguration.cs index 1a53123..04a37f8 100644 --- a/server/StudySharp.DomainServices/Configurations/TagConfiguration.cs +++ b/server/StudySharp.DomainServices/Configurations/TagConfiguration.cs @@ -4,7 +4,7 @@ namespace StudySharp.DomainServices.Configurations { - public class TagConfiguration : IEntityTypeConfiguration + public sealed class TagConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { diff --git a/server/StudySharp.DomainServices/Configurations/TeacherConfiguration.cs b/server/StudySharp.DomainServices/Configurations/TeacherConfiguration.cs index f475fbd..5c5cee0 100644 --- a/server/StudySharp.DomainServices/Configurations/TeacherConfiguration.cs +++ b/server/StudySharp.DomainServices/Configurations/TeacherConfiguration.cs @@ -4,7 +4,7 @@ namespace StudySharp.DomainServices.Configurations { - public class TeacherConfiguration : IEntityTypeConfiguration + public sealed class TeacherConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { @@ -12,12 +12,9 @@ public void Configure(EntityTypeBuilder builder) .HasKey(_ => _.Id); builder - .Property(_ => _.FirstName) - .IsRequired(); - - builder - .Property(_ => _.LastName) - .IsRequired(); + .HasMany(_ => _.Courses) + .WithOne(_ => _.Teacher) + .HasForeignKey(_ => _.TeacherId); } } } diff --git a/server/StudySharp.DomainServices/Configurations/TheoryBlockConfiguration.cs b/server/StudySharp.DomainServices/Configurations/TheoryBlockConfiguration.cs index f90381d..b6a0c44 100644 --- a/server/StudySharp.DomainServices/Configurations/TheoryBlockConfiguration.cs +++ b/server/StudySharp.DomainServices/Configurations/TheoryBlockConfiguration.cs @@ -4,7 +4,7 @@ namespace StudySharp.DomainServices.Configurations { - public class TheoryBlockConfiguration : IEntityTypeConfiguration + public sealed class TheoryBlockConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { diff --git a/server/StudySharp.DomainServices/StudySharpDbContext.cs b/server/StudySharp.DomainServices/StudySharpDbContext.cs index 6d539b0..3ff8b1b 100644 --- a/server/StudySharp.DomainServices/StudySharpDbContext.cs +++ b/server/StudySharp.DomainServices/StudySharpDbContext.cs @@ -12,6 +12,9 @@ namespace StudySharp.DomainServices { public class StudySharpDbContext : IdentityDbContext, int> { + public DbSet DomainUsers { get; set; } + public DbSet Organizations { get; set; } + public DbSet OrganizationRepresentatives { get; set; } public DbSet Teachers { get; set; } public DbSet Courses { get; set; } public DbSet PracticalBlocks { get; set; }