Добавил домен
This commit is contained in:
@@ -0,0 +1,16 @@
|
|||||||
|
namespace UniVerse.Domain.Entities;
|
||||||
|
|
||||||
|
public class Achievement
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
public string Name { get; set; } = string.Empty;
|
||||||
|
public string? Description { get; set; }
|
||||||
|
public string? IconUrl { get; set; }
|
||||||
|
public int XpReward { get; set; }
|
||||||
|
public int CoinReward { get; set; }
|
||||||
|
public string? Condition { get; set; }
|
||||||
|
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
||||||
|
|
||||||
|
// Navigation properties
|
||||||
|
public ICollection<UserAchievement> UserAchievements { get; set; } = new List<UserAchievement>();
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
using UniVerse.Domain.Enums;
|
||||||
|
|
||||||
|
namespace UniVerse.Domain.Entities;
|
||||||
|
|
||||||
|
public class CoinTransaction
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
public int UserId { get; set; }
|
||||||
|
public int Amount { get; set; }
|
||||||
|
public CoinTransactionType Type { get; set; }
|
||||||
|
public int? ReviewId { get; set; }
|
||||||
|
public int? AchievementId { get; set; }
|
||||||
|
public string? Description { get; set; }
|
||||||
|
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
||||||
|
|
||||||
|
// Navigation properties
|
||||||
|
public User User { get; set; } = null!;
|
||||||
|
public Review? Review { get; set; }
|
||||||
|
public Achievement? Achievement { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
namespace UniVerse.Domain.Entities;
|
||||||
|
|
||||||
|
public class Course
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
public string Name { get; set; } = string.Empty;
|
||||||
|
public string? Description { get; set; }
|
||||||
|
public string? ExternalId { get; set; }
|
||||||
|
public bool IsSynced { get; set; }
|
||||||
|
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
||||||
|
public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
|
||||||
|
|
||||||
|
// Navigation properties
|
||||||
|
public ICollection<Lecture> Lectures { get; set; } = new List<Lecture>();
|
||||||
|
public ICollection<CourseTag> CourseTags { get; set; } = new List<CourseTag>();
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
namespace UniVerse.Domain.Entities;
|
||||||
|
|
||||||
|
public class CourseTag
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
public int CourseId { get; set; }
|
||||||
|
public int TagId { get; set; }
|
||||||
|
|
||||||
|
// Navigation properties
|
||||||
|
public Course Course { get; set; } = null!;
|
||||||
|
public Tag Tag { get; set; } = null!;
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
using UniVerse.Domain.Enums;
|
||||||
|
|
||||||
|
namespace UniVerse.Domain.Entities;
|
||||||
|
|
||||||
|
public class Lecture
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
public int CourseId { get; set; }
|
||||||
|
public int? TeacherId { get; set; }
|
||||||
|
public int? LocationId { get; set; }
|
||||||
|
public string Title { get; set; } = string.Empty;
|
||||||
|
public string? Description { get; set; }
|
||||||
|
public LectureFormat Format { get; set; } = LectureFormat.Offline;
|
||||||
|
public DateTime StartsAt { get; set; }
|
||||||
|
public DateTime EndsAt { get; set; }
|
||||||
|
public bool IsOpen { get; set; } = true;
|
||||||
|
public int MaxEnrollments { get; set; }
|
||||||
|
public string? ExternalId { get; set; }
|
||||||
|
public string? OnlineUrl { get; set; }
|
||||||
|
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
||||||
|
public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
|
||||||
|
|
||||||
|
// Navigation properties
|
||||||
|
public Course Course { get; set; } = null!;
|
||||||
|
public User? Teacher { get; set; }
|
||||||
|
public Location? Location { get; set; }
|
||||||
|
public ICollection<LectureEnrollment> Enrollments { get; set; } = new List<LectureEnrollment>();
|
||||||
|
public ICollection<Review> Reviews { get; set; } = new List<Review>();
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
namespace UniVerse.Domain.Entities;
|
||||||
|
|
||||||
|
public class LectureEnrollment
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
public int LectureId { get; set; }
|
||||||
|
public int UserId { get; set; }
|
||||||
|
public bool Attended { get; set; }
|
||||||
|
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
||||||
|
|
||||||
|
// Navigation properties
|
||||||
|
public Lecture Lecture { get; set; } = null!;
|
||||||
|
public User User { get; set; } = null!;
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
namespace UniVerse.Domain.Entities;
|
||||||
|
|
||||||
|
public class Location
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
public string Name { get; set; } = string.Empty;
|
||||||
|
public string? Building { get; set; }
|
||||||
|
public string? Room { get; set; }
|
||||||
|
public string? Address { get; set; }
|
||||||
|
public string? ExternalId { get; set; }
|
||||||
|
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
||||||
|
|
||||||
|
// Navigation properties
|
||||||
|
public ICollection<Lecture> Lectures { get; set; } = new List<Lecture>();
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
namespace UniVerse.Domain.Entities;
|
||||||
|
|
||||||
|
public class RefreshToken
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
public int UserId { get; set; }
|
||||||
|
public string Token { get; set; } = string.Empty;
|
||||||
|
public DateTime ExpiresAt { get; set; }
|
||||||
|
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
||||||
|
public DateTime? RevokedAt { get; set; }
|
||||||
|
|
||||||
|
public bool IsExpired => DateTime.UtcNow >= ExpiresAt;
|
||||||
|
public bool IsRevoked => RevokedAt != null;
|
||||||
|
public bool IsActive => !IsRevoked && !IsExpired;
|
||||||
|
|
||||||
|
// Navigation properties
|
||||||
|
public User User { get; set; } = null!;
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
using UniVerse.Domain.Enums;
|
||||||
|
|
||||||
|
namespace UniVerse.Domain.Entities;
|
||||||
|
|
||||||
|
public class Review
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
public int LectureId { get; set; }
|
||||||
|
public int UserId { get; set; }
|
||||||
|
public ReviewRating Rating { get; set; }
|
||||||
|
public string? Text { get; set; }
|
||||||
|
public ReviewLlmStatus LlmStatus { get; set; } = ReviewLlmStatus.Pending;
|
||||||
|
public ReviewSentiment? Sentiment { get; set; }
|
||||||
|
public double? QualityScore { get; set; }
|
||||||
|
public bool? IsInformative { get; set; }
|
||||||
|
public string[]? LlmTags { get; set; }
|
||||||
|
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
||||||
|
public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
|
||||||
|
|
||||||
|
// Navigation properties
|
||||||
|
public Lecture Lecture { get; set; } = null!;
|
||||||
|
public User User { get; set; } = null!;
|
||||||
|
public ICollection<CoinTransaction> CoinTransactions { get; set; } = new List<CoinTransaction>();
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
namespace UniVerse.Domain.Entities;
|
||||||
|
|
||||||
|
public class StudentProfile
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
public int UserId { get; set; }
|
||||||
|
public string? StudentId { get; set; }
|
||||||
|
public string? GroupName { get; set; }
|
||||||
|
public int? EnrollmentYear { get; set; }
|
||||||
|
public string? Faculty { get; set; }
|
||||||
|
public string? Specialty { get; set; }
|
||||||
|
|
||||||
|
// Navigation properties
|
||||||
|
public User User { get; set; } = null!;
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
using UniVerse.Domain.Enums;
|
||||||
|
|
||||||
|
namespace UniVerse.Domain.Entities;
|
||||||
|
|
||||||
|
public class Tag
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
public string Name { get; set; } = string.Empty;
|
||||||
|
public TagType Type { get; set; }
|
||||||
|
public int? ParentId { get; set; }
|
||||||
|
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
||||||
|
|
||||||
|
// Navigation properties
|
||||||
|
public Tag? Parent { get; set; }
|
||||||
|
public ICollection<Tag> Children { get; set; } = new List<Tag>();
|
||||||
|
public ICollection<CourseTag> CourseTags { get; set; } = new List<CourseTag>();
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
namespace UniVerse.Domain.Entities;
|
||||||
|
|
||||||
|
public class TeacherProfile
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
public int UserId { get; set; }
|
||||||
|
public string? Department { get; set; }
|
||||||
|
public string? Title { get; set; }
|
||||||
|
public string? Bio { get; set; }
|
||||||
|
public string? ModeusId { get; set; }
|
||||||
|
|
||||||
|
// Navigation properties
|
||||||
|
public User User { get; set; } = null!;
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
using UniVerse.Domain.Enums;
|
||||||
|
|
||||||
|
namespace UniVerse.Domain.Entities;
|
||||||
|
|
||||||
|
public class User
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
public string Email { get; set; } = string.Empty;
|
||||||
|
public string? DisplayName { get; set; }
|
||||||
|
public string? AvatarUrl { get; set; }
|
||||||
|
public UserRole Role { get; set; } = UserRole.Student;
|
||||||
|
public bool IsActive { get; set; } = true;
|
||||||
|
public string? MicrosoftId { get; set; }
|
||||||
|
public int Xp { get; set; }
|
||||||
|
public int Coins { get; set; }
|
||||||
|
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
||||||
|
public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
|
||||||
|
|
||||||
|
// Navigation properties
|
||||||
|
public StudentProfile? StudentProfile { get; set; }
|
||||||
|
public TeacherProfile? TeacherProfile { get; set; }
|
||||||
|
public ICollection<LectureEnrollment> Enrollments { get; set; } = new List<LectureEnrollment>();
|
||||||
|
public ICollection<Review> Reviews { get; set; } = new List<Review>();
|
||||||
|
public ICollection<UserAchievement> UserAchievements { get; set; } = new List<UserAchievement>();
|
||||||
|
public ICollection<CoinTransaction> CoinTransactions { get; set; } = new List<CoinTransaction>();
|
||||||
|
public ICollection<RefreshToken> RefreshTokens { get; set; } = new List<RefreshToken>();
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
namespace UniVerse.Domain.Entities;
|
||||||
|
|
||||||
|
public class UserAchievement
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
public int UserId { get; set; }
|
||||||
|
public int AchievementId { get; set; }
|
||||||
|
public DateTime AwardedAt { get; set; } = DateTime.UtcNow;
|
||||||
|
|
||||||
|
// Navigation properties
|
||||||
|
public User User { get; set; } = null!;
|
||||||
|
public Achievement Achievement { get; set; } = null!;
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
namespace UniVerse.Domain.Enums;
|
||||||
|
|
||||||
|
public enum CoinTransactionType
|
||||||
|
{
|
||||||
|
ReviewReward,
|
||||||
|
AchievementReward,
|
||||||
|
AttendanceReward,
|
||||||
|
AdminAdjustment
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
namespace UniVerse.Domain.Enums;
|
||||||
|
|
||||||
|
public enum LectureFormat
|
||||||
|
{
|
||||||
|
Online,
|
||||||
|
Offline
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
namespace UniVerse.Domain.Enums;
|
||||||
|
|
||||||
|
public enum ReviewLlmStatus
|
||||||
|
{
|
||||||
|
Pending,
|
||||||
|
Analyzed,
|
||||||
|
Rejected
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
namespace UniVerse.Domain.Enums;
|
||||||
|
|
||||||
|
public enum ReviewRating
|
||||||
|
{
|
||||||
|
Like,
|
||||||
|
Neutral,
|
||||||
|
Dislike
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
namespace UniVerse.Domain.Enums;
|
||||||
|
|
||||||
|
public enum ReviewSentiment
|
||||||
|
{
|
||||||
|
Positive,
|
||||||
|
Neutral,
|
||||||
|
Negative
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
namespace UniVerse.Domain.Enums;
|
||||||
|
|
||||||
|
public enum TagType
|
||||||
|
{
|
||||||
|
Institute,
|
||||||
|
Faculty,
|
||||||
|
Subject,
|
||||||
|
Organization,
|
||||||
|
Topic,
|
||||||
|
Other
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
namespace UniVerse.Domain.Enums;
|
||||||
|
|
||||||
|
public enum UserRole
|
||||||
|
{
|
||||||
|
Student,
|
||||||
|
Teacher,
|
||||||
|
Admin
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
namespace UniVerse.Domain.Exceptions;
|
||||||
|
|
||||||
|
public class ConflictException : Exception
|
||||||
|
{
|
||||||
|
public ConflictException(string message) : base(message)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
namespace UniVerse.Domain.Exceptions;
|
||||||
|
|
||||||
|
public class ForbiddenException : Exception
|
||||||
|
{
|
||||||
|
public ForbiddenException(string message = "You do not have permission to perform this action.")
|
||||||
|
: base(message)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
namespace UniVerse.Domain.Exceptions;
|
||||||
|
|
||||||
|
public class NotFoundException : Exception
|
||||||
|
{
|
||||||
|
public NotFoundException(string entityName, object key)
|
||||||
|
: base($"{entityName} with key '{key}' was not found.")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public NotFoundException(string message) : base(message)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net10.0</TargetFramework>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<RootNamespace>UniVerse.Domain</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
Reference in New Issue
Block a user