Добавьте файлы проекта.
This commit is contained in:
47
src/Massenger.Server/Controllers/UsersController.cs
Normal file
47
src/Massenger.Server/Controllers/UsersController.cs
Normal file
@@ -0,0 +1,47 @@
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Massenger.Server.Data;
|
||||
using Massenger.Server.Infrastructure;
|
||||
using Massenger.Shared;
|
||||
|
||||
namespace Massenger.Server.Controllers;
|
||||
|
||||
[ApiController]
|
||||
[Authorize]
|
||||
[Route("api/[controller]")]
|
||||
public sealed class UsersController(
|
||||
MassengerDbContext dbContext,
|
||||
PresenceTracker presenceTracker) : ControllerBase
|
||||
{
|
||||
[HttpGet("me")]
|
||||
public async Task<ActionResult<UserSummaryDto>> GetMe(CancellationToken cancellationToken)
|
||||
{
|
||||
var userId = User.GetRequiredUserId();
|
||||
var user = await dbContext.Users.SingleAsync(x => x.Id == userId, cancellationToken);
|
||||
return Ok(user.ToDto(presenceTracker));
|
||||
}
|
||||
|
||||
[HttpGet("search")]
|
||||
public async Task<ActionResult<IReadOnlyList<UserSummaryDto>>> Search([FromQuery] string? q, CancellationToken cancellationToken)
|
||||
{
|
||||
var userId = User.GetRequiredUserId();
|
||||
var query = q?.Trim();
|
||||
|
||||
var usersQuery = dbContext.Users.Where(x => x.Id != userId);
|
||||
if (!string.IsNullOrWhiteSpace(query))
|
||||
{
|
||||
var normalized = query.ToUpperInvariant();
|
||||
usersQuery = usersQuery.Where(x =>
|
||||
x.NormalizedUsername.Contains(normalized) ||
|
||||
EF.Functions.Like(x.DisplayName, $"%{query}%"));
|
||||
}
|
||||
|
||||
var users = await usersQuery
|
||||
.OrderBy(x => x.DisplayName)
|
||||
.Take(25)
|
||||
.ToListAsync(cancellationToken);
|
||||
|
||||
return Ok(users.Select(x => x.ToDto(presenceTracker)).ToList());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user