using Collaboration.Domain.Enums; using System.ComponentModel.DataAnnotations; namespace Collaboration.Application.DTOs.Requests; public record CreateSessionRequest( [Required][MaxLength(200)] string Title, SessionType SessionType, SessionMode Mode, [MaxLength(50)] string? ContextModuleCode, [MaxLength(100)] string? ContextRecordId, [MaxLength(300)] string? ContextRecordLabel, [MaxLength(1000)] string? ContextRouteUrl, DateTime? ScheduledAt, int? ScheduledDurationMinutes, int? MaxParticipants // Null = use org default ); public record InviteUsersRequest( [Required][MinLength(1)] List UserIds, ParticipantRole OfferedRole = ParticipantRole.Viewer, int? ExpiryMinutes = null // Null = use org default ); public record CreateLinkInviteRequest( ParticipantRole OfferedRole = ParticipantRole.Viewer, int? ExpiryMinutes = null ); public record RespondToInviteRequest( [Required] bool Accept ); public record UpdateSessionStatusRequest( [Required] string Action // "start" | "pause" | "resume" | "end" ); public record GrantControlRequest( [Required] Guid TargetUserId ); public record UpdateCollabConfigRequest( [Range(2, 100)] int MaxParticipantsDefault, [Range(2, 100)] int MaxParticipantsAbsolute, [Range(5, 480)] int SessionTimeoutMinutes, [Range(10, 1440)] int InviteLinkExpiryMinutes, [Range(1, 100)] int MaxScheduledSessionsPerUser, bool AllowScreenShare, bool AllowAnonymousJoin, bool AllowGuestJoinViaLink, bool EnableAuditLog, bool EnableCoBrowse, bool EnableInSessionChat, bool EnableAnnotations, bool EnableCursorBroadcast, bool EnableFormSync, ControlConsentMode ControlConsentMode, string? AllowedModulesJson );