public Reservation ReserveBook(int member, int itemId, DateTimeOffset from, DateTimeOffset to)
        {
            bool isFree = true, bookingAvailable = true;

            var res = new Reservation
            {
                BookId   = itemId,
                From     = from,
                To       = to,
                MemberId = member
                           // IsDeleted = false
            };


            var b = _bookRepository.Get(itemId);

            // if book is already reserved during this time
            foreach (var r in b.Reservations)
            {
                if (to > r.From)
                {
                    if (to < r.To)
                    {
                        isFree = false;
                    }
                }


                else if (from > r.From)
                {
                    if (from < r.To)
                    {
                        isFree = false;
                    }
                }
            }

            if (isFree && _memberRepository.Get(member).Reservations.Count(r => r.From > DateTime.Now) < 3)
            {
                _memberRepository.AddReservation(res);
                EventDispatcher.Instance.Dispatch(new ReservationCreatedEvent {
                    BookId = res.BookId
                });
            }
            else
            {
                res = null;
            }

            if (res != null)
            {
                _memberRepository.Get(member).Reminders.Add(new Reminder {
                    Date = to.AddDays(-1), BookId = itemId
                });
            }

            return(res);
        }