using GmRelay.Shared.Domain; namespace GmRelay.Shared.Features.Confirmation.HandleRsvp; public sealed record RsvpFlowDecision( string CallbackText, bool ShouldAlertGm, bool ShouldRevertSessionToConfirmationSent, bool ShouldMarkSessionConfirmed, bool ShouldNotifyGroup, bool ShouldNotifyGm); public static class RsvpFlowRules { public static RsvpFlowDecision Evaluate( string requestedStatus, string currentSessionStatus, int totalParticipants, int confirmedParticipants) { if (requestedStatus == RsvpStatus.Declined) { return new RsvpFlowDecision( CallbackText: "Вы отказались от участия.", ShouldAlertGm: true, ShouldRevertSessionToConfirmationSent: currentSessionStatus == SessionStatus.Confirmed, ShouldMarkSessionConfirmed: false, ShouldNotifyGroup: false, ShouldNotifyGm: false); } var everyoneConfirmed = confirmedParticipants == totalParticipants; return new RsvpFlowDecision( CallbackText: "Вы подтвердили участие!", ShouldAlertGm: false, ShouldRevertSessionToConfirmationSent: false, ShouldMarkSessionConfirmed: everyoneConfirmed, ShouldNotifyGroup: everyoneConfirmed, ShouldNotifyGm: everyoneConfirmed); } }