Вынес парсер JSON

This commit is contained in:
2025-10-12 17:12:36 +03:00
parent b2c22ab65c
commit 2ac561b46f
2 changed files with 42 additions and 16 deletions

View File

@@ -68,8 +68,11 @@ builder.Services.AddMicrosoftIdentityWebAppAuthentication(builder.Configuration)
// Загружаем плагины (изолированно), даём им зарегистрировать DI и подключаем контроллеры // Загружаем плагины (изолированно), даём им зарегистрировать DI и подключаем контроллеры
var loaded = PluginLoader.LoadPlugins(pluginsPath); var loaded = PluginLoader.LoadPlugins(pluginsPath);
Console.WriteLine("Plugins count: " + loaded.Count);
foreach (var p in loaded) foreach (var p in loaded)
{ {
Console.WriteLine("Loading plugin: " + p.Instance.Name);
// DI из плагина // DI из плагина
p.Instance.ConfigureServices(builder.Services); p.Instance.ConfigureServices(builder.Services);

View File

@@ -84,38 +84,61 @@ namespace SfeduSchedule.Services
return personId; return personId;
} }
public async Task<string?> GetIcsAsync(ModeusScheduleRequest msr) public async Task<Schedule?> GetScheduleJsonAsync(ModeusScheduleRequest msr)
{ {
var schedule = await GetScheduleAsync(msr); var schedule = await GetScheduleAsync(msr);
if (schedule == null) if (schedule == null)
{ {
_logger.LogError("GetIcsAsync: Schedule is null. Request: {@msr}", msr); _logger.LogError("GetScheduleJsonAsync: Schedule is null. Request: {@msr}", msr);
return null; throw new Exception("Schedule is null"); // Недопустимое состояние
} }
Schedule? scheduleJson; Schedule? scheduleJson;
try try
{ {
scheduleJson = Schedule.FromJson(schedule); scheduleJson = Schedule.FromJson(schedule);
switch (scheduleJson)
{
case null:
_logger.LogError(
"GetScheduleJsonAsync: scheduleJson is null. Schedule: {Schedule}\n Request: {@msr}",
schedule, msr);
break;
case { Embedded: null }:
_logger.LogError(
"GetScheduleJsonAsync: scheduleJson.Embedded is null. scheduleJson: {@scheduleJson}\n Request: {@msr}",
scheduleJson, msr);
break;
case { Embedded.Events: null }:
_logger.LogError(
"GetScheduleJsonAsync: scheduleJson.Embedded.Events is null. Embedded: {@Embedded}\n Request: {@msr}",
scheduleJson.Embedded, msr);
break;
case { Embedded.Events.Length: 0 }:
_logger.LogWarning(
"GetScheduleJsonAsync: scheduleJson.Embedded.Events is empty. Embedded: {@Embedded}\n Request: {@msr}",
scheduleJson.Embedded, msr);
break;
default:
return scheduleJson;
}
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogError(ex, "GetIcsAsync: Deserialization failed. Schedule: {Schedule}\n Request: {@msr}", schedule, msr); _logger.LogError(ex,
"GetScheduleJsonAsync: Deserialization failed. Schedule: {Schedule}\n Request: {@msr}", schedule,
msr);
}
return null; return null;
} }
if (scheduleJson?.Embedded?.Events is not { Length: > 0 } events) public async Task<string?> GetIcsAsync(ModeusScheduleRequest msr)
{ {
Schedule? scheduleJson = await GetScheduleJsonAsync(msr);
if (scheduleJson == null) if (scheduleJson == null)
_logger.LogError("GetIcsAsync: scheduleJson is null. Schedule: {Schedule}\n Request: {@msr}", schedule, msr); {
else if (scheduleJson.Embedded == null) _logger.LogError("GetIcsAsync: scheduleJson is null after deserialization. Request: {@msr}", msr);
_logger.LogError("GetIcsAsync: scheduleJson.Embedded is null. scheduleJson: {@scheduleJson}\n Request: {@msr}", scheduleJson, msr);
else if (scheduleJson.Embedded.Events == null)
_logger.LogError("GetIcsAsync: scheduleJson.Embedded.Events is null. Embedded: {@Embedded}\n Request: {@msr}",
scheduleJson.Embedded, msr);
else
_logger.LogWarning("GetIcsAsync: scheduleJson.Embedded.Events is empty. Embedded: {@Embedded}\n Request: {@msr}",
scheduleJson.Embedded, msr);
return null; return null;
} }