diff --git a/Models/Dtos/CreateUserDto.cs b/Models/Dtos/CreateUserDto.cs index bd72216..07963f2 100644 --- a/Models/Dtos/CreateUserDto.cs +++ b/Models/Dtos/CreateUserDto.cs @@ -14,7 +14,7 @@ public class CreateUserDto [Required] public string RealName { get; set; } = string.Empty; - public string? Phone { get; set; } + public string? PhoneNumber { get; set; } public long? TenantId { get; set; } diff --git a/Models/Dtos/RoleDto.cs b/Models/Dtos/RoleDto.cs index 75f40d3..04f829d 100644 --- a/Models/Dtos/RoleDto.cs +++ b/Models/Dtos/RoleDto.cs @@ -10,5 +10,5 @@ public class RoleDto public bool IsSystem { get; set; } public List? Permissions { get; set; } public int UserCount { get; set; } - public DateTime CreatedAt { get; set; } + public DateTimeOffset CreatedAt { get; set; } } diff --git a/Models/Dtos/UpdateUserDto.cs b/Models/Dtos/UpdateUserDto.cs index e08dbca..087a3dc 100644 --- a/Models/Dtos/UpdateUserDto.cs +++ b/Models/Dtos/UpdateUserDto.cs @@ -11,7 +11,7 @@ public class UpdateUserDto [Required] public string RealName { get; set; } = string.Empty; - public string? Phone { get; set; } + public string? PhoneNumber { get; set; } public bool EmailConfirmed { get; set; } diff --git a/Models/Dtos/UserDto.cs b/Models/Dtos/UserDto.cs index ec15a96..dda5605 100644 --- a/Models/Dtos/UserDto.cs +++ b/Models/Dtos/UserDto.cs @@ -6,11 +6,11 @@ public class UserDto public string? UserName { get; set; } public string? Email { get; set; } public string? RealName { get; set; } - public string? Phone { get; set; } - public string TenantCode { get; set; } = ""; - public string TenantName { get; set; } = ""; + public string? PhoneNumber { get; set; } + public string? TenantCode { get; set; } = ""; + public string? TenantName { get; set; } = ""; public List Roles { get; set; } = new(); public bool EmailConfirmed { get; set; } public bool IsActive { get; set; } - public DateTime CreatedAt { get; set; } + public DateTimeOffset CreatedAt { get; set; } } diff --git a/Services/RoleService.cs b/Services/RoleService.cs index 6108519..1ced8e8 100644 --- a/Services/RoleService.cs +++ b/Services/RoleService.cs @@ -120,14 +120,14 @@ public class RoleService : IRoleService foreach (var user in users) { var roles = await _userManager.GetRolesAsync(user); - var tenant = user.TenantInfo.TenantId > 0 ? await _tenantManager.FindByIdAsync(user.TenantInfo.TenantId) : null; + var tenant = user.TenantInfo?.TenantId > 0 ? await _tenantManager.FindByIdAsync(user.TenantInfo.TenantId) : null; userDtos.Add(new UserDto { Id = user.Id, UserName = user.UserName, Email = user.Email, RealName = user.RealName, - TenantCode = user.TenantInfo.TenantId.ToString(), + TenantCode = user.TenantInfo?.TenantCode, TenantName = tenant?.Name ?? "", Roles = roles.ToList(), EmailConfirmed = user.EmailConfirmed, diff --git a/Services/TenantService.cs b/Services/TenantService.cs index 9dfe176..c284ccb 100644 --- a/Services/TenantService.cs +++ b/Services/TenantService.cs @@ -93,7 +93,7 @@ public class TenantService( } var users = await context.Users - .Where(u => u.TenantInfo.TenantId == tenantId) + .Where(u => u.TenantInfo!.TenantId == tenantId) .ToListAsync(); var userDtos = new List(); diff --git a/Services/UserService.cs b/Services/UserService.cs index e6bb793..1ab137b 100644 --- a/Services/UserService.cs +++ b/Services/UserService.cs @@ -11,7 +11,9 @@ namespace Fengling.Console.Services; public interface IUserService { - Task<(IEnumerable Items, int TotalCount)> GetUsersAsync(int page, int pageSize, string? userName = null, string? email = null, string? tenantId = null); + Task<(IEnumerable Items, int TotalCount)> GetUsersAsync(int page, int pageSize, string? userName = null, + string? email = null, string? tenantCode = null); + Task GetUserAsync(long id); Task CreateUserAsync(CreateUserDto dto); Task UpdateUserAsync(long id, UpdateUserDto dto); @@ -27,7 +29,9 @@ public class UserService( IHttpContextAccessor httpContextAccessor) : IUserService { - public async Task<(IEnumerable Items, int TotalCount)> GetUsersAsync(int page, int pageSize, string? userName = null, string? email = null, string? tenantId = null) + public async Task<(IEnumerable Items, int TotalCount)> GetUsersAsync(int page, int pageSize, + string? userName = null, string? email = null, + string? tenantCode = null) { var query = context.Users.AsQueryable(); @@ -41,9 +45,11 @@ public class UserService( query = query.Where(u => u.Email != null && u.Email.Contains(email)); } - if (!string.IsNullOrEmpty(tenantId)) + if (!string.IsNullOrEmpty(tenantCode)) { - query = query.Where(u => u.TenantInfo.TenantId.ToString().Contains(tenantId)); + query = query.Where(u => u.TenantInfo != null && + u.TenantInfo.TenantCode != null && + u.TenantInfo.TenantCode.Contains(tenantCode)); } var totalCount = await query.CountAsync(); @@ -57,15 +63,17 @@ public class UserService( foreach (var user in users) { var roles = await userManager.GetRolesAsync(user); - var tenant = user.TenantInfo.TenantId > 0 ? await tenantManager.FindByIdAsync(user.TenantInfo.TenantId) : null; + var tenant = user.TenantInfo?.TenantId > 0 + ? await tenantManager.FindByIdAsync(user.TenantInfo.TenantId) + : null; userDtos.Add(new UserDto { Id = user.Id, UserName = user.UserName, Email = user.Email, RealName = user.RealName, - Phone = user.Phone, - TenantCode = user.TenantInfo.TenantId.ToString(), + PhoneNumber = user.PhoneNumber, + TenantCode = user.TenantInfo?.TenantCode, TenantName = tenant?.Name ?? "", Roles = roles.ToList(), EmailConfirmed = user.EmailConfirmed, @@ -83,15 +91,15 @@ public class UserService( if (user == null) return null; var roles = await userManager.GetRolesAsync(user); - var tenant = user.TenantInfo.TenantId > 0 ? await tenantManager.FindByIdAsync(user.TenantInfo.TenantId) : null; + var tenant = user.TenantInfo?.TenantId > 0 ? await tenantManager.FindByIdAsync(user.TenantInfo.TenantId) : null; return new UserDto { Id = user.Id, UserName = user.UserName, Email = user.Email, RealName = user.RealName, - Phone = user.Phone, - TenantCode = user.TenantInfo.TenantId.ToString(), + PhoneNumber = user.PhoneNumber, + TenantCode = user.TenantInfo?.TenantCode, TenantName = tenant?.Name ?? "", Roles = roles.ToList(), EmailConfirmed = user.EmailConfirmed, @@ -122,7 +130,7 @@ public class UserService( UserName = dto.UserName, Email = dto.Email, RealName = dto.RealName, - Phone = dto.Phone, + PhoneNumber = dto.PhoneNumber, TenantInfo = tenantInfo, EmailConfirmed = dto.EmailConfirmed, CreatedTime = DateTime.UtcNow @@ -134,7 +142,7 @@ public class UserService( throw new InvalidOperationException(string.Join(", ", result.Errors.Select(e => e.Description))); } - if (dto.RoleIds != null && dto.RoleIds.Any()) + if (dto.RoleIds.Count != 0) { foreach (var roleId in dto.RoleIds) { @@ -152,7 +160,8 @@ public class UserService( await userManager.SetLockoutEndDateAsync(user, DateTimeOffset.MaxValue); } - await CreateAuditLog("user", "create", "User", user.Id, user.UserName, null, System.Text.Json.JsonSerializer.Serialize(dto)); + await CreateAuditLog("user", "create", "User", user.Id, user.UserName, null, + System.Text.Json.JsonSerializer.Serialize(dto)); var roles = await userManager.GetRolesAsync(user); return new UserDto @@ -161,7 +170,7 @@ public class UserService( UserName = user.UserName, Email = user.Email, RealName = user.RealName, - Phone = user.Phone, + PhoneNumber = user.PhoneNumber, TenantCode = user.TenantInfo.TenantId.ToString(), TenantName = tenant?.Name ?? "", Roles = roles.ToList(), @@ -183,7 +192,7 @@ public class UserService( user.Email = dto.Email; user.RealName = dto.RealName; - user.Phone = dto.Phone; + user.PhoneNumber = dto.PhoneNumber; user.EmailConfirmed = dto.EmailConfirmed; user.UpdatedTime = DateTime.UtcNow; @@ -200,9 +209,10 @@ public class UserService( await userManager.SetLockoutEndDateAsync(user, DateTimeOffset.MaxValue); } - var tenant = user.TenantInfo.TenantId > 0 ? await tenantManager.FindByIdAsync(user.TenantInfo.TenantId) : null; + var tenant = user.TenantInfo?.TenantId > 0 ? await tenantManager.FindByIdAsync(user.TenantInfo.TenantId) : null; - await CreateAuditLog("user", "update", "User", user.Id, user.UserName, oldValue, System.Text.Json.JsonSerializer.Serialize(user)); + await CreateAuditLog("user", "update", "User", user.Id, user.UserName, oldValue, + System.Text.Json.JsonSerializer.Serialize(user)); var roles = await userManager.GetRolesAsync(user); return new UserDto @@ -211,8 +221,8 @@ public class UserService( UserName = user.UserName, Email = user.Email, RealName = user.RealName, - Phone = user.Phone, - TenantCode = user.TenantInfo.TenantId.ToString(), + PhoneNumber = user.PhoneNumber, + TenantCode = user.TenantInfo?.TenantCode, TenantName = tenant?.Name ?? "", Roles = roles.ToList(), EmailConfirmed = user.EmailConfirmed, @@ -256,10 +266,12 @@ public class UserService( await CreateAuditLog("user", "delete", "User", user.Id, user.UserName, oldValue); } - private async Task CreateAuditLog(string operation, string action, string targetType, long? targetId, string? targetName, string? oldValue = null, string? newValue = null) + private async Task CreateAuditLog(string operation, string action, string targetType, long? targetId, + string? targetName, string? oldValue = null, string? newValue = null) { var httpContext = httpContextAccessor.HttpContext; - var userName = httpContext?.User?.FindFirstValue(ClaimTypes.NameIdentifier) ?? httpContext?.User?.Identity?.Name ?? "system"; + var userName = httpContext?.User?.FindFirstValue(ClaimTypes.NameIdentifier) ?? + httpContext?.User?.Identity?.Name ?? "system"; var tenantIdClaim = httpContext?.User?.FindFirstValue("TenantId"); var log = new AuditLog @@ -281,4 +293,4 @@ public class UserService( context.AuditLogs.Add(log); await context.SaveChangesAsync(); } -} +} \ No newline at end of file