using LFlow.Base.Interfaces;
using LFlow.Base.Utils;
using LFlow.Cache.Interface;
using LFlow.Permission.Service;
using LFlow.Role.Model;
using Mapster;
namespace LFlow.Role.Service
{
///
/// 角色服务
///
public class RoleService(IRepo repo, IPermissionService permissionService, ISelfCache cacher) : IRoleService
{
///
/// 添加角色
///
///
///
public Task AddRoleAsync(RoleDto model)
{
var savedRole = repo.SaveOrUpdate(model.Adapt(), isUpdate: false);
if (savedRole == null)
{
throw new InvalidOperationException("Failed to save or update the role.");
}
var roleDto = savedRole.MapTo();
if (roleDto == null)
{
throw new InvalidOperationException("Failed to map the saved role to RoleDto.");
}
return Task.FromResult(roleDto);
}
///
/// 删除角色并清理缓存
///
///
///
public Task DeleteRoleAsync(string id)
{
cacher.RemoveAsync(id);
return Task.FromResult(repo.DeleteById(id));
}
public async Task GetRolePerminssionListAsync(string roleId)
{
var roleDto = GetRoleAsync(roleId).Result;
if (roleDto == null)
{
return new RoleDto();
}
var permissions = await permissionService.GetProgPerminssionListAsync(roleId);
if (permissions != null && permissions.Count >= 0)
{
roleDto.Permissions = permissions!;
return roleDto;
}
else
{
return new RoleDto();
}
}
///
/// 根据ID获取角色
///
///
///
public async Task GetRoleAsync(string id)
{
var cachedRole = await cacher.GetAsync(id);
if (cachedRole != null)
{
return cachedRole;
}
var role = await Task.FromResult(repo.Get(id));
if (role != null)
{
await cacher.SetAsync(id, role);
}
return role?.MapTo() ?? new RoleDto();
}
///
/// 获取角色列表
///
///
///
///
///
public Task> GetRoleListAsync(int pageIndex, int pageSize, ref int total)
{
var roleModels = repo.GetAll(pageIndex, pageSize, ref total);
var roleDtos = roleModels?.Select(role => role.MapTo()).ToList() ?? [];
return Task.FromResult(roleDtos ?? [])!;
}
public Task UpdateRoleAsync(RoleDto model)
{
throw new NotImplementedException();
}
}
}