/// <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)); }
/// <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; }
/// <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)); }
/// <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)); }
/// <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)); }