Files
UniVerse/backend/UniVerse.Infrastructure/ExternalServices/ModeusApiClient.cs
T

69 lines
2.3 KiB
C#

using System.Net.Http.Json;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using UniVerse.Application.DTOs.Sync;
using UniVerse.Application.Interfaces;
namespace UniVerse.Infrastructure.ExternalServices;
public class ModeusApiClient : IModeusApiClient
{
private readonly HttpClient _http;
private readonly ILogger<ModeusApiClient> _logger;
public ModeusApiClient(HttpClient http, IConfiguration config, ILogger<ModeusApiClient> logger)
{
_http = http; _logger = logger;
var apiKey = config["ModeusApi:ApiKey"];
if (!string.IsNullOrEmpty(apiKey))
_http.DefaultRequestHeaders.Add("X-API-Key", apiKey);
}
public async Task<ModeusEventsResponse> SearchEventsAsync(SyncScheduleRequest request)
{
var body = new { specialtyCode = request.SpecialtyCode, timeMin = request.TimeMin, timeMax = request.TimeMax, typeId = request.TypeId };
var response = await _http.PostAsJsonAsync("/api/proxy/events/search", body);
response.EnsureSuccessStatusCode();
return await response.Content.ReadFromJsonAsync<ModeusEventsResponse>() ?? new(new());
}
public async Task<ModeusRoomsResponse> SearchRoomsAsync()
{
const int pageSize = 100;
var allRooms = new List<ModeusRoom>();
var page = 0;
var totalPages = 1;
do
{
var body = new
{
name = "",
sort = "+building.name,+name",
size = pageSize,
page,
deleted = false
};
var response = await _http.PostAsJsonAsync("/api/proxy/rooms/search", body);
response.EnsureSuccessStatusCode();
var payload = await response.Content.ReadFromJsonAsync<ModeusRoomsResponse>() ?? new ModeusRoomsResponse();
allRooms.AddRange(payload.RoomItems);
totalPages = payload.Page?.TotalPages ?? page + 1;
page++;
}
while (page < totalPages);
return new ModeusRoomsResponse { Rooms = allRooms };
}
public async Task<List<ModeusEmployee>> SearchEmployeeAsync(string fullname)
{
var response = await _http.GetFromJsonAsync<List<ModeusEmployee>>(
$"/api/schedule/searchemployee?fullname={Uri.EscapeDataString(fullname)}");
return response ?? new();
}
}