Вынес парсер 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 и подключаем контроллеры
var loaded = PluginLoader.LoadPlugins(pluginsPath);
Console.WriteLine("Plugins count: " + loaded.Count);
foreach (var p in loaded)
{
Console.WriteLine("Loading plugin: " + p.Instance.Name);
// DI из плагина
p.Instance.ConfigureServices(builder.Services);

View File

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