72 lines
3.0 KiB
C#
72 lines
3.0 KiB
C#
using System.Net;
|
|
using System.Text.Json;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.AspNetCore.RateLimiting;
|
|
using ModeusSchedule.Abstractions;
|
|
using ModeusSchedule.Abstractions.DTO.Requests;
|
|
using SfeduSchedule.Services;
|
|
|
|
namespace SfeduSchedule.Controllers;
|
|
|
|
[ApiController]
|
|
[Route("api/proxy")]
|
|
[EnableRateLimiting("throttle")]
|
|
public class ProxyController(ModeusService modeusService, ILogger<ProxyController> logger) : ControllerBase
|
|
{
|
|
/// <summary>
|
|
/// Получить расписание по пользовательскому запросу.
|
|
/// </summary>
|
|
/// <param name="request">Объект запроса, содержащий параметры фильтрации расписания.</param>
|
|
/// <returns>Список событий расписания.</returns>
|
|
/// <response code="200">Возвращает расписание</response>
|
|
/// <response code="429">Слишком много запросов</response>
|
|
[HttpPost]
|
|
[Route("events/search")]
|
|
public async Task<IActionResult> Post([FromBody] ModeusScheduleRequest request)
|
|
{
|
|
string? schedule;
|
|
try
|
|
{
|
|
schedule = await modeusService.GetScheduleAsync(request);
|
|
}
|
|
catch (HttpRequestException e)
|
|
{
|
|
logger.LogError("Ошибка при получении расписания\n\n" + e.Message + "\n\n" + e.StackTrace +
|
|
"\n\n JSON: " +
|
|
JsonSerializer.Serialize(request, GlobalConsts.JsonSerializerOptions));
|
|
return StatusCode((int)(e.StatusCode ?? HttpStatusCode.InternalServerError),
|
|
"Proxied Modeus: " + e.Message);
|
|
}
|
|
|
|
schedule = await ScheduleLocationFilter.FilterAsync(schedule, HttpContext);
|
|
return Ok(schedule);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Поиск аудиторий по пользовательскому запросу.
|
|
/// </summary>
|
|
/// <param name="request">Объект запроса, содержащий параметры фильтрации аудиторий.</param>
|
|
/// <returns>Список аудиторий.</returns>
|
|
/// <response code="200">Возвращает список аудиторий</response>
|
|
/// <response code="429">Слишком много запросов</response>
|
|
[HttpPost]
|
|
[Route("rooms/search")]
|
|
public async Task<IActionResult> SearchRooms([FromBody] RoomSearchRequest request)
|
|
{
|
|
string? rooms;
|
|
try
|
|
{
|
|
rooms = await modeusService.SearchRoomsAsync(request);
|
|
}
|
|
catch (HttpRequestException e)
|
|
{
|
|
logger.LogError("Ошибка при поиске аудиторий\n\n" + e.Message + "\n\n" + e.StackTrace + "\n\n JSON: " +
|
|
JsonSerializer.Serialize(request, GlobalConsts.JsonSerializerOptions));
|
|
return StatusCode((int)(e.StatusCode ?? HttpStatusCode.InternalServerError),
|
|
"Proxied Modeus: " + e.Message);
|
|
}
|
|
|
|
return Ok(rooms);
|
|
}
|
|
}
|