complete role and user actions
parent
40b9b42fbd
commit
28092b0d6b
|
@ -31,7 +31,7 @@ public class RoleController : ICarterModule
|
|||
group.MapPut("", Put)
|
||||
.HasApiVersion(1.0);
|
||||
|
||||
group.MapDelete("", Delete)
|
||||
group.MapDelete("{id}", Delete)
|
||||
.HasApiVersion(1.0);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,4 @@
|
|||
using Brizco.Core.EntityServices;
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
|
||||
namespace Brizco.Api.Controllers;
|
||||
namespace Brizco.Api.Controllers;
|
||||
|
||||
public class UserController : ICarterModule
|
||||
{
|
||||
|
@ -28,7 +25,7 @@ public class UserController : ICarterModule
|
|||
group.MapPut("", Put)
|
||||
.HasApiVersion(1.0);
|
||||
|
||||
group.MapDelete("", Delete)
|
||||
group.MapDelete("{id}", Delete)
|
||||
.HasApiVersion(1.0);
|
||||
}
|
||||
|
||||
|
|
|
@ -12,16 +12,19 @@ public class UserService : IUserService
|
|||
private readonly UserManager<ApplicationUser> _userManager;
|
||||
private readonly RoleManager<ApplicationRole> _roleManager;
|
||||
private readonly ISender _sender;
|
||||
private readonly IRepositoryWrapper _repositoryWrapper;
|
||||
|
||||
public UserService(ICurrentUserService currentUserService,
|
||||
UserManager<ApplicationUser> userManager,
|
||||
RoleManager<ApplicationRole> roleManager,
|
||||
ISender sender)
|
||||
ISender sender,
|
||||
IRepositoryWrapper repositoryWrapper)
|
||||
{
|
||||
_currentUserService = currentUserService;
|
||||
_userManager = userManager;
|
||||
_roleManager = roleManager;
|
||||
_sender = sender;
|
||||
_repositoryWrapper = repositoryWrapper;
|
||||
}
|
||||
|
||||
public async Task<List<ComplexUserSDto>> GetUsersAsync(int page = 0, CancellationToken cancellationToken = default)
|
||||
|
@ -30,13 +33,27 @@ public class UserService : IUserService
|
|||
throw new AppException("Wrong authorize token , ComplexId needed");
|
||||
if (!Guid.TryParse(_currentUserService.ComplexId, out Guid complexId))
|
||||
throw new AppException("Wrong authorize token , ComplexId needed");
|
||||
var complexUsers = await _sender.Send(new GetComplexUsersQuery(complexId.ToString(), page),cancellationToken);
|
||||
var complexUsers = await _sender.Send(new GetComplexUsersQuery(complexId.ToString(), page), cancellationToken);
|
||||
|
||||
return complexUsers;
|
||||
}
|
||||
|
||||
public async Task<ApplicationUserSDto> GetUserAsync(Guid userId)
|
||||
=> (await _userManager.FindByIdAsync(userId.ToString())).AdaptToSDto();
|
||||
{
|
||||
var user = await _userManager.FindByIdAsync(userId.ToString());
|
||||
if (user == null)
|
||||
throw new AppException("User not found", ApiResultStatusCode.NotFound);
|
||||
var dto = user.AdaptToSDto();
|
||||
var roles = await _userManager.GetRolesAsync(user);
|
||||
foreach (var roleName in roles)
|
||||
{
|
||||
var role = await _roleManager.FindByNameAsync(roleName);
|
||||
if (role != null)
|
||||
dto.RoleIds.Add(role.Id);
|
||||
}
|
||||
|
||||
return dto;
|
||||
}
|
||||
|
||||
public async Task<ApplicationUser> CreateUserAsync(string phoneNumber)
|
||||
{
|
||||
|
@ -66,7 +83,7 @@ public class UserService : IUserService
|
|||
FirstName = request.FirstName,
|
||||
LastName = request.LastName,
|
||||
NationalId = request.NationalId,
|
||||
BirthDate = request.BirthDate,
|
||||
BirthDate = DateTimeExtensions.UnixTimeStampToDateTime(request.BirthDateTimeStamp),
|
||||
Gender = request.Gender,
|
||||
SignUpStatus = SignUpStatus.SignUpCompleted
|
||||
};
|
||||
|
@ -74,13 +91,13 @@ public class UserService : IUserService
|
|||
{
|
||||
var result = await _userManager.CreateAsync(user, request.Password);
|
||||
if (!result.Succeeded)
|
||||
throw new AppException(string.Join('|', result.Errors));
|
||||
throw new AppException(string.Join('|', result.Errors.Select(e => e.Description)));
|
||||
}
|
||||
else
|
||||
{
|
||||
var result = await _userManager.CreateAsync(user);
|
||||
if (!result.Succeeded)
|
||||
throw new AppException(string.Join('|', result.Errors));
|
||||
throw new AppException(string.Join('|', result.Errors.Select(e => e.Description)));
|
||||
}
|
||||
|
||||
await _sender.Send(new CreateComplexUserCommand(complexId, user.Id, request.RoleIds), cancellationToken);
|
||||
|
@ -93,10 +110,10 @@ public class UserService : IUserService
|
|||
throw new AppException("Wrong authorize token , ComplexId needed");
|
||||
if (!Guid.TryParse(_currentUserService.ComplexId, out Guid complexId))
|
||||
throw new AppException("Wrong authorize token , ComplexId needed");
|
||||
if (_currentUserService.UserId == null)
|
||||
if (request.UserId == Guid.Empty)
|
||||
throw new AppException("Wrong authorize token , UserId needed");
|
||||
|
||||
var user = await _userManager.FindByIdAsync(_currentUserService.UserId);
|
||||
var user = await _userManager.FindByIdAsync(request.UserId.ToString());
|
||||
if (user == null)
|
||||
throw new AppException("User not found", ApiResultStatusCode.NotFound);
|
||||
user.LastName = request.LastName;
|
||||
|
@ -106,12 +123,12 @@ public class UserService : IUserService
|
|||
user.FirstName = request.FirstName;
|
||||
user.LastName = request.LastName;
|
||||
user.NationalId = request.NationalId;
|
||||
user.BirthDate = request.BirthDate;
|
||||
user.BirthDate = DateTimeExtensions.UnixTimeStampToDateTime(request.BirthDateTimeStamp);
|
||||
user.Gender = request.Gender;
|
||||
|
||||
var result = await _userManager.UpdateAsync(user);
|
||||
if (!result.Succeeded)
|
||||
throw new AppException(string.Join('|', result.Errors));
|
||||
throw new AppException(string.Join('|', result.Errors.Select(e => e.Description)));
|
||||
if (!request.Password.IsNullOrEmpty())
|
||||
{
|
||||
if (await _userManager.HasPasswordAsync(user))
|
||||
|
@ -119,7 +136,7 @@ public class UserService : IUserService
|
|||
|
||||
var addPassResult = await _userManager.AddPasswordAsync(user, request.Password);
|
||||
if (!addPassResult.Succeeded)
|
||||
throw new AppException(string.Join('|', addPassResult.Errors));
|
||||
throw new AppException(string.Join('|', addPassResult.Errors.Select(e => e.Description)));
|
||||
}
|
||||
|
||||
await _sender.Send(new UpdateComplexUserCommand(user.Id, complexId, request.RoleIds), cancellationToken);
|
||||
|
@ -141,12 +158,12 @@ public class UserService : IUserService
|
|||
user.FirstName = request.FirstName;
|
||||
user.LastName = request.LastName;
|
||||
user.NationalId = request.NationalId;
|
||||
user.BirthDate = request.BirthDate;
|
||||
user.BirthDate = DateTimeExtensions.UnixTimeStampToDateTime(request.BirthDateTimeStamp);
|
||||
user.Gender = request.Gender;
|
||||
|
||||
var result = await _userManager.UpdateAsync(user);
|
||||
if (!result.Succeeded)
|
||||
throw new AppException(string.Join('|', result.Errors));
|
||||
throw new AppException(string.Join('|', result.Errors.Select(e => e.Description)));
|
||||
if (!request.Password.IsNullOrEmpty())
|
||||
{
|
||||
if (await _userManager.HasPasswordAsync(user))
|
||||
|
@ -154,7 +171,7 @@ public class UserService : IUserService
|
|||
|
||||
var addPassResult = await _userManager.AddPasswordAsync(user, request.Password);
|
||||
if (!addPassResult.Succeeded)
|
||||
throw new AppException(string.Join('|', addPassResult.Errors));
|
||||
throw new AppException(string.Join('|', addPassResult.Errors.Select(e => e.Description)));
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -169,16 +186,18 @@ public class UserService : IUserService
|
|||
var user = await _userManager.FindByIdAsync(userId.ToString());
|
||||
if (user == null)
|
||||
throw new AppException("User not found", ApiResultStatusCode.NotFound);
|
||||
var roles = await _userManager.GetRolesAsync(user);
|
||||
await _userManager.RemoveFromRolesAsync(user, roles);
|
||||
await _sender.Send(new DeleteComplexUserCommand(userId, complexId), cancellationToken);
|
||||
var removeResult = await _userManager.DeleteAsync(user);
|
||||
if (!removeResult.Succeeded)
|
||||
throw new AppException(string.Join('|', removeResult.Errors));
|
||||
await _sender.Send(new DeleteComplexUserCommand(userId, complexId), cancellationToken);
|
||||
throw new AppException(string.Join('|', removeResult.Errors.Select(e => e.Description)));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public async Task<List<ApplicationRole>> GetRolesAsync(int page = 0,CancellationToken cancellationToken = default)
|
||||
public async Task<List<ApplicationRole>> GetRolesAsync(int page = 0, CancellationToken cancellationToken = default)
|
||||
{
|
||||
if (_currentUserService.ComplexId.IsNullOrEmpty())
|
||||
throw new AppException("Wrong authorize token , ComplexId needed");
|
||||
|
@ -186,7 +205,7 @@ public class UserService : IUserService
|
|||
throw new AppException("Wrong authorize token , ComplexId needed");
|
||||
|
||||
var roles = await _roleManager.Roles
|
||||
.Where(r=>r.ComplexId==complexId)
|
||||
.Where(r => r.ComplexId == complexId)
|
||||
.Skip(page * 15)
|
||||
.Take(15)
|
||||
.ToListAsync(cancellationToken);
|
||||
|
@ -197,9 +216,10 @@ public class UserService : IUserService
|
|||
{
|
||||
var role = (await _roleManager.FindByIdAsync(roleId.ToString()));
|
||||
if (role == null)
|
||||
throw new AppException("نقش پیدا نشد",ApiResultStatusCode.NotFound);
|
||||
throw new AppException("نقش پیدا نشد", ApiResultStatusCode.NotFound);
|
||||
|
||||
var roleDto = role.Adapt<RoleActionRequestDto>();
|
||||
roleDto.RoleId = roleId;
|
||||
roleDto.Permissions = (await _roleManager.GetClaimsAsync(role))
|
||||
.Where(c => c.Type == CustomClaimType.Permission)
|
||||
.Select(c => c.Value)
|
||||
|
@ -278,9 +298,28 @@ public class UserService : IUserService
|
|||
var applicationRole = await _roleManager.FindByIdAsync(roleId.ToString());
|
||||
if (applicationRole == null)
|
||||
throw new AppException("User not found", ApiResultStatusCode.NotFound);
|
||||
var claims = await _roleManager.GetClaimsAsync(applicationRole);
|
||||
foreach (var claim in claims)
|
||||
await _roleManager.RemoveClaimAsync(applicationRole, claim);
|
||||
var users = await _userManager.GetUsersInRoleAsync(applicationRole.Name);
|
||||
foreach (var user in users)
|
||||
await _userManager.RemoveFromRoleAsync(user, applicationRole.Name);
|
||||
|
||||
var complexRoles = await _repositoryWrapper.SetRepository<ComplexUserRole>()
|
||||
.TableNoTracking
|
||||
.Where(r => r.RoleId == applicationRole.Id)
|
||||
.ToListAsync();
|
||||
foreach (var complexRole in complexRoles)
|
||||
{
|
||||
_repositoryWrapper.SetRepository<ComplexUserRole>()
|
||||
.HardDelete(complexRole);
|
||||
await _repositoryWrapper.SaveChangesAsync(default);
|
||||
}
|
||||
|
||||
|
||||
var removeResult = await _roleManager.DeleteAsync(applicationRole);
|
||||
if (!removeResult.Succeeded)
|
||||
throw new AppException(string.Join('|', removeResult.Errors));
|
||||
throw new AppException(string.Join('|', removeResult.Errors.Select(e => e.Description)));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -48,6 +48,7 @@
|
|||
|
||||
|
||||
<ItemGroup>
|
||||
<Using Include="Brizco.Common.Extensions" />
|
||||
<Using Include="Brizco.Common.Models.Entity" />
|
||||
<Using Include="Brizco.Common.Models.Mapper" />
|
||||
<Using Include="Brizco.Domain.Dtos.LargDtos" />
|
||||
|
|
|
@ -2,10 +2,11 @@
|
|||
|
||||
public class UserActionRequestDto
|
||||
{
|
||||
public Guid UserId { get; set; }
|
||||
public string PhoneNumber { get; set; } = string.Empty;
|
||||
public string FirstName { get; set; } = string.Empty;
|
||||
public string LastName { get; set; } = string.Empty;
|
||||
public DateTime BirthDate { get; set; }
|
||||
public long BirthDateTimeStamp { get; set; }
|
||||
public Gender Gender { get; set; }
|
||||
public string NationalId { get; set; } = string.Empty;
|
||||
public string Password { get; set; } = string.Empty;
|
||||
|
|
|
@ -13,4 +13,7 @@ public class ApplicationUserSDto : BaseDto<ApplicationUserSDto,ApplicationUser>
|
|||
public string SelectedRoleName { get; set; } = string.Empty;
|
||||
public string SelectedComplexName { get; set; } = string.Empty;
|
||||
public string NationalId { get; set; } = string.Empty;
|
||||
|
||||
public List<Guid> RoleIds { get; set; } = new();
|
||||
public long BirthDateTimeStamp => DateTimeExtensions.DateTimeToUnixTimeStamp(BirthDate);
|
||||
}
|
|
@ -6,9 +6,9 @@ public class ComplexUserSDto : BaseDto<ComplexUserSDto,ComplexUser>
|
|||
{
|
||||
public string FirstName { get; set; } = string.Empty;
|
||||
public string LastName { get; set; } = string.Empty;
|
||||
public string InternationalId { get; set; } = string.Empty;
|
||||
public string NationalId { get; set; } = string.Empty;
|
||||
public string ComplexName { get; set; } = string.Empty;
|
||||
|
||||
public List<string> RoleNames { get; set; } = new();
|
||||
public Guid UserId { get; set; }
|
||||
public Guid ComplexId { get; set; }
|
||||
}
|
|
@ -5,6 +5,7 @@ using System.Linq.Expressions;
|
|||
using Brizco.Domain.Dtos.LargDtos;
|
||||
using Brizco.Domain.Dtos.SmallDtos;
|
||||
using Brizco.Domain.Entities.Complex;
|
||||
using Brizco.Domain.Entities.User;
|
||||
|
||||
namespace Brizco.Domain.Mappers
|
||||
{
|
||||
|
@ -110,6 +111,12 @@ namespace Brizco.Domain.Mappers
|
|||
{
|
||||
UserId = p16.UserId,
|
||||
ComplexId = p16.ComplexId,
|
||||
User = new ApplicationUser() {Id = p16.UserId},
|
||||
Complex = new Complex()
|
||||
{
|
||||
Name = p16.ComplexName,
|
||||
Id = p16.ComplexId
|
||||
},
|
||||
Id = p16.Id
|
||||
}).ToList<ComplexUser>(),
|
||||
Id = p15.Id
|
||||
|
@ -148,6 +155,10 @@ namespace Brizco.Domain.Mappers
|
|||
SupportPhone = p23.SupportPhone,
|
||||
Users = p23.Users.Select<ComplexUser, ComplexUserSDto>(p24 => new ComplexUserSDto()
|
||||
{
|
||||
FirstName = p24.User != null ? p24.User.FirstName : string.Empty,
|
||||
LastName = p24.User != null ? p24.User.LastName : string.Empty,
|
||||
NationalId = p24.User != null ? p24.User.NationalId : string.Empty,
|
||||
ComplexName = p24.Complex != null ? p24.Complex.Name : string.Empty,
|
||||
UserId = p24.UserId,
|
||||
ComplexId = p24.ComplexId,
|
||||
Id = p24.Id
|
||||
|
@ -173,6 +184,12 @@ namespace Brizco.Domain.Mappers
|
|||
{
|
||||
UserId = item.UserId,
|
||||
ComplexId = item.ComplexId,
|
||||
User = new ApplicationUser() {Id = item.UserId},
|
||||
Complex = new Complex()
|
||||
{
|
||||
Name = item.ComplexName,
|
||||
Id = item.ComplexId
|
||||
},
|
||||
Id = item.Id
|
||||
});
|
||||
i++;
|
||||
|
@ -199,6 +216,12 @@ namespace Brizco.Domain.Mappers
|
|||
{
|
||||
UserId = item.UserId,
|
||||
ComplexId = item.ComplexId,
|
||||
User = new ApplicationUser() {Id = item.UserId},
|
||||
Complex = new Complex()
|
||||
{
|
||||
Name = item.ComplexName,
|
||||
Id = item.ComplexId
|
||||
},
|
||||
Id = item.Id
|
||||
});
|
||||
i++;
|
||||
|
@ -223,6 +246,10 @@ namespace Brizco.Domain.Mappers
|
|||
ComplexUser item = p18[i];
|
||||
result.Add(item == null ? null : new ComplexUserSDto()
|
||||
{
|
||||
FirstName = item.User != null ? item.User.FirstName : string.Empty,
|
||||
LastName = item.User != null ? item.User.LastName : string.Empty,
|
||||
NationalId = item.User != null ? item.User.NationalId : string.Empty,
|
||||
ComplexName = item.Complex != null ? item.Complex.Name : string.Empty,
|
||||
UserId = item.UserId,
|
||||
ComplexId = item.ComplexId,
|
||||
Id = item.Id
|
||||
|
@ -249,6 +276,10 @@ namespace Brizco.Domain.Mappers
|
|||
ComplexUser item = p21[i];
|
||||
result.Add(item == null ? null : new ComplexUserSDto()
|
||||
{
|
||||
FirstName = item.User != null ? item.User.FirstName : string.Empty,
|
||||
LastName = item.User != null ? item.User.LastName : string.Empty,
|
||||
NationalId = item.User != null ? item.User.NationalId : string.Empty,
|
||||
ComplexName = item.Complex != null ? item.Complex.Name : string.Empty,
|
||||
UserId = item.UserId,
|
||||
ComplexId = item.ComplexId,
|
||||
Id = item.Id
|
||||
|
|
|
@ -2,6 +2,8 @@ using System;
|
|||
using System.Linq.Expressions;
|
||||
using Brizco.Domain.Dtos.SmallDtos;
|
||||
using Brizco.Domain.Entities.Complex;
|
||||
using Brizco.Domain.Entities.User;
|
||||
using Mapster.Models;
|
||||
|
||||
namespace Brizco.Domain.Mappers
|
||||
{
|
||||
|
@ -13,6 +15,12 @@ namespace Brizco.Domain.Mappers
|
|||
{
|
||||
UserId = p1.UserId,
|
||||
ComplexId = p1.ComplexId,
|
||||
User = new ApplicationUser() {Id = p1.UserId},
|
||||
Complex = new Complex()
|
||||
{
|
||||
Name = p1.ComplexName,
|
||||
Id = p1.ComplexId
|
||||
},
|
||||
Id = p1.Id
|
||||
};
|
||||
}
|
||||
|
@ -26,44 +34,83 @@ namespace Brizco.Domain.Mappers
|
|||
|
||||
result.UserId = p2.UserId;
|
||||
result.ComplexId = p2.ComplexId;
|
||||
result.User = funcMain1(new Never(), result.User, p2);
|
||||
result.Complex = funcMain2(new Never(), result.Complex, p2);
|
||||
result.Id = p2.Id;
|
||||
return result;
|
||||
|
||||
}
|
||||
public static Expression<Func<ComplexUserSDto, ComplexUser>> ProjectToComplexUser => p4 => new ComplexUser()
|
||||
{
|
||||
UserId = p4.UserId,
|
||||
ComplexId = p4.ComplexId,
|
||||
Id = p4.Id
|
||||
};
|
||||
public static ComplexUserSDto AdaptToSDto(this ComplexUser p5)
|
||||
{
|
||||
return p5 == null ? null : new ComplexUserSDto()
|
||||
{
|
||||
UserId = p5.UserId,
|
||||
ComplexId = p5.ComplexId,
|
||||
Id = p5.Id
|
||||
};
|
||||
}
|
||||
public static ComplexUserSDto AdaptTo(this ComplexUser p6, ComplexUserSDto p7)
|
||||
{
|
||||
if (p6 == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
ComplexUserSDto result = p7 ?? new ComplexUserSDto();
|
||||
|
||||
result.UserId = p6.UserId;
|
||||
result.ComplexId = p6.ComplexId;
|
||||
result.Id = p6.Id;
|
||||
return result;
|
||||
|
||||
}
|
||||
public static Expression<Func<ComplexUser, ComplexUserSDto>> ProjectToSDto => p8 => new ComplexUserSDto()
|
||||
public static Expression<Func<ComplexUserSDto, ComplexUser>> ProjectToComplexUser => p8 => new ComplexUser()
|
||||
{
|
||||
UserId = p8.UserId,
|
||||
ComplexId = p8.ComplexId,
|
||||
User = new ApplicationUser() {Id = p8.UserId},
|
||||
Complex = new Complex()
|
||||
{
|
||||
Name = p8.ComplexName,
|
||||
Id = p8.ComplexId
|
||||
},
|
||||
Id = p8.Id
|
||||
};
|
||||
public static ComplexUserSDto AdaptToSDto(this ComplexUser p9)
|
||||
{
|
||||
return p9 == null ? null : new ComplexUserSDto()
|
||||
{
|
||||
FirstName = p9.User != null ? p9.User.FirstName : string.Empty,
|
||||
LastName = p9.User != null ? p9.User.LastName : string.Empty,
|
||||
NationalId = p9.User != null ? p9.User.NationalId : string.Empty,
|
||||
ComplexName = p9.Complex != null ? p9.Complex.Name : string.Empty,
|
||||
UserId = p9.UserId,
|
||||
ComplexId = p9.ComplexId,
|
||||
Id = p9.Id
|
||||
};
|
||||
}
|
||||
public static ComplexUserSDto AdaptTo(this ComplexUser p10, ComplexUserSDto p11)
|
||||
{
|
||||
if (p10 == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
ComplexUserSDto result = p11 ?? new ComplexUserSDto();
|
||||
|
||||
result.FirstName = p10.User != null ? p10.User.FirstName : string.Empty;
|
||||
result.LastName = p10.User != null ? p10.User.LastName : string.Empty;
|
||||
result.NationalId = p10.User != null ? p10.User.NationalId : string.Empty;
|
||||
result.ComplexName = p10.Complex != null ? p10.Complex.Name : string.Empty;
|
||||
result.UserId = p10.UserId;
|
||||
result.ComplexId = p10.ComplexId;
|
||||
result.Id = p10.Id;
|
||||
return result;
|
||||
|
||||
}
|
||||
public static Expression<Func<ComplexUser, ComplexUserSDto>> ProjectToSDto => p12 => new ComplexUserSDto()
|
||||
{
|
||||
FirstName = p12.User != null ? p12.User.FirstName : string.Empty,
|
||||
LastName = p12.User != null ? p12.User.LastName : string.Empty,
|
||||
NationalId = p12.User != null ? p12.User.NationalId : string.Empty,
|
||||
ComplexName = p12.Complex != null ? p12.Complex.Name : string.Empty,
|
||||
UserId = p12.UserId,
|
||||
ComplexId = p12.ComplexId,
|
||||
Id = p12.Id
|
||||
};
|
||||
|
||||
private static ApplicationUser funcMain1(Never p4, ApplicationUser p5, ComplexUserSDto p2)
|
||||
{
|
||||
ApplicationUser result = p5 ?? new ApplicationUser();
|
||||
|
||||
result.Id = p2.UserId;
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
private static Complex funcMain2(Never p6, Complex p7, ComplexUserSDto p2)
|
||||
{
|
||||
Complex result = p7 ?? new Complex();
|
||||
|
||||
result.Name = p2.ComplexName;
|
||||
result.Id = p2.ComplexId;
|
||||
return result;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -13,10 +13,10 @@ public class MapsterRegister : IRegister
|
|||
.TwoWays();
|
||||
|
||||
config.NewConfig<ComplexUser, ComplexUserSDto>()
|
||||
.Map(s=>s.ComplexName,o=>o.Complex!=null ? o.Complex.Name : string.Empty)
|
||||
.Map(s=>s.FirstName,o=>o.User!=null ? o.User.FirstName : string.Empty)
|
||||
.Map(s=>s.LastName,o=>o.User!=null ? o.User.LastName : string.Empty)
|
||||
.Map(s=>s.InternationalId,o=>o.User!=null ? o.User.NationalId : string.Empty)
|
||||
.Map("ComplexName", o=>o.Complex!=null ? o.Complex.Name : string.Empty)
|
||||
.Map("FirstName", o=>o.User!=null ? o.User.FirstName : string.Empty)
|
||||
.Map("LastName", o=>o.User!=null ? o.User.LastName : string.Empty)
|
||||
.Map("NationalId", o=>o.User!=null ? o.User.NationalId : string.Empty)
|
||||
.TwoWays();
|
||||
}
|
||||
}
|
|
@ -21,8 +21,14 @@ public class DeleteComplexUserCommandHandler : IRequestHandler<DeleteComplexUser
|
|||
.FirstOrDefaultAsync(c => c.ComplexId == request.ComplexId && c.UserId == request.UserId, cancellationToken);
|
||||
if (complexUser == null)
|
||||
throw new AppException("ComplexUser not found", ApiResultStatusCode.NotFound);
|
||||
var complexUserRoles = await _repositoryWrapper.SetRepository<ComplexUserRole>().TableNoTracking
|
||||
.Where(c => c.ComplexUserId == complexUser.Id)
|
||||
.ToListAsync(cancellationToken);
|
||||
foreach (var complexUserRole in complexUserRoles)
|
||||
_repositoryWrapper.SetRepository<ComplexUserRole>().HardDelete(complexUserRole);
|
||||
await _repositoryWrapper.SaveChangesAsync(cancellationToken);
|
||||
|
||||
_repositoryWrapper.SetRepository<ComplexUser>().Delete(complexUser);
|
||||
_repositoryWrapper.SetRepository<ComplexUser>().HardDelete(complexUser);
|
||||
await _repositoryWrapper.SaveChangesAsync(cancellationToken);
|
||||
await _repositoryWrapper.CommitAsync(cancellationToken);
|
||||
return true;
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
using Brizco.Domain.Entities.Complex;
|
||||
using Brizco.Domain.Entities.User;
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
|
||||
namespace Brizco.Repository.Handlers.Complex;
|
||||
|
@ -6,27 +7,54 @@ namespace Brizco.Repository.Handlers.Complex;
|
|||
public class GetComplexUsersQueryHandler : IRequestHandler<GetComplexUsersQuery, List<ComplexUserSDto>>
|
||||
{
|
||||
private readonly IRepositoryWrapper _repositoryWrapper;
|
||||
private readonly UserManager<ApplicationUser> _userManager;
|
||||
private readonly RoleManager<ApplicationRole> _roleManager;
|
||||
|
||||
public GetComplexUsersQueryHandler(IRepositoryWrapper repositoryWrapper)
|
||||
public GetComplexUsersQueryHandler(IRepositoryWrapper repositoryWrapper, UserManager<ApplicationUser> userManager, RoleManager<ApplicationRole> roleManager)
|
||||
{
|
||||
_repositoryWrapper = repositoryWrapper;
|
||||
_userManager = userManager;
|
||||
_roleManager = roleManager;
|
||||
}
|
||||
public async Task<List<ComplexUserSDto>> Handle(GetComplexUsersQuery request, CancellationToken cancellationToken)
|
||||
{
|
||||
List<ComplexUserSDto> list = new List<ComplexUserSDto>();
|
||||
if (!request.ComplexId.IsNullOrEmpty() && Guid.TryParse(request.ComplexId, out Guid complexId))
|
||||
return await _repositoryWrapper.SetRepository<ComplexUser>().TableNoTracking
|
||||
{
|
||||
list = await _repositoryWrapper.SetRepository<ComplexUser>().TableNoTracking
|
||||
.Where(c => c.ComplexId == complexId)
|
||||
.OrderByDescending(s => s.CreatedAt)
|
||||
.Skip(request.Page * 15).Take(15)
|
||||
.Select(ComplexUserMapper.ProjectToSDto)
|
||||
.ToListAsync(cancellationToken);
|
||||
}
|
||||
else
|
||||
{
|
||||
list = await _repositoryWrapper.SetRepository<ComplexUser>().TableNoTracking
|
||||
.OrderByDescending(s => s.CreatedAt)
|
||||
.Skip(request.Page * 15).Take(15)
|
||||
.Select(ComplexUserMapper.ProjectToSDto)
|
||||
.ToListAsync(cancellationToken);
|
||||
}
|
||||
|
||||
|
||||
return await _repositoryWrapper.SetRepository<ComplexUser>().TableNoTracking
|
||||
.OrderByDescending(s => s.CreatedAt)
|
||||
.Skip(request.Page * 15).Take(15)
|
||||
.Select(ComplexUserMapper.ProjectToSDto)
|
||||
.ToListAsync(cancellationToken);
|
||||
|
||||
foreach (var complexUser in list)
|
||||
{
|
||||
var user = await _userManager.FindByIdAsync(complexUser.UserId.ToString());
|
||||
if (user != null)
|
||||
{
|
||||
var roleIds = await _userManager.GetRolesAsync(user);
|
||||
foreach (var roleId in roleIds)
|
||||
{
|
||||
var role = await _roleManager.FindByNameAsync(roleId);
|
||||
if(role!= null)
|
||||
complexUser.RoleNames.Add(role.PersianName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
|
||||
}
|
||||
}
|
|
@ -4,9 +4,11 @@ namespace Brizco.Repository.Repositories.Base
|
|||
{
|
||||
public class BaseRepository<T> : Repository<T>, IBaseRepository<T> where T : class, IApiEntity
|
||||
{
|
||||
public BaseRepository(ApplicationContext dbContext) : base(dbContext)
|
||||
{
|
||||
private readonly ICurrentUserService _currentUserService;
|
||||
|
||||
public BaseRepository(ApplicationContext dbContext, ICurrentUserService currentUserService) : base(dbContext)
|
||||
{
|
||||
_currentUserService = currentUserService;
|
||||
}
|
||||
|
||||
public virtual async ValueTask<T> GetByIdAsync(CancellationToken cancellationToken, params object[] ids)
|
||||
|
@ -57,13 +59,32 @@ namespace Brizco.Repository.Repositories.Base
|
|||
public virtual void Delete(T entity)
|
||||
{
|
||||
AssertExtensions.NotNull(entity, nameof(entity));
|
||||
Entities.Remove(entity);
|
||||
|
||||
Entities.Entry(entity).Property(e => e.RemovedAt)
|
||||
.CurrentValue = DateTime.Now;
|
||||
Entities.Entry(entity).Property(e => e.IsRemoved)
|
||||
.CurrentValue = true;
|
||||
if (_currentUserService.UserName != null)
|
||||
Entities.Entry(entity).Property(e => e.RemovedBy)
|
||||
.CurrentValue = _currentUserService.UserName;
|
||||
Entities.Update(entity);
|
||||
}
|
||||
|
||||
public virtual void DeleteRange(IEnumerable<T> entities)
|
||||
{
|
||||
AssertExtensions.NotNull(entities, nameof(entities));
|
||||
Entities.RemoveRange(entities);
|
||||
var apiEntities = entities.ToList();
|
||||
AssertExtensions.NotNull(apiEntities, nameof(entities));
|
||||
foreach (var entity in apiEntities)
|
||||
{
|
||||
Entities.Entry(entity).Property(e => e.RemovedAt)
|
||||
.CurrentValue = DateTime.Now;
|
||||
Entities.Entry(entity).Property(e => e.IsRemoved)
|
||||
.CurrentValue = true;
|
||||
if (_currentUserService.UserName != null)
|
||||
Entities.Entry(entity).Property(e => e.RemovedBy)
|
||||
.CurrentValue = _currentUserService.UserName;
|
||||
Entities.Update(entity);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
|
@ -1,17 +1,18 @@
|
|||
using Microsoft.EntityFrameworkCore.ChangeTracking;
|
||||
using Microsoft.EntityFrameworkCore.Storage;
|
||||
using Microsoft.EntityFrameworkCore.Storage;
|
||||
|
||||
namespace Brizco.Repository.Repositories.Base;
|
||||
public class RepositoryWrapper : IRepositoryWrapper
|
||||
{
|
||||
private readonly ApplicationContext _context;
|
||||
private readonly ICurrentUserService _currentUserService;
|
||||
private IDbContextTransaction? _currentTransaction;
|
||||
public RepositoryWrapper(ApplicationContext context)
|
||||
public RepositoryWrapper(ApplicationContext context, ICurrentUserService currentUserService)
|
||||
{
|
||||
_context = context;
|
||||
_currentUserService = currentUserService;
|
||||
}
|
||||
|
||||
public IBaseRepository<T> SetRepository<T>() where T : ApiEntity => new BaseRepository<T>(_context);
|
||||
public IBaseRepository<T> SetRepository<T>() where T : ApiEntity => new BaseRepository<T>(_context, _currentUserService);
|
||||
|
||||
|
||||
public async Task RollBackAsync(CancellationToken cancellationToken)
|
||||
|
@ -51,14 +52,9 @@ public class RepositoryWrapper : IRepositoryWrapper
|
|||
{
|
||||
entity.Property(e => e.ModifiedAt)
|
||||
.CurrentValue = DateTime.Now;
|
||||
}
|
||||
|
||||
if (entity.State == EntityState.Deleted)
|
||||
{
|
||||
entity.Property(e => e.RemovedAt)
|
||||
.CurrentValue = DateTime.Now;
|
||||
entity.Property(e => e.IsRemoved)
|
||||
.CurrentValue = true;
|
||||
if (_currentUserService.UserName != null)
|
||||
entity.Property(e => e.ModifiedBy)
|
||||
.CurrentValue = _currentUserService.UserName;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,10 +1,15 @@
|
|||
|
||||
using Brizco.Repository.Abstracts;
|
||||
|
||||
namespace Brizco.Repository.Repositories.Base
|
||||
{
|
||||
public class WriteRepository<T> : Repository<T>, IDisposable, IWriteRepository<T> where T : class, IApiEntity
|
||||
{
|
||||
public WriteRepository(ApplicationContext dbContext) : base(dbContext)
|
||||
private readonly ICurrentUserService _currentUserService;
|
||||
|
||||
public WriteRepository(ApplicationContext dbContext,ICurrentUserService currentUserService) : base(dbContext)
|
||||
{
|
||||
_currentUserService = currentUserService;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
|
@ -46,13 +51,32 @@ namespace Brizco.Repository.Repositories.Base
|
|||
public virtual void Delete(T entity)
|
||||
{
|
||||
AssertExtensions.NotNull(entity, nameof(entity));
|
||||
Entities.Remove(entity);
|
||||
|
||||
Entities.Entry(entity).Property(e => e.RemovedAt)
|
||||
.CurrentValue = DateTime.Now;
|
||||
Entities.Entry(entity).Property(e => e.IsRemoved)
|
||||
.CurrentValue = true;
|
||||
if (_currentUserService.UserName != null)
|
||||
Entities.Entry(entity).Property(e => e.RemovedBy)
|
||||
.CurrentValue = _currentUserService.UserName;
|
||||
Entities.Update(entity);
|
||||
}
|
||||
|
||||
public virtual void DeleteRange(IEnumerable<T> entities)
|
||||
{
|
||||
AssertExtensions.NotNull(entities, nameof(entities));
|
||||
Entities.RemoveRange(entities);
|
||||
var apiEntities = entities.ToList();
|
||||
AssertExtensions.NotNull(apiEntities, nameof(entities));
|
||||
foreach (var entity in apiEntities)
|
||||
{
|
||||
Entities.Entry(entity).Property(e => e.RemovedAt)
|
||||
.CurrentValue = DateTime.Now;
|
||||
Entities.Entry(entity).Property(e => e.IsRemoved)
|
||||
.CurrentValue = true;
|
||||
if (_currentUserService.UserName != null)
|
||||
Entities.Entry(entity).Property(e => e.RemovedBy)
|
||||
.CurrentValue = _currentUserService.UserName;
|
||||
Entities.Update(entity);
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void Detach(T entity)
|
||||
|
|
Loading…
Reference in New Issue