Files
Govor/Govor.API/Controllers/OnlinePingingController.cs
T
Artemy b24649e53a Refactor message loading API and add message query support
Reworked message loading endpoints and services to support flexible message querying with 'before' and 'after' parameters via a new MessageQuery contract. Updated controller actions, service interfaces, and implementations to use the new query model, and improved error handling. Added integration tests for ChatLoadController and introduced IUserPresenceService interface. Minor fixes and help text improvements in console client commands.
2025-07-23 13:06:34 +07:00

72 lines
2.1 KiB
C#

using Govor.Application.Interfaces;
using Govor.Application.Interfaces.Infrastructure.Extensions;
using Govor.Core.Repositories.Users;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace Govor.API.Controllers;
[ApiController]
[Route("api/online")]
[Authorize(Roles = "User,Admin")]
public class OnlinePingingController : Controller
{
private readonly ILogger<OnlinePingingController> _logger;
private readonly IPingHandlerService _ping;
private readonly IUserPresenceService _presenceService;
private readonly ICurrentUserService _currentUserService;
public OnlinePingingController(ILogger<OnlinePingingController> logger,
IPingHandlerService ping,
ICurrentUserService currentUserService)
{
_logger = logger;
_ping = ping;
_currentUserService = currentUserService;
}
[HttpPatch("ping")]// api/online/ping
public async Task<IActionResult> Ping()
{
try
{
_logger.LogInformation("Ping...");
var id = _currentUserService.GetCurrentUserId();
await _ping.Ping(id);
_logger.LogInformation($"Ping from user {id} processed successfully");
return Ok();
}
catch (InvalidOperationException e)
{
_logger.LogError(e, e.Message);
return BadRequest("User can't be found in our database.");
}
catch (UnauthorizedAccessException e)
{
_logger.LogError(e, e.Message);
return Forbid(e.Message);
}
catch (Exception e)
{
_logger.LogError(e, e.Message);
return StatusCode(500, "Failed to ping.");
}
}
[HttpGet("status/{userId}")]
public IActionResult GetStatus(Guid userId)
{
try
{
return Ok(_presenceService.WhenUserWasOnline(userId));
}
catch (Exception e)
{
_logger.LogError(e, e.Message);
return StatusCode(500, "Internal server error.");
}
}
}