diff --git a/DotBased.AspNet.Authority.EFCore/DI.cs b/DotBased.AspNet.Authority.EFCore/Extensions.cs similarity index 95% rename from DotBased.AspNet.Authority.EFCore/DI.cs rename to DotBased.AspNet.Authority.EFCore/Extensions.cs index 999df24..d48aa30 100644 --- a/DotBased.AspNet.Authority.EFCore/DI.cs +++ b/DotBased.AspNet.Authority.EFCore/Extensions.cs @@ -5,7 +5,7 @@ using Microsoft.Extensions.DependencyInjection; namespace DotBased.AspNet.Authority.EFCore; -public static class DI +public static class Extensions { public static IServiceCollection AddAuthorityContext(this IServiceCollection services, Action options) { diff --git a/DotBased.AspNet.Authority.EFCore/Repositories/UserRepository.cs b/DotBased.AspNet.Authority.EFCore/Repositories/UserRepository.cs index 9e1542f..bcd8165 100644 --- a/DotBased.AspNet.Authority.EFCore/Repositories/UserRepository.cs +++ b/DotBased.AspNet.Authority.EFCore/Repositories/UserRepository.cs @@ -1,14 +1,28 @@ using DotBased.AspNet.Authority.Models.Authority; using DotBased.AspNet.Authority.Repositories; +using Microsoft.EntityFrameworkCore; namespace DotBased.AspNet.Authority.EFCore.Repositories; -public class UserRepository : IUserRepository +public class UserRepository(IDbContextFactory contextFactory) : IUserRepository { - public Task> GetAuthorityUsersAsync(int limit = 20, int offset = 0, string search = "", - CancellationToken? cancellationToken = null) + public async Task> GetAuthorityUsersAsync(int limit = 20, int offset = 0, string search = "", CancellationToken? cancellationToken = null) { - throw new NotImplementedException(); + await using var context = await contextFactory.CreateDbContextAsync(); + var query = context.Users.AsQueryable(); + if (!string.IsNullOrWhiteSpace(search)) + { + query = query.Where(u => $"{u.Id} {u.Name} {u.UserName} {u.EmailAddress} {u.PhoneNumber}".Contains(search, StringComparison.CurrentCultureIgnoreCase)); + } + var totalCount = query.Count(); + var selected = query.Skip(offset).Take(limit).Select(u => new AuthorityUserItem() + { + Id = u.Id, + UserName = u.UserName, + EmailAddress = u.EmailAddress, + PhoneNumber = u.PhoneNumber + }); + return ListResult.Ok(selected, totalCount, limit, offset); } public Task> GetAuthorityUserByIdAsync(string id, CancellationToken? cancellationToken = null) diff --git a/DotBased.AspNet.Authority/Models/Authority/AuthorityUser.cs b/DotBased.AspNet.Authority/Models/Authority/AuthorityUser.cs index 03214ca..1d37fa1 100755 --- a/DotBased.AspNet.Authority/Models/Authority/AuthorityUser.cs +++ b/DotBased.AspNet.Authority/Models/Authority/AuthorityUser.cs @@ -1,3 +1,4 @@ +using System.Text; using DotBased.AspNet.Authority.Attributes; namespace DotBased.AspNet.Authority.Models.Authority; @@ -19,7 +20,9 @@ public class AuthorityUser() public DateTime LockedDate { get; set; } - public string? UserName { get; set; } + public string UserName { get; set; } = string.Empty; + + public string Name { get; set; } = string.Empty; public string? PasswordHash { get; set; } @@ -43,5 +46,15 @@ public class AuthorityUser() public ICollection Attributes { get; set; } = []; - public override string ToString() => UserName ?? EmailAddress ?? string.Empty; + public override string ToString() + { + var strBuilder = new StringBuilder(); + strBuilder.Append(!string.IsNullOrWhiteSpace(Name) ? Name : UserName); + + if (string.IsNullOrWhiteSpace(EmailAddress)) return strBuilder.ToString(); + + strBuilder.Append(strBuilder.Length == 0 ? EmailAddress : $" ({EmailAddress})"); + + return strBuilder.ToString(); + } } \ No newline at end of file diff --git a/DotBased.AspNet.Authority/Models/Authority/AuthorityUserItem.cs b/DotBased.AspNet.Authority/Models/Authority/AuthorityUserItem.cs index 6afe594..61e116b 100644 --- a/DotBased.AspNet.Authority/Models/Authority/AuthorityUserItem.cs +++ b/DotBased.AspNet.Authority/Models/Authority/AuthorityUserItem.cs @@ -2,5 +2,8 @@ namespace DotBased.AspNet.Authority.Models.Authority; public class AuthorityUserItem { - + public Guid Id { get; set; } + public string UserName { get; set; } = string.Empty; + public string? EmailAddress { get; set; } = string.Empty; + public string? PhoneNumber { get; set; } = string.Empty; } \ No newline at end of file diff --git a/DotBased/Result.cs b/DotBased/Result.cs index e188b77..dcf1b28 100755 --- a/DotBased/Result.cs +++ b/DotBased/Result.cs @@ -79,7 +79,7 @@ public class ListResult : Result /// public int Offset { get; } - public static ListResult Ok(IEnumerable items, int totalCount = -1) => + public static ListResult Ok(IEnumerable items, int totalCount = -1, int limit = -1, int offset = -1) => new(true, string.Empty, totalCount, items); public new static ListResult Failed(string message, Exception? exception = null) =>