Example #1
0
        /// <summary>
        /// Adds a track to a conference
        /// </summary>
        /// <param name="trackId">Unique identity of a track</param>
        /// <param name="talkId">Unique identity of a talk</param>
        /// <param name="title">Title of Talk</param>
        /// <param name="description">Description of talk</param>
        /// <param name="duration">Duration/Length of talk</param>
        /// <returns>An instance of <c>TrackId</c></returns>
        public Result <TalkId> AddTalkToTrack(TrackId trackId, TalkId talkId, Title title, Description description, Duration duration)
        {
            var track = _tracks.FirstOrDefault(t => t.TrackId == trackId);

            if (track == null)
            {
                return(InvalidResult <TalkId> .Create("Invalid track"));
            }

            var talkAddedToTrackResult = track.CreateAndAddTalk(talkId, title, description, duration);

            if (talkAddedToTrackResult.IsFailure)
            {
                return(InvalidResult <TalkId> .Create(talkAddedToTrackResult.Error.Value.Message));
            }

            var addedTalk   = talkAddedToTrackResult.Data;
            var talkCreated = new TalkCreated(addedTalk.TalkId, addedTalk.Title, addedTalk.Description,
                                              addedTalk.StartTime);

            AddEvent(talkCreated);

            var trackAddedToTack = new TalkAddedToTrack(track.TrackId, addedTalk.TalkId, addedTalk.Title, addedTalk.StartTime);

            AddEvent(trackAddedToTack);

            return(SuccessResult <TalkId> .Create(talkId));
        }
Example #2
0
 /// <summary>
 /// Instantiates an instance of <c>Talk</c>
 /// </summary>
 /// <param name="talkId">Unique identity of talk</param>
 /// <param name="title">Title of Talk</param>
 /// <param name="description">Description of talk</param>
 /// <param name="duration">Duration/Length of talk</param>
 /// <param name="startTime">Start time of the talk</param>
 private Talk(TalkId talkId, Title title, Description description, Duration duration, TalkStartTime startTime)
     : base(talkId.Id)
 {
     TalkId      = talkId;
     Title       = title;
     Description = description;
     Duration    = duration;
     StartTime   = startTime;
 }
Example #3
0
        /// <summary>
        /// Creates an instance of <c>TalkId</c>
        /// </summary>
        /// <param name="id">Unique identity of Talk</param>
        /// <returns>An instance of <c>TalkId</c></returns>
        public static Result <TalkId> Create(Guid id)
        {
            if (id == Guid.Empty)
            {
                return(InvalidResult <TalkId> .Create("Invalid Id"));
            }

            var talkId = new TalkId(id);

            return(SuccessResult <TalkId> .Create(talkId));
        }
Example #4
0
        /// <summary>
        /// Adds a talk to a track
        /// </summary>
        /// <param name="talkId">Unique identity of a talk to be added to track</param>
        /// <param name="title">Title of Talk</param>
        /// <param name="description">Description of talk</param>
        /// <param name="duration">Duration/Length of talk</param>
        /// <returns>An instance of <c>Talk</c></returns>
        public Result <Talk> CreateAndAddTalk(TalkId talkId, Title title, Description description, Duration duration)
        {
            var alreadyExistingTalk = _talks.FirstOrDefault(t => t.TalkId == talkId);

            if (alreadyExistingTalk != null)
            {
                return(InvalidResult <Talk> .Create("Talk already added"));
            }

            DateTime startTime;

            if (_nextMorningSession.TimeOfDay.Add(duration.Value) <= _morningSessionEnd.TimeOfDay)
            {
                // Add to morning
                startTime           = _nextMorningSession;
                _nextMorningSession = _nextMorningSession.Add(duration.Value);
            }
            else if (_nextAfternoonSession.TimeOfDay.Add(duration.Value) <= _afternoonSessionEnd.TimeOfDay)
            {
                // Add to afternoon
                startTime             = _nextAfternoonSession;
                _nextAfternoonSession = _nextAfternoonSession.Add(duration.Value);
            }
            else
            {
                return(InvalidResult <Talk> .Create("No slot available in the track for the specified duration"));
            }

            var startTimeResult = TalkStartTime.Create(startTime);

            if (startTimeResult.IsFailure)
            {
                return(InvalidResult <Talk> .Create(startTimeResult.Error.Value.Message));
            }

            var createTalkResult = Talk.Create(talkId, title, description, duration, startTimeResult.Data);

            if (createTalkResult.IsFailure)
            {
                return(InvalidResult <Talk> .Create(createTalkResult.Error.Value.Message));
            }

            _talks.Add(createTalkResult.Data);

            return(SuccessResult <Talk> .Create(createTalkResult.Data));
        }
Example #5
0
        /// <summary>
        /// Creates an instance of <c>Talk</c>
        /// </summary>
        /// <param name="talkId">Unique identity of talk</param>
        /// <param name="title">Title of Talk</param>
        /// <param name="description">Description of talk</param>
        /// <param name="duration">Duration/Length of talk</param>
        /// <param name="startTime">Start time of the talk</param>
        public static Result <Talk> Create(TalkId talkId, Title title, Description description, Duration duration, TalkStartTime startTime)
        {
            var talk = new Talk(talkId, title, description, duration, startTime);

            return(SuccessResult <Talk> .Create(talk));
        }