Админка

This commit is contained in:
Халимов Рустам
2026-03-31 01:54:35 +03:00
parent 60d3cf12ae
commit 8025340e45
12 changed files with 189 additions and 62 deletions

View File

@@ -1,8 +1,8 @@
using System.Threading;
using System.Threading.Tasks;
using Knot.Contracts.Admin.Abstractions;
using Knot.Contracts.Settings.Abstractions;
using Knot.Modules.Admin.Application.Admin.DTOs;
using Knot.Shared.Kernel.Services;
using MediatR;
namespace Knot.Modules.Admin.Application.Admin.Queries;

View File

@@ -1,11 +1,9 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Knot.Contracts.Admin.Abstractions;
using Knot.Contracts.Auth.Domain;
using Knot.Contracts.Conversations.Application.Abstractions;
using Knot.Contracts.Conversations.Abstractions;
using Knot.Contracts.Messaging.Application.Abstractions;
using Knot.Modules.Admin.Application.Admin.DTOs;
using MediatR;
@@ -18,12 +16,12 @@ internal sealed class GetUserDetailsQueryHandler : IQueryHandler<GetUserDetailsQ
{
private readonly IUserRepository _userRepository;
private readonly Knot.Contracts.Messaging.Application.Abstractions.IUserStatsService _statsService;
private readonly Knot.Contracts.Conversations.Application.Abstractions.IUserStatusService _statusService;
private readonly IUserStatusService _statusService;
public GetUserDetailsQueryHandler(
IUserRepository userRepository,
Knot.Contracts.Messaging.Application.Abstractions.IUserStatsService statsService,
Knot.Contracts.Conversations.Application.Abstractions.IUserStatusService statusService)
IUserStatusService statusService)
{
_userRepository = userRepository;
_statsService = statsService;

View File

@@ -5,7 +5,7 @@ using System.Threading;
using System.Threading.Tasks;
using Knot.Contracts.Admin.Abstractions;
using Knot.Contracts.Auth.Domain;
using Knot.Contracts.Conversations.Application.Abstractions;
using Knot.Contracts.Conversations.Abstractions;
using Knot.Contracts.Messaging.Application.Abstractions;
using Knot.Modules.Admin.Application.Admin.DTOs;
using MediatR;
@@ -18,12 +18,12 @@ internal sealed class SearchUsersQueryHandler : IQueryHandler<SearchUsersQuery,
{
private readonly IUserRepository _userRepository;
private readonly Knot.Contracts.Messaging.Application.Abstractions.IUserStatsService _statsService;
private readonly Knot.Contracts.Conversations.Application.Abstractions.IUserStatusService _statusService;
private readonly IUserStatusService _statusService;
public SearchUsersQueryHandler(
IUserRepository userRepository,
Knot.Contracts.Messaging.Application.Abstractions.IUserStatsService statsService,
Knot.Contracts.Conversations.Application.Abstractions.IUserStatusService statusService)
IUserStatusService statusService)
{
_userRepository = userRepository;
_statsService = statsService;

View File

@@ -67,14 +67,25 @@ public static class AdminEndpoints
return result.IsSuccess ? Results.Ok() : Results.BadRequest(new { error = result.Error.Description });
});
group.MapGet("users", async (ISender sender, [FromQuery] string query = "", CancellationToken ct = default) =>
group.MapGet("users", async (ISender sender, [FromQuery] string? query, CancellationToken ct = default) =>
{
var result = await sender.Send(new SearchUsersQuery(query), ct);
if (!result.IsSuccess)
// При пустом или отсутствующем query возвращаем всех пользователей
var searchQuery = string.IsNullOrWhiteSpace(query) ? "" : query;
try
{
return Results.BadRequest(new { error = result.Error.Description });
var result = await sender.Send(new SearchUsersQuery(searchQuery), ct);
if (!result.IsSuccess)
{
Console.WriteLine($"[Admin] SearchUsers error: {result.Error.Code} - {result.Error.Description}");
return Results.BadRequest(new { error = result.Error.Description });
}
return Results.Ok(result.Value);
}
catch (Exception ex)
{
Console.WriteLine($"[Admin] SearchUsers exception: {ex}");
return Results.BadRequest(new { error = ex.Message });
}
return Results.Ok(result.Value);
});
group.MapGet("users/{id:guid}", async ([FromRoute] Guid id, ISender sender, CancellationToken ct) =>