using UniVerse.Application.DTOs.Sync; using System.Text.Json.Serialization; namespace UniVerse.Application.Interfaces; public interface IScheduleSyncService { Task SyncScheduleAsync(SyncScheduleRequest request); Task SyncRoomsAsync(); Task> SearchEmployeesAsync(string fullname); Task GetLastSyncStatusAsync(); } public interface IModeusApiClient { Task SearchEventsAsync(SyncScheduleRequest request); Task SearchRoomsAsync(); Task> SearchEmployeeAsync(string fullname); } // Modeus API response models public class ModeusEvent { public string Id { get; init; } = string.Empty; public string Name { get; init; } = string.Empty; public string? NameShort { get; init; } public string? Description { get; init; } public string? TypeId { get; init; } public DateTime StartsAt { get; init; } public DateTime EndsAt { get; init; } [JsonPropertyName("_links")] public ModeusEventLinks? Links { get; init; } } public class ModeusEventLinks { [JsonPropertyName("course-unit-realization")] public ModeusHrefLink? CourseUnitRealization { get; init; } } public class ModeusEventsResponse { [JsonPropertyName("_embedded")] public ModeusEventsEmbedded? Embedded { get; init; } public List? Events { get; init; } public ModeusPage? Page { get; init; } [JsonIgnore] public IReadOnlyList EventItems => Embedded?.Events ?? Events ?? []; } public class ModeusEventsEmbedded { public List? Events { get; init; } [JsonPropertyName("course-unit-realizations")] public List? CourseUnitRealizations { get; init; } [JsonPropertyName("event-rooms")] public List? EventRooms { get; init; } [JsonPropertyName("event-teams")] public List? EventTeams { get; init; } public List? Rooms { get; init; } } public record ModeusHrefLink(string? Href); public record ModeusCourseUnitRealization(string Id, string Name, string? NameShort); public class ModeusEventRoom { public string Id { get; init; } = string.Empty; [JsonPropertyName("_links")] public ModeusEventRoomLinks? Links { get; init; } } public class ModeusEventRoomLinks { public ModeusHrefLink? Event { get; init; } public ModeusHrefLink? Room { get; init; } } public record ModeusEventTeam(string EventId, int? Size); public record ModeusBuilding(string? Id, string? Name, string? NameShort, string? Address); public record ModeusRoom(string Id, string Name, string? NameShort, ModeusBuilding? Building, int? TotalCapacity, int? WorkingCapacity); public record ModeusRoomsEmbedded(List? Rooms); public record ModeusPage(int Size, int TotalElements, int TotalPages, int Number); public class ModeusRoomsResponse { [JsonPropertyName("_embedded")] public ModeusRoomsEmbedded? Embedded { get; init; } public ModeusPage? Page { get; init; } public List? Rooms { get; init; } [JsonIgnore] public IReadOnlyList RoomItems => Embedded?.Rooms ?? Rooms ?? []; } public record ModeusEmployee(string? Id, string FullName, string? Department);