Skip to content

Commit 535afc2

Browse files
committed
feat(unified-table): refactor admin user-model also using same unified-table
1 parent 885793f commit 535afc2

7 files changed

Lines changed: 807 additions & 264 deletions

File tree

src/BE/web/Controllers/Admin/AdminModels/AdminUserModelController.cs

Lines changed: 61 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using Chats.BE.Controllers.Admin.AdminModels.Dtos;
44
using Chats.BE.Controllers.Admin.Common;
55
using Chats.BE.Controllers.Common.Dtos;
6+
using Chats.BE.Services.Common;
67
using Chats.BE.Services;
78
using Microsoft.AspNetCore.Mvc;
89
using Microsoft.EntityFrameworkCore;
@@ -13,10 +14,9 @@ namespace Chats.BE.Controllers.Admin.AdminModels;
1314
public class AdminUserModelController(ChatsDB db) : ControllerBase
1415
{
1516
[HttpGet("users")]
16-
public async Task<ActionResult<PagedResult<UserModelPermissionUserDto>>> GetUsersForPermission(QueryPagingRequest pagingRequest, CancellationToken cancellationToken)
17+
public async Task<ActionResult<PagedResult<UserModelPermissionUserDto>>> GetUsersForPermission([FromQuery] UserModelPermissionUserQuery pagingRequest, CancellationToken cancellationToken)
1718
{
18-
IQueryable<User> query = db.Users
19-
.OrderByDescending(x => x.UpdatedAt);
19+
IQueryable<User> query = BuildUserPermissionQuery(pagingRequest);
2020

2121
int totalModelProviderCount = await db.ModelProviderOrders
2222
.CountAsync(cancellationToken);
@@ -29,20 +29,15 @@ public async Task<ActionResult<PagedResult<UserModelPermissionUserDto>>> GetUser
2929
.CountAsync(cancellationToken);
3030
}
3131

32-
if (!string.IsNullOrEmpty(pagingRequest.Query))
33-
{
34-
query = query.Where(x => x.UserName.Contains(pagingRequest.Query)
35-
|| (x.Email != null && x.Email.Contains(pagingRequest.Query))
36-
|| (x.Phone != null && x.Phone.Contains(pagingRequest.Query)));
37-
}
38-
3932
PagedResult<UserModelPermissionUserDto> result = await PagedResult.FromQuery(
4033
query.Select(x => new UserModelPermissionUserDto
4134
{
4235
Id = x.Id,
43-
Username = x.UserName,
36+
Username = x.DisplayName ?? x.UserName,
37+
Account = x.UserName,
4438
Email = x.Email,
4539
Phone = x.Phone,
40+
Provider = x.Provider,
4641
Enabled = x.Enabled,
4742
UserModelCount = x.UserModels.Count(um => !um.Model.IsDeleted),
4843
ModelProviderCount = totalModelProviderCount,
@@ -54,6 +49,61 @@ public async Task<ActionResult<PagedResult<UserModelPermissionUserDto>>> GetUser
5449
return Ok(result);
5550
}
5651

52+
private IQueryable<User> BuildUserPermissionQuery(UserModelPermissionUserQuery query)
53+
{
54+
IQueryable<User> rows = db.Users
55+
.OrderByDescending(x => x.UpdatedAt);
56+
57+
if (!string.IsNullOrWhiteSpace(query.Id))
58+
{
59+
if (!int.TryParse(query.Id.Trim(), out int parsedId))
60+
{
61+
return rows.Where(_ => false);
62+
}
63+
64+
rows = rows.Where(x => x.Id == parsedId);
65+
}
66+
67+
if (!string.IsNullOrWhiteSpace(query.Username))
68+
{
69+
string keyword = query.Username.Trim();
70+
rows = rows.Where(x =>
71+
EF.Functions.Like(x.DisplayName, $"%{keyword}%") ||
72+
EF.Functions.Like(x.UserName, $"%{keyword}%"));
73+
}
74+
75+
if (!string.IsNullOrWhiteSpace(query.Phone))
76+
{
77+
string keyword = query.Phone.Trim();
78+
rows = rows.Where(x => x.Phone != null && EF.Functions.Like(x.Phone, $"%{keyword}%"));
79+
}
80+
81+
if (!string.IsNullOrWhiteSpace(query.Email))
82+
{
83+
string keyword = query.Email.Trim();
84+
rows = rows.Where(x => x.Email != null && EF.Functions.Like(x.Email, $"%{keyword}%"));
85+
}
86+
87+
if (!string.IsNullOrWhiteSpace(query.LoginType))
88+
{
89+
string normalized = query.LoginType.Trim().ToLowerInvariant();
90+
if (normalized == "password")
91+
{
92+
rows = rows.Where(x => x.Provider == null || x.Provider == "");
93+
}
94+
else if (normalized == "phone")
95+
{
96+
rows = rows.Where(x => x.Provider != null && x.Provider.ToLower() == KnownLoginProviders.Phone.ToLower());
97+
}
98+
else if (normalized == "keycloak")
99+
{
100+
rows = rows.Where(x => x.Provider != null && x.Provider.ToLower() == KnownLoginProviders.Keycloak.ToLower());
101+
}
102+
}
103+
104+
return rows;
105+
}
106+
57107
[HttpGet("user/{userId:int}/providers")]
58108
public async Task<ActionResult<UserModelProviderDto[]>> GetModelProvidersForUser(int userId, CancellationToken cancellationToken)
59109
{

src/BE/web/Controllers/Admin/AdminModels/Dtos/UserModelPermissionUserDto.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
using Chats.BE.Controllers.Common.Dtos;
2+
using Microsoft.AspNetCore.Mvc;
13
using System.Text.Json.Serialization;
24

35
namespace Chats.BE.Controllers.Admin.AdminModels.Dtos;
@@ -19,6 +21,12 @@ public record UserModelPermissionUserDto
1921
[JsonPropertyName("username")]
2022
public required string Username { get; init; }
2123

24+
/// <summary>
25+
/// 帐号
26+
/// </summary>
27+
[JsonPropertyName("account")]
28+
public required string Account { get; init; }
29+
2230
/// <summary>
2331
/// 邮箱
2432
/// </summary>
@@ -31,6 +39,12 @@ public record UserModelPermissionUserDto
3139
[JsonPropertyName("phone")]
3240
public string? Phone { get; init; }
3341

42+
/// <summary>
43+
/// 登录提供方
44+
/// </summary>
45+
[JsonPropertyName("provider")]
46+
public string? Provider { get; init; }
47+
3448
/// <summary>
3549
/// 是否启用
3650
/// </summary>
@@ -49,3 +63,21 @@ public record UserModelPermissionUserDto
4963
[JsonPropertyName("modelProviderCount")]
5064
public required int ModelProviderCount { get; init; }
5165
}
66+
67+
public record UserModelPermissionUserQuery : PagingRequest
68+
{
69+
[FromQuery(Name = "id")]
70+
public string? Id { get; init; }
71+
72+
[FromQuery(Name = "username")]
73+
public string? Username { get; init; }
74+
75+
[FromQuery(Name = "phone")]
76+
public string? Phone { get; init; }
77+
78+
[FromQuery(Name = "email")]
79+
public string? Email { get; init; }
80+
81+
[FromQuery(Name = "loginType")]
82+
public string? LoginType { get; init; }
83+
}

src/FE/apis/adminApis.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -223,11 +223,17 @@ export const getUsersForPermission = (
223223
params: GetUsersForPermissionParams,
224224
): Promise<PageResult<UserModelPermissionUserDto[]>> => {
225225
const fetchService = createFetchClient();
226-
return fetchService.get(
227-
`/api/admin/user-models/users?page=${params.page}&pageSize=${params.pageSize}&query=${
228-
params?.query || ''
229-
}`,
230-
);
226+
return fetchService.get('/api/admin/user-models/users', {
227+
params: {
228+
page: params.page,
229+
pageSize: params.pageSize,
230+
id: params.id,
231+
username: params.username,
232+
phone: params.phone,
233+
email: params.email,
234+
loginType: params.loginType,
235+
},
236+
});
231237
};
232238

233239
export const getModelProvidersForUser = async (

src/FE/components/admin/user-models/ByUserTab.tsx

Lines changed: 0 additions & 200 deletions
This file was deleted.

0 commit comments

Comments
 (0)