From 9fd157a63dfbb8ee9f32fff7540c97eb4a3d3cce Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期五, 01 八月 2025 17:00:30 +0800
Subject: [PATCH] feat:菜单开发

---
 FlexJobApi.User.Application/Menus/Commands/MenuSaveCommandHandler.cs |   37 ++++++++++++++++++++++++++++---------
 1 files changed, 28 insertions(+), 9 deletions(-)

diff --git a/FlexJobApi.User.Application/Menus/Commands/MenuSaveCommandHandler.cs b/FlexJobApi.User.Application/Menus/Commands/MenuSaveCommandHandler.cs
index 480faa0..f7d5f52 100644
--- a/FlexJobApi.User.Application/Menus/Commands/MenuSaveCommandHandler.cs
+++ b/FlexJobApi.User.Application/Menus/Commands/MenuSaveCommandHandler.cs
@@ -15,16 +15,13 @@
     /// <summary>
     /// 淇濆瓨鑿滃崟
     /// </summary>
-    public class MenuSaveCommandHandler : IRequestHandler<MenuSaveCommand, Guid>
+    public class MenuSaveCommandHandler(
+        IRepository<Menu> menuRep)
+        : IRequestHandler<MenuSaveCommand, Guid>
     {
-        private readonly IRepository<Menu> menuRep;
+        private readonly IRepository<Menu> menuRep = menuRep;
 
-        public MenuSaveCommandHandler(
-            IRepository<Menu> menuRep)
-        {
-            this.menuRep = menuRep;
-        }
-
+        /// <inheritdoc/>
         public async Task<Guid> Handle(MenuSaveCommand request, CancellationToken cancellationToken)
         {
             var menu =
@@ -32,8 +29,30 @@
                 ? await menuRep.AsQueryable().FirstOrDefaultAsync(it => it.Id == request.Id, cancellationToken)
                 : new Menu();
             if (menu == null) throw Oops.Oh(EnumUserErrorCodeType.s100, "鑿滃崟");
-            menu.Adapt(request);
+
+            if (request.Id.HasValue && menu.Code != request.Code)
+            {
+                throw Oops.Oh(EnumUserErrorCodeType.s200, "缂栧彿涓嶅彲淇敼");
+            }
+
+            request.Adapt(menu);
+
+            if (menu.ParentId.HasValue)
+            {
+                menu.Path = await menuRep.AsQueryable().AsNoTracking().Where(it => it.Id == menu.ParentId).Select(it => it.Path).FirstOrDefaultAsync();
+                menu.Path = $"{menu.Path}/{menu.Code}";
+            }
+            else
+            {
+                menu.Path = "/";
+            }
+
+            var result = request.Id == null
+                ? await menuRep.InsertAsync(menu, cancellationToken: cancellationToken)
+                : await menuRep.UpdateAsync(menu);
+
             await menuRep.SaveNowAsync(cancellationToken);
+
             return menu.Id;
         }
     }

--
Gitblit v1.9.1