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 SaveRoleCommandHandler( IRepository rep ) : IRequestHandler { private readonly IRepository rep = rep; /// public async Task Handle(SaveRoleCommand request, CancellationToken cancellationToken) { if (request.Id.HasValue) { var entity = await rep.AsQueryable() .Include(it => it.RoleMenus) .Include(it => it.RoleResources) .FirstOrDefaultAsync(it => it.Id == request.Id, cancellationToken); if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "角色"); request.Adapt(entity); await rep.UpdateAsync(entity); return entity.Id; } else { var entity = new Role(); request.Adapt(entity); entity.RoleMenus = request.MenuIds .Select(it => new RoleMenu { MenuId = it }) .ToList(); entity.RoleResources = request.Resources .Select(it => new RoleResource { ResourceId = it.ResourceId, DataPower = it.DataPower }) .ToList(); await rep.InsertAsync(entity); return entity.Id; } } } }