public async Task PopulateRoomAsync <TDtoEntity>(int roomId, TDtoEntity populationDto) { // получаем комнату Room room = await repository.GetByIdAsync(roomId); // проверим, существует ли комната if (room == null) { // не существует throw new ArgumentOutOfRangeException(); } else { ReserveDataDto reserveDataDto = mapper.Map <ReserveDataDto>(populationDto); RoomStatus roomStatus = null; // проверим, была ли комната зарезервирована if (room.Status != null) { // запись уже есть, значит обновим ее под период проживания roomStatus = room.Status; roomStatus.ReserveStart = reserveDataDto.ReserveStart; roomStatus.ReserveEnd = reserveDataDto.ReserveEnd; //обновляем _roomStatusRepository.Update(roomStatus); } else { // добавим новую запись roomStatus = new RoomStatus { RoomId = roomId, ReserveStart = reserveDataDto.ReserveStart, ReserveEnd = reserveDataDto.ReserveEnd }; //добавляем _roomStatusRepository.Insert(roomStatus); } // сохраним запись о проживании await unitOfWork.SaveAsync(); // теперь идем по клиентам // маппинг в доменные модели клиентов IEnumerable <Client> domainClients = mapper.Map <IEnumerable <Client> >( mapper.Map <ClientsEnumerableDto>(populationDto).ClientsEnumerable); // заселяем клиентов foreach (var client in domainClients) { client.RoomStatusId = roomStatus.Id; _clientRepository.Insert(client); } // сохраняем контекст await unitOfWork.SaveAsync(); } }
public async Task ReserveRoomAsync(int roomId, [FromBody] ReserveDataDto data) { if (ModelState.IsValid) { await _service.ReserveRoomAsync(roomId, data.ReserveStart, data.ReserveEnd); } else { throw new ArgumentException("Invalid DTO model"); } }
/// <summary> /// Зарезервировать комнату /// </summary> /// <param name="roomDto">DTO комнаты</param> /// <param name="reserveDataDto">Данные резервирования</param> public void ReserveRoom(RoomDto roomDto, ReserveDataDto reserveDataDto) { _hotelProvider.ReserveRoom(roomDto.Id, reserveDataDto); }