public async Task <IActionResult> Patch(int eventConditionId, [FromBody] JsonPatchDocument <EventConditionViewModel> patch)
        {
            if (ModelState.IsValid)
            {
                if (patch == null)
                {
                    return(BadRequest($"{nameof(patch)} cannot be null"));
                }

                EventConditionViewModel eventConditionVM = _mapper.Map <EventConditionViewModel>(await _repository.FindAsync(eventConditionId));
                patch.ApplyTo(eventConditionVM, e => ModelState.AddModelError("", e.ErrorMessage));
                if (ModelState.IsValid)
                {
                    _repository.Update(_mapper.Map <EventCondition>(eventConditionVM));
                    await _unitOfWork.SaveChangesAsync();

                    EventCondition updatedEventCondition = await _repository.FindAsync(eventConditionId);

                    eventConditionVM = _mapper.Map <EventConditionViewModel>(updatedEventCondition);
                    return(Ok(eventConditionVM));
                }
            }

            return(BadRequest(ModelState));
        }
        public async Task <IActionResult> Post([FromBody] EventConditionViewModel eventConditionVM)
        {
            if (ModelState.IsValid)
            {
                if (eventConditionVM == null)
                {
                    return(BadRequest($"{nameof(eventConditionVM)} cannot be null"));
                }
                if (eventConditionVM?.DataPoint?.DataPointId > 0)
                {
                    eventConditionVM.DataPoint = null;
                }
                if (eventConditionVM.Event != null)
                {
                    eventConditionVM.Event = null;
                }
                EventCondition eventCondition = _mapper.Map <EventCondition>(eventConditionVM);
                EntityEntry <EventCondition> addedEventCondition = await _repository.InsertAsync(eventCondition);

                await _unitOfWork.SaveChangesAsync();

                eventConditionVM = _mapper.Map <EventConditionViewModel>(addedEventCondition.Entity);
                return(CreatedAtAction("GetByEventConditionId", new { eventConditionId = eventConditionVM.EventConditionId }, eventConditionVM));
            }
            else
            {
                return(BadRequest(ModelState));
            }
        }
        public async Task <IActionResult> Put(int eventConditionId, [FromBody] EventConditionViewModel eventConditionVM)
        {
            if (ModelState.IsValid)
            {
                if (eventConditionVM == null)
                {
                    return(BadRequest($"{nameof(eventConditionVM)} cannot be null"));
                }

                if (eventConditionId != eventConditionVM.EventConditionId)
                {
                    return(BadRequest("Conflicting EventCondition EventConditionId in parameter and model data"));
                }

                _repository.Update(_mapper.Map <EventCondition>(eventConditionVM));
                await _unitOfWork.SaveChangesAsync();

                EventCondition updatedEventCondition = await _repository.FindAsync(eventConditionId);

                eventConditionVM = _mapper.Map <EventConditionViewModel>(updatedEventCondition);
                return(Ok(eventConditionVM));
            }
            else
            {
                return(BadRequest(ModelState));
            }
        }
        public async Task <IActionResult> Delete(int eventConditionId)
        {
            EventCondition eventCondition = await _repository.FindAsync(eventConditionId);

            if (eventCondition == null)
            {
                return(NotFound(eventConditionId));
            }

            _repository.Delete(eventCondition);
            await _unitOfWork.SaveChangesAsync();

            EventConditionViewModel eventConditionVM = _mapper.Map <EventConditionViewModel>(eventCondition);

            return(Ok(eventConditionVM));
        }