public AppEvent SendCommandToDeviceAPI(SendCommandToDeviceAPIModel model, QCDevice entity, ClaimsPrincipal principal) { string username = principal.FindFirstValue(AppClaimType.UserName); var ev = new AppEvent { Data = null, Description = $"User {username} sent cmd {model.Command} to QC device with code {entity.Code} id: {entity.Id}", Type = Data.Constants.AppEventType.SendCommandToDeviceAPI, UserId = principal.Identity.Name }; PrepareCreate(ev); return(context.AppEvent.Add(ev).Entity); }
public async Task <IActionResult> SendCommandToDeviceAPI(SendCommandToDeviceAPIModel model) { var entity = _service.QCDevices.Id(model.DeviceId).FirstOrDefault(); if (entity == null) { return(NotFound(AppResult.NotFound())); } var validationData = _service.ValidateSendCommandToDeviceAPI(User, model); if (!validationData.IsValid) { return(BadRequest(AppResult.FailValidation(data: validationData))); } object respData = null; switch (model.Command) { case Business.Constants.QCEventOps.GET_EVENTS: var(succ, fail, latest) = await _service.SendCommandGetEvents(model, entity, entity.Config); respData = new { success = succ, fail = fail }; context.SaveChanges(); if (latest != null) { await _service.SendCommandUpdateLastEventTime(new UpdateLastEventTimeModel { UtcTime = latest.Value }, entity, entity.Config); } break; case Business.Constants.QCEventOps.DOWNLOAD_IMAGES: var(stream, fileName) = await _service.SendCommandDownloadImages( model, entity, entity.Config); return(File(stream, MediaTypeNames.Application.Zip, fileName)); case Business.Constants.QCEventOps.CLEAR_ALL: var deleted = await _service.SendCommandClearAllEvents( model, entity, entity.Config); respData = deleted; break; case Business.Constants.QCEventOps.TRIGGER_SEND: var dateTimeOffset = await _service.SendCommandTriggerSendUnsent( model, entity, entity.Config); respData = dateTimeOffset; break; } // must be in transaction var ev = _ev_service.SendCommandToDeviceAPI(model, entity, User); context.SaveChanges(); return(Ok(AppResult.Success(respData))); }