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.User.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, "上级菜单"); if (request.Id.HasValue) { var entity = await rep.FirstOrDefaultAsync(it => it.Id == request.Id); if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "该菜单"); if (entity.ParentId != request.ParentId) throw Oops.Oh(EnumErrorCodeType.s410, "上级Id"); request.Adapt(entity); if (await CheckExist(entity)) throw Oops.Oh(EnumErrorCodeType.s406, "菜单编号"); await rep.UpdateAsync(entity); return entity.Id; } else { var entity = new Menu(); entity.Path = $"{parent.Path}{parent.Code}/"; entity.Type = EnumMenuType.Button; entity.VisitLevel = parent.VisitLevel; request.Adapt(entity); if (await CheckExist(entity)) throw Oops.Oh(EnumErrorCodeType.s406, "菜单编号"); await rep.InsertAsync(entity); return entity.Id; } } /// /// 校验菜单是否重复 /// /// /// private async Task CheckExist(Menu entity) { return await rep.AsQueryable().AsNoTracking() .AnyAsync(it => it.ParentId == entity.ParentId && it.Type == entity.Type && it.Group == entity.Group && it.Location == entity.Location && it.Code == entity.Code && it.Id != entity.Id); } } }