fix: синхронизации аудиторий

This commit is contained in:
2026-05-11 23:59:13 +03:00
parent 6824d7ce7d
commit 34334e9a8d
6 changed files with 255 additions and 41 deletions
@@ -53,16 +53,53 @@ public class ScheduleSyncService : IScheduleSyncService
public async Task<SyncResultDto> SyncRoomsAsync()
{
int created = 0, updated = 0;
var rooms = await _modeus.SearchRoomsAsync();
foreach (var room in rooms.Rooms)
int created = 0, updated = 0, skipped = 0;
try
{
var existing = await _db.Locations.FirstOrDefaultAsync(l => l.ExternalId == room.Id);
if (existing != null) { existing.Name = room.Name; existing.Building = room.Building; updated++; }
else { _db.Locations.Add(new Location { Name = room.Name, Building = room.Building, ExternalId = room.Id }); created++; }
var rooms = await _modeus.SearchRoomsAsync();
foreach (var room in rooms?.RoomItems ?? [])
{
if (room is null || string.IsNullOrWhiteSpace(room.Id) || string.IsNullOrWhiteSpace(room.Name))
{
skipped++;
continue;
}
var existing = await _db.Locations.FirstOrDefaultAsync(l => l.ExternalId == room.Id);
if (existing != null)
{
existing.Name = room.Name;
existing.Room = room.NameShort;
existing.Building = room.Building?.Name ?? room.Building?.NameShort;
existing.Address = room.Building?.Address;
updated++;
}
else
{
_db.Locations.Add(new Location
{
Name = room.Name,
Room = room.NameShort,
Building = room.Building?.Name ?? room.Building?.NameShort,
Address = room.Building?.Address,
ExternalId = room.Id
});
created++;
}
}
await _db.SaveChangesAsync();
var result = new SyncResultDto(created, updated, skipped, null);
_lastStatus = new SyncStatusDto(DateTime.UtcNow, "completed", result);
return result;
}
catch (Exception ex)
{
_logger.LogError(ex, "Rooms sync failed");
var result = new SyncResultDto(created, updated, skipped, ex.Message);
_lastStatus = new SyncStatusDto(DateTime.UtcNow, "failed", result);
return result;
}
await _db.SaveChangesAsync();
return new SyncResultDto(created, updated, 0, null);
}
public async Task<List<EmployeeDto>> SearchEmployeesAsync(string fullname)