From a8b475881959d4a88d821951a615f03e7d0d1725 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期四, 07 八月 2025 13:28:30 +0800
Subject: [PATCH] feat:字典优化

---
 FlexJobApi.Application/Dictionaries/Commands/DictionaryDataCommandHandler.cs |   29 ++++++++++++++++++++++++-----
 1 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/FlexJobApi.Application/Dictionaries/Commands/DictionaryDataCommandHandler.cs b/FlexJobApi.Application/Dictionaries/Commands/DictionaryDataCommandHandler.cs
index f9c7a0b..0dce231 100644
--- a/FlexJobApi.Application/Dictionaries/Commands/DictionaryDataCommandHandler.cs
+++ b/FlexJobApi.Application/Dictionaries/Commands/DictionaryDataCommandHandler.cs
@@ -1,7 +1,9 @@
 锘縰sing FlexJobApi.Core;
 using Furion.DatabaseAccessor;
+using Furion.FriendlyException;
 using Mapster;
 using MediatR;
+using Microsoft.EntityFrameworkCore;
 using System;
 using System.Collections.Generic;
 using System.IO;
@@ -14,31 +16,48 @@
     /// <summary>
     /// 鏁版嵁瀛楀吀鍛戒护澶勭悊鍣�
     /// </summary>
-    public class DictionaryDataCommandHandler :
+    public class DictionaryDataCommandHandler(
+            IRepository<DictionaryData> rep,
+            IRepository<DictionaryCategory> repDictionaryCategory
+        ) :
         IRequestHandler<SaveDictionaryDataCommand, Guid>,
         IRequestHandler<SetDictionaryDataIsDisabledCommand, int>
 
     {
+        private readonly IRepository<DictionaryData> rep = rep;
+        private readonly IRepository<DictionaryCategory> repDictionaryCategory = repDictionaryCategory;
+
         /// <summary>
         /// 淇濆瓨鏁版嵁瀛楀吀
         /// </summary>
         /// <param name="request"></param>
         /// <param name="cancellationToken"></param>
         /// <returns></returns>
-        public Task<Guid> Handle(SaveDictionaryDataCommand request, CancellationToken cancellationToken)
+        public async Task<Guid> Handle(SaveDictionaryDataCommand request, CancellationToken cancellationToken)
         {
-            return request.SaveData<DictionaryData, SaveDictionaryDataCommand>(
+            var category = await repDictionaryCategory
+                .Where(it => it.Id == request.CategoryId || it.Code == request.CategoryCode)
+                .Select(it => new
+                {
+                    it.Id,
+                    it.Code
+                })
+                .FirstOrDefaultAsync();
+            if (category == null) throw Oops.Oh(EnumErrorCodeType.s404, "鏁版嵁瀛楀吀绫诲埆");
+            request.CategoryId = category.Id;
+            if (!request.Code.StartsWith($"{request.CategoryCode}-")) throw Oops.Oh(EnumErrorCodeType.s400, "缂栧彿寮�澶撮渶瑕佸寘鍚被鍒紪鍙�-");
+            return await request.SaveData<DictionaryData, SaveDictionaryDataCommand>(
+                null,
                 it =>
                     it.CategoryId == request.CategoryId
-                    && it.ParentId == request.ParentId
                     && it.Code == request.Code
-                    && it.Content == request.Content
                     && it.Id != request.Id,
                 (entity) =>
                 {
                     entity.Path = DbUtils.GetTreeDataPath<DictionaryData>(request.ParentId, cancellationToken).Result;
                     if (request.Id.HasValue)
                     {
+                        if (entity.Code != request.Code) throw Oops.Oh(EnumErrorCodeType.s400, "缂栧彿涓嶅彲淇敼");
                         DbUtils.UpdateTreeDataChildrenPath<DictionaryData>(
                            $"{entity.Path}/{entity.Code}/",
                            $"{entity.Path}/{request.Code}/",

--
Gitblit v1.9.1