コード例 #1
0
        public static void Validate(BookItemStatus itemStatus, BookItemStatus newStatus)
        {
            switch (itemStatus)
            {
            case BookItemStatus.Read:
                if (newStatus == BookItemStatus.Read)
                {
                    break;
                }
                throw new CannotChangeStatusException(itemStatus, newStatus);

            case BookItemStatus.Reading:
            case BookItemStatus.StartedButPostponed:
                if (newStatus == BookItemStatus.ToReading)
                {
                    throw new CannotChangeStatusException(itemStatus, newStatus);
                }
                break;

            case BookItemStatus.ToReading:
                if (newStatus == BookItemStatus.Read || newStatus == BookItemStatus.StartedButPostponed)
                {
                    throw new CannotChangeStatusException(itemStatus, newStatus);
                }
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(itemStatus), itemStatus.ToString("G"), null);
            }
        }
コード例 #2
0
        public static int Calculate(int previousTime, BookItemStatus previousStatus, DateTimeOffset previousDate,
                                    BookItemStatus newStatus)
        {
            var diff = default(int);

            if (previousStatus == newStatus)
            {
                return(previousTime + diff);
            }
            switch (newStatus)
            {
            case BookItemStatus.StartedButPostponed:
            case BookItemStatus.Read:
                diff = Convert.ToInt32(Math.Round((DateTime.UtcNow - previousDate).TotalSeconds,
                                                  MidpointRounding.AwayFromZero));
                break;

            case BookItemStatus.ToReading:
            case BookItemStatus.Reading:
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(newStatus), newStatus, null);
            }

            return(previousTime + diff);
        }
コード例 #3
0
        public static void Update(this PrivateBookListItem item, Dictionary <string, object> source,
                                  BookItemStatus newStatus)
        {
            var newReadingTime = ReadingTimeCalculator.Calculate(item.ReadingTimeInSeconds, item.Status,
                                                                 item.LastStatusUpdateDate, newStatus);

            source.Add(nameof(PrivateBookListItem.ReadingTimeInSeconds), newReadingTime);
            ObjectUpdater <PrivateBookListItem> .Update(item, source);
        }
コード例 #4
0
 public CannotChangeStatusException(BookItemStatus from, BookItemStatus to)
     : base(string.Format(ExceptionMessages.CannotChangeStatusFromTo, from.ToStringFromDescription(),
                          to.ToStringFromDescription()))
 {
 }