예제 #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));
        }
예제 #2
0
        /// <summary>
        /// Creates an instance of <c>ConferenceId</c>
        /// </summary>
        /// <param name="id">Unique identity of conference</param>
        /// <returns>An instance of <c>ConferenceId</c></returns>
        public static Result <ConferenceId> Create(Guid id)
        {
            if (id == Guid.Empty)
            {
                return(InvalidResult <ConferenceId> .Create("Invalid Id"));
            }

            var conferenceId = new ConferenceId(id);

            return(SuccessResult <ConferenceId> .Create(conferenceId));
        }
예제 #3
0
        /// <summary>
        /// Creates an instance of <c>TrackId</c>
        /// </summary>
        /// <param name="id">Unique identity of Track</param>
        /// <returns>An instance of <c>TrackId</c></returns>
        public static Result <TrackId> Create(Guid id)
        {
            if (id == Guid.Empty)
            {
                return(InvalidResult <TrackId> .Create("Invalid Id"));
            }

            var trackId = new TrackId(id);

            return(SuccessResult <TrackId> .Create(trackId));
        }
예제 #4
0
        /// <summary>
        /// Creates an instance of <c>Description</c>
        /// </summary>
        /// <param name="description">Description</param>
        /// <returns>An instance of <c>Description</c></returns>
        public static Result <Description> Create(string description)
        {
            if (string.IsNullOrWhiteSpace(description))
            {
                return(InvalidResult <Description> .Create("Invalid description"));
            }

            var descriptionObject = new Description(description);

            return(SuccessResult <Description> .Create(descriptionObject));
        }
예제 #5
0
        /// <summary>
        /// Creates an instance of <c>StartTime</c>
        /// </summary>
        /// <param name="startTime">Start time</param>
        /// <returns>An instance of <c>StartTime</c></returns>
        public static Result <TalkStartTime> Create(DateTime startTime)
        {
            // start time must be between 9-12 or 1-4PM
            if ((startTime >= MorningSessionStartTime && startTime < MorningSessionEndTime) ||
                (startTime >= AfternoonSessionStartTime && startTime < AfternoonSessionEndTime))
            {
                var startObject = new TalkStartTime(startTime);
                return(SuccessResult <TalkStartTime> .Create(startObject));
            }

            return(InvalidResult <TalkStartTime> .Create("Invalid start time"));
        }
예제 #6
0
            public void ReturnsBadRequestObjectResultIfInvalid()
            {
                var input = new InvalidResult <string>("error");

                var result = controller.FromResult(input);

                Assert.IsInstanceOfType(result, typeof(BadRequestObjectResult));

                var resultCast = result as BadRequestObjectResult;

                Assert.IsTrue((resultCast.Value as List <string>).FirstOrDefault() == input.Errors.FirstOrDefault());
            }
        public override void Handle(DeleteDictionaryCommand command)
        {
            Dictionary dict = _dbContext.Dictionaries.Find(command.Id);

            if (dict == null)
            {
                _result = new InvalidResult()
                          .WithError("No dictionary of this id has been found");
                return;
            }

            _dbContext.Dictionaries.Remove(dict);
            _dbContext.SaveChanges();
            _result = new SuccessResult();
        }
예제 #8
0
        private static bool TreatmentResolutionIsValidForPickedInventoryItems(IEnumerable <PickedInventoryItem> pickedInventory, LotAttribute lotAttribute, out IResult result)
        {
            result = null;
            var pickedInventoryWithInvalidTreatment = pickedInventory.FirstOrDefault(i => lotAttribute.AttributeName.ValidTreatments.All(t => t.TreatmentId != i.TreatmentId));

            if (pickedInventoryWithInvalidTreatment == null)
            {
                return(true);
            }

            result = new InvalidResult(string.Format(UserMessages.TreatmentOnUnarchivedPickedInventoryDoesNotResolveDefect,
                                                     pickedInventoryWithInvalidTreatment.Treatment.ShortName,
                                                     pickedInventoryWithInvalidTreatment.ToPickedInventoryItemKey(),
                                                     lotAttribute.AttributeName.Name));
            return(false);
        }
예제 #9
0
        /// <summary>
        /// Creates an instance of <c>Title</c>
        /// </summary>
        /// <param name="title">Title</param>
        /// <returns>An instance of <c>Title</c></returns>
        public static Result <Title> Create(string title)
        {
            if (string.IsNullOrWhiteSpace(title))
            {
                return(InvalidResult <Title> .Create("Invalid title"));
            }

            if (title.Any(char.IsDigit))
            {
                return(InvalidResult <Title> .Create("Title with number not allowed"));
            }

            var titleObject = new Title(title);

            return(SuccessResult <Title> .Create(titleObject));
        }
예제 #10
0
        /// <summary>
        /// Creates an instance of <c>Duration</c>
        /// </summary>
        /// <param name="span">Interval</param>
        /// <returns>An instance of <c>Duration</c></returns>
        public static Result <Duration> Create(TimeSpan span)
        {
            if (span.TotalMinutes < MinimumDurationInMinutes)
            {
                return(InvalidResult <Duration> .Create($"Duration cannot be less than {MinimumDurationInMinutes} minutes"));
            }

            if (span.TotalMinutes > MaximumDurationInMinutes)
            {
                return(InvalidResult <Duration> .Create($"Duration cannot be greater than {MaximumDurationInMinutes} minutes"));
            }

            var durationObject = new Duration(span);

            return(SuccessResult <Duration> .Create(durationObject));
        }
예제 #11
0
        public override void Handle(DeleteMarkCommand command)
        {
            Mark mark = (from t in _dbContext.Marks
                         where t.Id == command.Id && t.DictionaryId == command.DictionaryId
                         select t).SingleOrDefault();

            if (mark == null)
            {
                _result = new InvalidResult()
                          .WithError("No theme of this id has been found.");
            }

            _dbContext.Marks.Remove(mark);
            _dbContext.SaveChanges();
            _result = new SuccessResult();
        }
예제 #12
0
        private static bool TreatmentResolutionIsValidForInventory(IEnumerable <Data.Models.Inventory> inventory, LotAttribute lotAttribute, out IResult result)
        {
            result = null;
            var inventoryWithInvalidTreatment = inventory.FirstOrDefault(i => lotAttribute.AttributeName.ValidTreatments.All(t => t.TreatmentId != i.TreatmentId));

            if (inventoryWithInvalidTreatment == null)
            {
                return(true);
            }

            result = new InvalidResult(string.Format(UserMessages.TreatmentOnInventoryDoesNotResolveDefect,
                                                     inventoryWithInvalidTreatment.Treatment.ShortName,
                                                     inventoryWithInvalidTreatment.ToInventoryKey(),
                                                     lotAttribute.AttributeName.Name));
            return(false);
        }
예제 #13
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));
        }
        public override void Handle(ChangeMarkCommand command)
        {
            Mark mark = _dbContext.Marks.Find(command.Id);

            if (mark == null)
            {
                _result = new InvalidResult()
                          .WithError("No mark of this id has been found.");
            }

            mark.ChangeName(command.Name);
            mark.ChangeDescription(command.Description);

            _dbContext.Marks.Update(mark);
            _dbContext.SaveChanges();
            _result = new SuccessResult();
        }
예제 #15
0
        public override void Handle(CreateMarkCommand command)
        {
            Dictionary dict = _dbContext.Dictionaries.Find(command.DictionaryId);

            if (dict == null)
            {
                _result = new InvalidResult()
                          .WithError("No dictionary of this id has been found.");
            }

            Mark newMark = new Mark(command.Name, command.Description, dict);

            _dbContext.Marks.Add(newMark);
            _dbContext.SaveChanges();
            _result = new SuccessResult();

            command.Id = newMark.Id;
        }
        public override void Handle(CreateWordCommand command)
        {
            Theme theme = (from d in _dbContext.Themes
                           where d.Id == command.ThemeId && d.DictionaryId == command.DictionaryId
                           select d).SingleOrDefault();

            if (theme == null)
            {
                _result = new InvalidResult().WithError("No theme of this id has been found.");
                return;
            }

            Word newWord = new Word(command.Term, command.Meaning, theme);

            _dbContext.Words.Add(newWord);
            _dbContext.SaveChanges();

            _result = new SuccessResult();
        }
        public override void Handle(EditThemeCommand command)
        {
            Theme themeToChange = _dbContext.Themes.Find(command.Id);

            if (themeToChange == null)
            {
                _result = new InvalidResult()
                          .WithError("No theme of this id has been found.");
            }

            Theme parent = _dbContext.Themes.Find(command.ParentId);

            themeToChange.ChangeName(command.Name);
            themeToChange.ChangeParent(parent);

            _dbContext.Themes.Update(themeToChange);
            _dbContext.SaveChanges();
            _result = new SuccessResult();
        }
예제 #18
0
        /// <summary>
        /// Adds a track to a conference
        /// </summary>
        /// <param name="trackId">Unique identity of a track</param>
        /// <returns>An instance of <c>TrackId</c></returns>
        public Result <TrackId> AddTrack(TrackId trackId)
        {
            var addTrackResult = Track.Create(trackId);

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

            var addedTrack   = addTrackResult.Data;
            var trackCreated = new TrackCreated(addedTrack.TrackId);

            AddEvent(trackCreated);

            _tracks.Add(addedTrack);
            var trackAddedToConference = new TrackAddedToConference(addedTrack.TrackId, ConferenceId);

            AddEvent(trackAddedToConference);

            return(SuccessResult <TrackId> .Create(addedTrack.TrackId));
        }
예제 #19
0
        public override void Handle(DeleteThemeCommand command)
        {
            Theme theme = (from t in _dbContext.Themes
                           where t.Id == command.Id && t.DictionaryId == command.DictionaryId
                           select t).SingleOrDefault();

            if (theme == null)
            {
                _result = new InvalidResult()
                          .WithError("No theme of this id has been found.");
            }

            foreach (Word word in theme.Words)
            {
                _dbContext.Words.Remove(word);
            }

            _dbContext.Themes.Remove(theme);
            _dbContext.SaveChanges();
            _result = new SuccessResult();
        }
        public override void Handle(AddMarkToDictionaryCommand command)
        {
            Mark       mark       = _dbContext.Marks.Find(command.MarkId);
            Dictionary dictionary = _dbContext.Dictionaries.Find(command.DictionaryId);

            if (mark == null)
            {
                _result = new InvalidResult().WithError("No mark of this id has been found");
                return;
            }

            if (dictionary == null)
            {
                _result = new InvalidResult().WithError("No dictionary of this id has been found");
                return;
            }

            dictionary.AddMark(mark);
            _dbContext.SaveChanges();

            _result = new SuccessResult();
        }
예제 #21
0
        public override void Handle(CreateThemeCommand command)
        {
            Dictionary dict   = _dbContext.Dictionaries.Find(command.DictionaryId);
            Theme      parent = _dbContext.Themes.Find(command.ParentId);

            if (dict == null)
            {
                _result = new InvalidResult()
                          .WithError("No dictionary of this id has been found.");
            }

            Theme newTheme = new ThemeBuilder()
                             .SetName(command.Name)
                             .SetDictionary(dict)
                             .SetParent(parent)
                             .Build();

            _dbContext.Themes.Add(newTheme);
            _dbContext.SaveChanges();
            _result = new SuccessResult();

            command.Id = newTheme.Id;
        }
예제 #22
0
 protected virtual void OnInvalidResult(ValidationHandlerArgs e)
 {
     InvalidResult?.Invoke(this, e);
 }