Anapher/Strive

View on GitHub
src/Services/ConferenceManagement/Strive.Core/Domain/Entities/ConferenceLink.cs

Summary

Maintainability
A
0 mins
Test Coverage
using System;
using System.Linq;

namespace Strive.Core.Domain.Entities
{
    /// <summary>
    ///     A link that a participant has on a conference
    /// </summary>
    public class ConferenceLink : IScheduleInfo
    {
        public ConferenceLink(string participantId, string conferenceId)
        {
            Id = $"{participantId}/{conferenceId}";

            ParticipantId = participantId;
            ConferenceId = conferenceId;
        }

        public string Id { get; init; }

        /// <summary>
        ///     The participant id
        /// </summary>
        public string ParticipantId { get; init; }

        /// <summary>
        ///     The conference id
        /// </summary>
        public string ConferenceId { get; init; }

        /// <summary>
        ///     True if the participant even starred the conference
        /// </summary>
        public bool Starred { get; set; }

        /// <summary>
        ///     The name of the conference
        /// </summary>
        public string? ConferenceName { get; private set; }

        /// <summary>
        ///     True if the participant is a moderator of this conference
        /// </summary>
        public bool IsModerator { get; private set; }

        /// <summary>
        ///     The last time the participant joined this conference
        /// </summary>
        public DateTimeOffset LastJoin { get; private set; } = DateTimeOffset.UtcNow;

        public DateTimeOffset? StartTime { get; private set; }

        public string? ScheduleCron { get; private set; }

        public int Version { get; set; }

        public void UpdateFromConference(Conference conference)
        {
            ConferenceName = conference.Configuration.Name;
            IsModerator = conference.Configuration.Moderators.Contains(ParticipantId);
            StartTime = conference.Configuration.StartTime;
            ScheduleCron = conference.Configuration.ScheduleCron;
        }

        public void OnJoined()
        {
            LastJoin = DateTimeOffset.UtcNow;
        }
    }
}