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;
}
}
}
}