Beispiel #1
0
        public IActionResult NewReservation(ReservationViewModel model)
        {
            if (!ModelState.IsValid)
            {
                model.AccountList   = _accountQueryService.GetAllAccountData().AccountDataList;
                model.EquipmentList = _equipmentQueryService.GetAllEquipmentData().EquipmentDataList;
                ModelState.AddModelError(string.Empty, "入力内容が不正です。");
                return(View(model));
            }

            var request = new RegisterReservationRequest()
            {
                AccountId     = model.SelectedAccountId,
                EquipmentId   = model.SelectedEquipmentId,
                StartDateTime = model.GetStartDateTime().Value,
                EndDateTime   = model.GetEndDateTime().Value,
                PurposeOfUse  = model.PurposeOfUse
            };

            try
            {
                _reservationAppService.RegisterReservation(request);
            }
            catch (ReservationDupulicationException)
            {
                model.AccountList   = _accountQueryService.GetAllAccountData().AccountDataList;
                model.EquipmentList = _equipmentQueryService.GetAllEquipmentData().EquipmentDataList;
                ModelState.AddModelError(string.Empty, "予約が重複しています。");
                return(View(model));
            }

            return(RedirectToAction("Index"));
        }
        public void RegisterReservation(RegisterReservationRequest request)
        {
            _unitOfWork.Begin();

            try
            {
                _unitOfWork.ReservationRepository.Lock();

                var reservation = new Reservation(
                    new ReservationId(),
                    new AccountId(request.AccountId),
                    new EquipmentId(request.EquipmentId),
                    new ReservationDateTime(request.StartDateTime, request.EndDateTime),
                    new PurposeOfUse(request.PurposeOfUse),
                    ReservationStatus.Reserved);

                SaveReservation(reservation);

                _unitOfWork.Commit();
            }
            catch
            {
                _unitOfWork.Rollback();
                throw;
            }
        }