Browse Source

Merge branch 'feature/exam' into dev
合并考试系统代码

guqiang 2 tháng trước cách đây
mục cha
commit
2f9cd2bfb1

+ 7 - 0
src/Hotline.Application/Exam/Constants/Messages/ErrorMessage.cs

@@ -0,0 +1,7 @@
+namespace Hotline.Application.Exam.Constants.Messages
+{
+    public class ErrorMessage
+    {
+        public const string HasChild = "{0}拥有下级,不可删除";
+    }
+}

+ 25 - 0
src/Hotline.Application/Exam/Extensions/RepositoryExtensions.cs

@@ -0,0 +1,25 @@
+using Exam.Infrastructure.Data.Entity;
+using Hotline.Exams.Base;
+using System.Linq.Expressions;
+using XF.Domain.Entities;
+using XF.Domain.Repository;
+
+namespace Hotline.Application.Exam.Extensions
+{
+    public static class RepositoryExtensions
+    {
+        public static bool CheckHasChild<TEntity>(this IRepository<TEntity> repository, EntityQueryRequest entityQueryRequest) where TEntity : class, IEntity<string>, IParentEntity, new()
+        {
+            if (entityQueryRequest.Id != null)
+            {
+                return repository.Queryable().Any(x=>x.ParentId == entityQueryRequest.Id);
+            }
+            else if(entityQueryRequest.Ids!=null && entityQueryRequest.Ids.Any())
+            {
+                return repository.Queryable().Any(x => entityQueryRequest.Ids.Contains(x.ParentId));
+            }
+
+            return false;
+        }
+    }
+}

+ 22 - 0
src/Hotline.Application/Exam/Service/ExamManages/ExamTagService.cs

@@ -1,9 +1,13 @@
 using Exam.Application.Interface.Exam;
 using Exam.ExamManages;
 using Exam.Infrastructure.Data.Entity;
+using Exam.Infrastructure.Extensions;
 using Exam.Insfrastructure.Service.Service;
 using Exam.Share.ViewResponses.Sourceware;
+using Hotline.Application.Exam.Constants.Messages;
+using Hotline.Application.Exam.Extensions;
 using Hotline.Application.Exam.QueryExtensions.ExamManages;
+using Hotline.Exams.Sourcewares;
 using Hotline.Repository.SqlSugar;
 using Hotline.Repository.SqlSugar.Exam.Interfaces.ExamManages;
 using Hotline.Share.Dtos.ExamManages;
@@ -13,6 +17,7 @@ using Hotline.Share.ViewResponses.Exam;
 using Mapster;
 using System.ComponentModel;
 using XF.Domain.Dependency;
+using XF.Domain.Exceptions;
 
 namespace Hotline.Application.Exam.Service.ExamManages
 {
@@ -82,6 +87,23 @@ namespace Hotline.Application.Exam.Service.ExamManages
 
             return sourcewareCategoryViewResponses;
         }
+
+        /// <summary>
+        /// 删除考试标签
+        /// </summary>
+        /// <param name="entityQueryRequest"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        /// <exception cref="UserFriendlyException"></exception>
+        public override Task DeleteAsync(EntityQueryRequest entityQueryRequest, CancellationToken cancellationToken)
+        {
+            if (_repository.CheckHasChild(entityQueryRequest))
+            {
+                throw new UserFriendlyException(string.Format(ErrorMessage.HasChild, typeof(ExamTag).GetDescription()));
+            }
+
+            return base.DeleteAsync(entityQueryRequest, cancellationToken);
+        }
     }
 }
 

+ 22 - 0
src/Hotline.Application/Exam/Service/Sourcewares/SourcewareCategoryService.cs

@@ -1,7 +1,10 @@
 using Exam.Application.QueryExtensions.Sourcewares;
 using Exam.Infrastructure.Data.Entity;
+using Exam.Infrastructure.Extensions;
 using Exam.Insfrastructure.Service.Service;
 using Exam.Share.ViewResponses.Sourceware;
+using Hotline.Application.Exam.Constants.Messages;
+using Hotline.Application.Exam.Extensions;
 using Hotline.Exams.Sourcewares;
 using Hotline.Repository.SqlSugar;
 using Hotline.Repository.SqlSugar.Exam.Interfaces.Sourcewares;
@@ -10,6 +13,7 @@ using Hotline.Share.Requests.Sourceware;
 using Mapster;
 using System.ComponentModel;
 using XF.Domain.Dependency;
+using XF.Domain.Exceptions;
 
 namespace Exam.Application.Service.Sourcewares
 {
@@ -77,6 +81,24 @@ namespace Exam.Application.Service.Sourcewares
 
             return sourcewareCategoryViewResponses;
         }
+
+        /// <summary>
+        /// 删除课件分类
+        /// </summary>
+        /// <param name="entityQueryRequest"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public override Task DeleteAsync(EntityQueryRequest entityQueryRequest, CancellationToken cancellationToken)
+        {
+            //TODO 如果分类拥有下级分类怎么不能删除
+
+            if (_repository.CheckHasChild(entityQueryRequest))
+            {
+                throw new UserFriendlyException(string.Format(ErrorMessage.HasChild,typeof(SourcewareCategory).GetDescription()));
+            }
+
+            return base.DeleteAsync(entityQueryRequest, cancellationToken);
+        }
     }
 }
 

+ 1 - 1
src/Hotline.Application/Hotline.Application.csproj

@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <TargetFramework>net8.0</TargetFramework>
     <ImplicitUsings>enable</ImplicitUsings>

+ 9 - 0
src/Hotline/Exams/Base/IParentEntity.cs

@@ -0,0 +1,9 @@
+using XF.Domain.Entities;
+
+namespace Hotline.Exams.Base
+{
+    public interface IParentEntity
+    {
+        public string? ParentId { get; set; }
+    }
+}

+ 1 - 1
src/Hotline/Exams/ExamManages/ExamTag.cs

@@ -8,7 +8,7 @@ namespace Exam.ExamManages
     /// 考试标签
     /// </summary>
     [Description("考试标签")]
-    public class ExamTag:BusinessEntity
+    public class ExamTag:BusinessEntity, IParentEntity
     {
         /// <summary>
         /// 名称

+ 1 - 1
src/Hotline/Exams/Sourcewares/SourcewareCategory.cs

@@ -8,7 +8,7 @@ namespace Hotline.Exams.Sourcewares
     /// 课件类型
     /// </summary>
     [Description("课件类型")]
-    public class SourcewareCategory : BusinessEntity
+    public class SourcewareCategory : BusinessEntity, IParentEntity
     {
         /// <summary>
         /// 名称