using FlexJobApi.Core; using Furion.DatabaseAccessor; using Furion.FriendlyException; using Mapster; using MediatR; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.UserServer.Application { /// /// 保存菜单按钮 /// public class SaveMenuButtonCommandHandler( IRepository rep ) : IRequestHandler { private readonly IRepository rep = rep; /// public async Task Handle(SaveMenuButtonCommand request, CancellationToken cancellationToken) { var parent = await rep.FirstOrDefaultAsync(it => it.Id == request.ParentId); if (parent == null) throw Oops.Oh(EnumErrorCodeType.s404, "上级菜单"); var entity = await request.SaveData( null, it => it.ParentId == request.ParentId && it.Type == EnumMenuType.Button && it.Group == request.Group && it.Location == request.Location && it.Code == request.Code && it.Id != request.Id, (entity) => { if (request.Id.HasValue) { if (entity.ParentId != request.ParentId) throw Oops.Oh(EnumErrorCodeType.s410, "上级Id"); } else { entity.Path = $"{parent.Path}{parent.Code}/"; entity.Type = EnumMenuType.Button; entity.VisitLevel = parent.VisitLevel; } request.Adapt(entity); }, cancellationToken); return entity.Id; } } }