public async Task ProcessLockedTasks(string workerId, LockedExternalTask lockedExternalTask) { var executor = GetExecutor(lockedExternalTask.TopicName); var executorAttribute = GetExecutorAttributeData(executor); var externalTask = lockedExternalTask.ToExternalTask(); try { var resultVariables = await ExecuteExternalTask(executor, externalTask); var completeExternalTask = new CompleteExternalTask { WorkerId = workerId, Variables = resultVariables.ToVariableDictionary() }; await _engineClient.Client().ExternalTasks[externalTask.Id].Complete(completeExternalTask); } catch (ExternalTaskException ex) { HandleExternalTaskException(workerId, externalTask, ex); } catch (Exception ex) { HandleException(workerId, executorAttribute, externalTask, ex); } }
private static void CompleteTask(CamundaClient camunda, LockedExternalTask task, string response) { var completion = new CompleteExternalTask(); completion.WorkerId = task.WorkerId; completion.SetVariable("AsyncPostResponse", response); camunda.ExternalTasks[task.Id].Complete(completion); Console.WriteLine($"Finsihed Processing {task.Id} for {task.WorkerId}"); }
protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { _logger.LogInformation($"{WORKER_ID} running at: {DateTimeOffset.Now}"); // Starting camunda client CamundaClient camunda = CamundaClient.Create("http://localhost:8080/engine-rest"); // Fetching available tasks for that topic var fetchExternalTasks = new FetchExternalTasks() { MaxTasks = 10, WorkerId = WORKER_ID, Topics = new List <FetchExternalTaskTopic>() { new FetchExternalTaskTopic("persist_user", 2000) } }; List <LockedExternalTask> lockedExternalTasks = await camunda.ExternalTasks.FetchAndLock(fetchExternalTasks); // Processing the tasks foreach (LockedExternalTask lockedExternalTask in lockedExternalTasks) { // Loading all variables from this task Dictionary <string, VariableValue> taskVariables = lockedExternalTask.Variables; var name = taskVariables["name"]; var password = taskVariables["password"]; var userId = new Random().Next(1, 100); // Process the task as you wish _logger.LogInformation($"Persisting on DB. New user: {name}, password: {password}. Generated ID: {userId}"); // Setting output variables Dictionary <string, VariableValue> outputVariables = new Dictionary <string, VariableValue> { { "user_id", VariableValue.FromObject(userId) } }; // Completes task var completeExternalTask = new CompleteExternalTask() { Variables = outputVariables, WorkerId = WORKER_ID, }; await camunda.ExternalTasks[lockedExternalTask.Id].Complete(completeExternalTask); } await Task.Delay(_serviceConfiguration.Interval, stoppingToken); } }
public void Execute(LockedExternalTask lockedExternalTask) { var resultVariables = new Dictionary <string, VariableValue>(); Console.WriteLine($"Executing External Task {lockedExternalTask.Id} from topic {topicManagerInfo.TopicName}"); try { topicManagerInfo.TaskAdapter.Execute(lockedExternalTask, ref resultVariables); var completeExternalTask = new CompleteExternalTask() { WorkerId = workerId, Variables = resultVariables }; policyManager.completePolicy().Execute(() => { externalTaskService[lockedExternalTask.Id].Complete(completeExternalTask).Wait(); Console.WriteLine($"Finished External Task {lockedExternalTask.Id} from topic {topicManagerInfo.TopicName}..."); }); } catch (UnrecoverableBusinessErrorException ex) { Console.WriteLine($"Failed with business error code {ex.BusinessErrorCode} for External Task {lockedExternalTask.Id} in topic {topicManagerInfo.TopicName}..."); var externalTaskBpmnError = new ExternalTaskBpmnError { WorkerId = workerId, ErrorCode = ex.BusinessErrorCode, ErrorMessage = ex.Message }; policyManager.handleBpmnErrorPolicy().Execute(() => externalTaskService[lockedExternalTask.Id].HandleBpmnError(externalTaskBpmnError).Wait()); } catch (UnlockTaskException ex) { Console.WriteLine($"Unlock requested for External Task {lockedExternalTask.Id} in topic {topicManagerInfo.TopicName}..."); policyManager.unlockPolicy().Execute(() => externalTaskService[lockedExternalTask.Id].Unlock().Wait()); } catch (Exception ex) { Console.WriteLine($"Failed External Task {lockedExternalTask.Id} in topic {topicManagerInfo.TopicName}..."); var retriesLeft = topicManagerInfo.Retries; // start with default if (lockedExternalTask.Retries.HasValue) // or decrement if retries are already set { retriesLeft = lockedExternalTask.Retries.Value - 1; } var externalTaskFailure = new ExternalTaskFailure() { WorkerId = workerId, Retries = retriesLeft, ErrorMessage = ex.Message, ErrorDetails = ex.StackTrace }; policyManager.handleFailurePolicy().Execute(() => externalTaskService[lockedExternalTask.Id].HandleFailure(externalTaskFailure).Wait()); } }
private void Execute(LockedExternalTask lockedExternalTask, Type type) { ExternalTask externalTask = lockedExternalTask.ToExternalTask(); var resultVariables = new Dictionary <string, object>(); try { LogEventToConsole($"{externalTask.ProcessDefinitionId} {externalTask.TopicName} Started", "INFO"); CreateAdapterInstanceAndExecute(externalTask, ref resultVariables, type); LogEventToConsole($"{externalTask.ProcessDefinitionId} {externalTask.TopicName} Finished", "INFO"); CompleteExternalTask completeExternalTask = new CompleteExternalTask() { WorkerId = _workerId, Variables = resultVariables.ToVariableDictionary() }; _camundaClient.ExternalTasks[externalTask.Id].Complete(completeExternalTask); } catch (ExternalTaskException ex) { LogEventToConsole($"{externalTask.ProcessDefinitionId} {externalTask.TopicName} {ex.Message}", "ERROR"); ExternalTaskBpmnError externalTaskBpmnError = new ExternalTaskBpmnError() { WorkerId = _workerId, ErrorCode = ex.BusinessErrorCode }; _camundaClient.ExternalTasks[externalTask.Id].HandleBpmnError(externalTaskBpmnError); } catch (Exception ex) { LogEventToConsole($"{externalTask.ProcessDefinitionId} {externalTask.TopicName} {ex.Message}", "ERROR"); var retriesLeft = _externalTaskWorkerInfo.Retries; // start with default if (externalTask.Retries.HasValue) // or decrement if retries are already set { retriesLeft = externalTask.Retries.Value - 1; } ExternalTaskFailure externalTaskFailure = new ExternalTaskFailure() { WorkerId = _workerId, ErrorMessage = ex.Message, ErrorDetails = ex.StackTrace, RetryTimeout = _externalTaskWorkerInfo.RetryTimeout, Retries = retriesLeft }; _camundaClient.ExternalTasks[externalTask.Id].HandleFailure(externalTaskFailure); } }
public void RunExternalTasks(List <LockedExternalTask> lockedExternalTasks, Dictionary <string, VariableValue> variables) { Console.WriteLine($"Number of external tasks to be completed {lockedExternalTasks.Count}"); foreach (LockedExternalTask lockedExternalTask in lockedExternalTasks) { var completeExternalTask = new CompleteExternalTask() { WorkerId = TestWorkerId, Variables = variables }; CamundaClient.ExternalTasks[lockedExternalTask.Id].Complete(completeExternalTask).Wait(); Console.WriteLine($"Completed external task {lockedExternalTask.Id}"); } }
protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { _logger.LogInformation($"{WORKER_ID} running at: {DateTimeOffset.Now}"); // Starting camunda client CamundaClient camunda = CamundaClient.Create("http://localhost:8080/engine-rest"); // Fetching available tasks for that topic var fetchExternalTasks = new FetchExternalTasks() { MaxTasks = 10, WorkerId = WORKER_ID, Topics = new List <FetchExternalTaskTopic>() { new FetchExternalTaskTopic("send_email", 2000) } }; List <LockedExternalTask> lockedExternalTasks = await camunda.ExternalTasks.FetchAndLock(fetchExternalTasks); // Processing the tasks foreach (LockedExternalTask lockedExternalTask in lockedExternalTasks) { // Loading all variables from this task Dictionary <string, VariableValue> taskVariables = lockedExternalTask.Variables; var userId = taskVariables["user_id"]; // Process the task as you wish _logger.LogInformation($"Sending email to user: {userId}"); // Completes task var completeExternalTask = new CompleteExternalTask() { WorkerId = WORKER_ID }; await camunda.ExternalTasks[lockedExternalTask.Id].Complete(completeExternalTask); } await Task.Delay(_serviceConfiguration.Interval, stoppingToken); } }
private async static void UploadTimeOutCheck(WorkApplicationData data, LitUdrContext context, IConfiguration _configuration) { //provera da li je pisac uplatio clanarinu HttpResponseMessage taskResponseCheck = await client.GetAsync($"{_configuration["url"]}/external-task?processDefinitionId={data.processDefinitionId}&&processInstanceId={data.processInstanceId}"); Task <string> jsonStringResultCheck = taskResponseCheck.Content.ReadAsStringAsync(); List <CamundaTask> tasksCheck = JsonConvert.DeserializeObject <List <CamundaTask> >(jsonStringResultCheck.Result); if (tasksCheck.Count > 0) { ControlFlow.ResumeOnError(() => { EmailService.SendEmail(new UserDto() { Email = data.WriterEmail }, context, "LateUpload"); }); //logujem ga FetchAndLock fetchAndLockFail = new FetchAndLock() { workerId = data.WriterEmail, maxTasks = 10, topics = new List <Topic>() { new Topic() { lockDuration = 10000, topicName = "NotificiranjeONePostovanjuRoka" } } }; var fetchAndLockContentFail = new StringContent(JsonConvert.SerializeObject(fetchAndLockFail), Encoding.UTF8, "application/json"); HttpResponseMessage lockExternalTaskFail = await client.PostAsync($"{_configuration["url"]}/external-task/fetchAndLock", fetchAndLockContentFail); //daj mi moj lokovan da izvucem id HttpResponseMessage externalTaskInfoFail = await client.GetAsync($"{_configuration["url"]}/external-task?workerId={data.WriterEmail}"); Task <string> jsonStringResult_1Fail = externalTaskInfoFail.Content.ReadAsStringAsync(); List <CamundaExternalTask> externalTasksFail = JsonConvert.DeserializeObject <List <CamundaExternalTask> >(jsonStringResult_1Fail.Result); CamundaExternalTask currenTaskFail = externalTasksFail.First(); //prosledimm reziltat CompleteExternalTask completeExternalTaskFail = new CompleteExternalTask() { workerId = data.WriterEmail, variables = null }; var completeExternalTaskContentFail = new StringContent(JsonConvert.SerializeObject(completeExternalTaskFail), Encoding.UTF8, "application/json"); HttpResponseMessage commpleteExternalTaskFail = await client.PostAsync($"{_configuration["url"]}/external-task/{currenTaskFail.id}/complete", completeExternalTaskContentFail); } }
public async Task <IActionResult> PostReviewData([FromBody] ReviewDto dto) { if (dto == null) { return(BadRequest()); } User boardMember = _context.Users.FirstOrDefault(u => u.Email.Equals(dto.Token)); WorkApplicationData data = _context.workApplicationData.FirstOrDefault(wad => wad.Id.Equals(dto.Id)); List <UserReview> allReviews = _context.UserReview.Where(ur => ur.WorkApplicationDataId.Equals(dto.Id)).ToList(); UserReview currentReview = allReviews.Find(u => u.WorkApplicationDataId.Equals(data.Id) && u.UserId.Equals(boardMember.Id)); data.Comments += $"\n {boardMember.Email}: {dto.Comment} \n"; switch (dto.Result) { case "approve": _context.UserReview.Remove(currentReview); data.BoardMembersApprove += 1; _context.workApplicationData.Update(data); _context.SaveChanges(); break; case "decline": _context.UserReview.Remove(currentReview); _context.SaveChanges(); break; case "needMoreData": _context.UserReview.Remove(currentReview); data.BoardMembeNeedsMoreData = true; _context.workApplicationData.Update(data); _context.SaveChanges(); break; } //TODO u workaplication data sacuvati komentare u novom polu i posle ih proslediti kroz mail List <UserReview> currentAllReviews = _context.UserReview.Where(ur => ur.WorkApplicationDataId.Equals(dto.Id)).ToList(); if (currentAllReviews.Count > 0) { HttpResponseMessage taskResponse = await client.GetAsync($"{_configuration["url"]}/task?processDefinitionId={data.processDefinitionId}&&processInstanceId={data.processInstanceId}"); Task <string> jsonStringResult = taskResponse.Content.ReadAsStringAsync(); List <CamundaTask> tasks = JsonConvert.DeserializeObject <List <CamundaTask> >(jsonStringResult.Result); if (tasks.Count == 0) { return(BadRequest()); } var content = new StringContent("{}", Encoding.UTF8, "application/json"); HttpResponseMessage commpleteTask = await client.PostAsync($"{_configuration["url"]}/task/{tasks[0].id}/complete", content); } else { HttpResponseMessage taskResponse = await client.GetAsync($"{_configuration["url"]}/task?processDefinitionId={data.processDefinitionId}&&processInstanceId={data.processInstanceId}"); Task <string> jsonStringResult = taskResponse.Content.ReadAsStringAsync(); List <CamundaTask> tasks = JsonConvert.DeserializeObject <List <CamundaTask> >(jsonStringResult.Result); if (tasks.Count == 0) { return(BadRequest()); } StringContent content; if (data.BoardMembeNeedsMoreData) { content = new StringContent(JsonConvert.SerializeObject(new CompleteUserTaskWithVariable() { variables = new WriterFailedAbstract() { WriterFailed = new object() } }), Encoding.UTF8, "application/json"); HttpResponseMessage commpleteTask = await client.PostAsync($"{_configuration["url"]}/task/{tasks[0].id}/complete", content); try { string guid = Guid.NewGuid().ToString(); ControlFlow.ResumeOnError(() => { EmailService.SendEmail(new UserDto() { Email = data.WriterEmail, Password = guid, FirstName = data.Comments }, _context, "NeedMoreWork"); }); NewUserData newUserData = new NewUserData() { Hash = guid, NewUserEmmail = data.WriterEmail, processDefinitionId = data.processDefinitionId, processInstanceId = data.processInstanceId }; _context.NewUserData.Add(newUserData); _context.SaveChanges(); //TODO sacuvati u bazu i obrnuti krug //logujem ga FetchAndLock fetchAndLockFail = new FetchAndLock() { workerId = data.WriterEmail, maxTasks = 10, topics = new List <Topic>() { new Topic() { lockDuration = 10000, topicName = "NotificiranjeIDavanjeRoka" } } }; var fetchAndLockContentFail = new StringContent(JsonConvert.SerializeObject(fetchAndLockFail), Encoding.UTF8, "application/json"); HttpResponseMessage lockExternalTaskFail = await client.PostAsync($"{_configuration["url"]}/external-task/fetchAndLock", fetchAndLockContentFail); //daj mi moj lokovan da izvucem id HttpResponseMessage externalTaskInfoFail = await client.GetAsync($"{_configuration["url"]}/external-task?workerId={data.WriterEmail}"); Task <string> jsonStringResult_1Fail = externalTaskInfoFail.Content.ReadAsStringAsync(); List <CamundaExternalTask> externalTasksFail = JsonConvert.DeserializeObject <List <CamundaExternalTask> >(jsonStringResult_1Fail.Result); CamundaExternalTask currenTaskFail = externalTasksFail.First(); //prosledimm reziltat CompleteExternalTask completeExternalTaskFail = new CompleteExternalTask() { workerId = data.WriterEmail, variables = null }; var completeExternalTaskContentFail = new StringContent(JsonConvert.SerializeObject(completeExternalTaskFail), Encoding.UTF8, "application/json"); HttpResponseMessage commpleteExternalTaskFail = await client.PostAsync($"{_configuration["url"]}/external-task/{currenTaskFail.id}/complete", completeExternalTaskContentFail); const int scheduledPeriodMilliseconds = 70000; var allTasksWaitHandle = new AutoResetEvent(true); ThreadPool.RegisterWaitForSingleObject( allTasksWaitHandle, (s, b) => { UploadTimeOutCheck(data, _context, _configuration); }, null, scheduledPeriodMilliseconds, false); } catch (Exception e) { return(BadRequest()); } } else if (data.BoardMembersApprove == data.BoardMembersInitialCount) { content = new StringContent(JsonConvert.SerializeObject(new CompleteUserTaskWithVariable() { variables = new WriterFailedAbstract() { WriterFailed = new WriterFailed() { value = false } } }), Encoding.UTF8, "application/json"); HttpResponseMessage commpleteTask = await client.PostAsync($"{_configuration["url"]}/task/{tasks[0].id}/complete", content); try { string guid = Guid.NewGuid().ToString(); ControlFlow.ResumeOnError(() => { EmailService.SendEmail(new UserDto() { Email = data.WriterEmail, Password = guid, FirstName = data.Comments }, _context, "Approved"); }); NewUserData newUserData = new NewUserData() { Hash = guid, processDefinitionId = data.processDefinitionId, processInstanceId = data.processInstanceId }; _context.NewUserData.Add(newUserData); _context.SaveChanges(); //logujem ga FetchAndLock fetchAndLockFail = new FetchAndLock() { workerId = data.WriterEmail, maxTasks = 10, topics = new List <Topic>() { new Topic() { lockDuration = 10000, topicName = "NotificiranjeOUspehu" } } }; var fetchAndLockContentFail = new StringContent(JsonConvert.SerializeObject(fetchAndLockFail), Encoding.UTF8, "application/json"); HttpResponseMessage lockExternalTaskFail = await client.PostAsync($"{_configuration["url"]}/external-task/fetchAndLock", fetchAndLockContentFail); //daj mi moj lokovan da izvucem id HttpResponseMessage externalTaskInfoFail = await client.GetAsync($"{_configuration["url"]}/external-task?workerId={data.WriterEmail}"); Task <string> jsonStringResult_1Fail = externalTaskInfoFail.Content.ReadAsStringAsync(); List <CamundaExternalTask> externalTasksFail = JsonConvert.DeserializeObject <List <CamundaExternalTask> >(jsonStringResult_1Fail.Result); CamundaExternalTask currenTaskFail = externalTasksFail.First(); //prosledimm reziltat CompleteExternalTask completeExternalTaskFail = new CompleteExternalTask() { workerId = data.WriterEmail, variables = null }; var completeExternalTaskContentFail = new StringContent(JsonConvert.SerializeObject(completeExternalTaskFail), Encoding.UTF8, "application/json"); HttpResponseMessage commpleteExternalTaskFail = await client.PostAsync($"{_configuration["url"]}/external-task/{currenTaskFail.id}/complete", completeExternalTaskContentFail); const int scheduledPeriodMilliseconds = 70000; var allTasksWaitHandle = new AutoResetEvent(true); ThreadPool.RegisterWaitForSingleObject( allTasksWaitHandle, (s, b) => { TimeOutCheck(data, _context, _configuration); }, null, scheduledPeriodMilliseconds, false); } catch (Exception e) { return(BadRequest()); } } else if (data.BoardMembersApprove < (data.BoardMembersInitialCount - data.BoardMembersApprove)) { content = new StringContent(JsonConvert.SerializeObject(new CompleteUserTaskWithVariable() { variables = new WriterFailedAbstract() { WriterFailed = new WriterFailed() { value = true } } }), Encoding.UTF8, "application/json"); HttpResponseMessage commpleteTask = await client.PostAsync($"{_configuration["url"]}/task/{tasks[0].id}/complete", content); try { ControlFlow.ResumeOnError(() => { EmailService.SendEmail(new UserDto() { Email = data.WriterEmail, FirstName = data.Comments }, _context, "Declined"); }); //logujem ga FetchAndLock fetchAndLockFail = new FetchAndLock() { workerId = data.WriterEmail, maxTasks = 10, topics = new List <Topic>() { new Topic() { lockDuration = 10000, topicName = "NotificiranjeOOdbijanju" } } }; var fetchAndLockContentFail = new StringContent(JsonConvert.SerializeObject(fetchAndLockFail), Encoding.UTF8, "application/json"); HttpResponseMessage lockExternalTaskFail = await client.PostAsync($"{_configuration["url"]}/external-task/fetchAndLock", fetchAndLockContentFail); //daj mi moj lokovan da izvucem id HttpResponseMessage externalTaskInfoFail = await client.GetAsync($"{_configuration["url"]}/external-task?workerId={data.WriterEmail}"); Task <string> jsonStringResult_1Fail = externalTaskInfoFail.Content.ReadAsStringAsync(); List <CamundaExternalTask> externalTasksFail = JsonConvert.DeserializeObject <List <CamundaExternalTask> >(jsonStringResult_1Fail.Result); CamundaExternalTask currenTaskFail = externalTasksFail.First(); //prosledimm reziltat CompleteExternalTask completeExternalTaskFail = new CompleteExternalTask() { workerId = data.WriterEmail, variables = null }; var completeExternalTaskContentFail = new StringContent(JsonConvert.SerializeObject(completeExternalTaskFail), Encoding.UTF8, "application/json"); HttpResponseMessage commpleteExternalTaskFail = await client.PostAsync($"{_configuration["url"]}/external-task/{currenTaskFail.id}/complete", completeExternalTaskContentFail); const int scheduledPeriodMilliseconds = 70000; var allTasksWaitHandle = new AutoResetEvent(true); ThreadPool.RegisterWaitForSingleObject( allTasksWaitHandle, (s, b) => { UploadTimeOutCheck(data, _context, _configuration); }, null, scheduledPeriodMilliseconds, false); } catch (Exception e) { return(BadRequest()); } } else { content = new StringContent(JsonConvert.SerializeObject(new CompleteUserTaskWithVariable() { variables = new WriterFailedAbstract() { WriterFailed = new object() } }), Encoding.UTF8, "application/json"); HttpResponseMessage commpleteTask = await client.PostAsync($"{_configuration["url"]}/task/{tasks[0].id}/complete", content); try { string guid = Guid.NewGuid().ToString(); ControlFlow.ResumeOnError(() => { EmailService.SendEmail(new UserDto() { Email = data.WriterEmail, Password = guid, FirstName = data.Comments }, _context, "NeedMoreWork"); }); NewUserData newUserData = new NewUserData() { Hash = guid, NewUserEmmail = data.WriterEmail, processDefinitionId = data.processDefinitionId, processInstanceId = data.processInstanceId }; _context.NewUserData.Add(newUserData); _context.SaveChanges(); //logujem ga FetchAndLock fetchAndLockFail = new FetchAndLock() { workerId = data.WriterEmail, maxTasks = 10, topics = new List <Topic>() { new Topic() { lockDuration = 10000, topicName = "NotificiranjeIDavanjeRoka" } } }; var fetchAndLockContentFail = new StringContent(JsonConvert.SerializeObject(fetchAndLockFail), Encoding.UTF8, "application/json"); HttpResponseMessage lockExternalTaskFail = await client.PostAsync($"{_configuration["url"]}/external-task/fetchAndLock", fetchAndLockContentFail); //daj mi moj lokovan da izvucem id HttpResponseMessage externalTaskInfoFail = await client.GetAsync($"{_configuration["url"]}/external-task?workerId={data.WriterEmail}"); Task <string> jsonStringResult_1Fail = externalTaskInfoFail.Content.ReadAsStringAsync(); List <CamundaExternalTask> externalTasksFail = JsonConvert.DeserializeObject <List <CamundaExternalTask> >(jsonStringResult_1Fail.Result); CamundaExternalTask currenTaskFail = externalTasksFail.First(); //prosledimm reziltat CompleteExternalTask completeExternalTaskFail = new CompleteExternalTask() { workerId = data.WriterEmail, variables = null }; var completeExternalTaskContentFail = new StringContent(JsonConvert.SerializeObject(completeExternalTaskFail), Encoding.UTF8, "application/json"); HttpResponseMessage commpleteExternalTaskFail = await client.PostAsync($"{_configuration["url"]}/external-task/{currenTaskFail.id}/complete", completeExternalTaskContentFail); } catch (Exception e) { return(BadRequest()); } } } return(Ok()); }
public async Task <IActionResult> CompleteFileUploadTask([FromBody] NewUserDataDto dto) { if (dto == null) { return(BadRequest()); } NewUserData newUserData = _context.NewUserData.FirstOrDefault(nud => nud.Hash.Equals(dto.Hash)); EntityFramework.Model.User user = _context.Users.FirstOrDefault(u => u.Email.Equals(newUserData.NewUserEmmail)); if (!user.UserVerified) { return(BadRequest()); } if (dto.SimulateFail == true) { user.UserRetryCount += 1; _context.Users.Update(user); _context.SaveChanges(); return(Ok()); } HttpResponseMessage taskResponse = await client.GetAsync($"{_configuration["url"]}/task?processDefinitionId={dto.ProcessDefinitionId}&&processInstanceId={dto.ProcessInstanceId}"); Task <string> jsonStringResult = taskResponse.Content.ReadAsStringAsync(); List <CamundaTask> tasks = JsonConvert.DeserializeObject <List <CamundaTask> >(jsonStringResult.Result); if (tasks.Count == 0) { return(BadRequest()); } //complete task var content = new StringContent("{}", Encoding.UTF8, "application/json"); HttpResponseMessage commpleteTask = await client.PostAsync($"{_configuration["url"]}/task/{tasks[0].id}/complete", content); user.UserRetryCount += 1; _context.Update(user); _context.SaveChanges(); try { WorkApplicationData data = new WorkApplicationData() { BoardMembeNeedsMoreData = false, BoardMembersApprove = 0, BoardMembers = new List <UserReview>(), processDefinitionId = dto.ProcessDefinitionId, processInstanceId = dto.ProcessInstanceId, WriterEmail = user.Email, Comments = "Board member had this to say for your work: \n" }; _context.workApplicationData.Add(data); _context.SaveChanges(); WorkApplicationData currentData = _context.workApplicationData.FirstOrDefault(d => d.Id.Equals(data.Id)); List <User> reviewers = _context.Users.Where(u => u.Email.Contains("clanodbora")).ToList(); currentData.BoardMembersInitialCount = reviewers.Count(); foreach (var reviewer in reviewers) { currentData.BoardMembers.Add(new UserReview() { UserId = reviewer.Id, WorkApplicationDataId = currentData.Id }); } _context.workApplicationData.Update(currentData); _context.SaveChanges(); //logujem ga FetchAndLock fetchAndLock = new FetchAndLock() { workerId = user.Email, maxTasks = 10, topics = new List <Topic>() { new Topic() { lockDuration = 10000, topicName = "ProveraKojiPutPisacPodnosiRadove" } } }; var fetchAndLockContent = new StringContent(JsonConvert.SerializeObject(fetchAndLock), Encoding.UTF8, "application/json"); HttpResponseMessage lockExternalTask = await client.PostAsync($"{_configuration["url"]}/external-task/fetchAndLock", fetchAndLockContent); //daj mi moj lokovan da izvucem id HttpResponseMessage externalTaskInfo = await client.GetAsync($"{_configuration["url"]}/external-task?workerId={user.Email}"); Task <string> jsonStringResult_1 = externalTaskInfo.Content.ReadAsStringAsync(); List <CamundaExternalTask> externalTasks = JsonConvert.DeserializeObject <List <CamundaExternalTask> >(jsonStringResult_1.Result); CamundaExternalTask currenTask = externalTasks.First(); //prosledimm rezultat ClanOdbora clan = new ClanOdbora() { value = user.Email }; ClanoviOdbora clanovi = new ClanoviOdbora() { value = reviewers.ConvertAll <string>(u => u.FirstName) }; NumberOfTrials brojPojusaja = new NumberOfTrials() { value = user.UserRetryCount }; Camunda.Model.ProcessModel.VariablesSecondTask test = new VariablesSecondTask() { ClanOdbora = clan, ClanoviOdbora = clanovi, NumberOfTrials = brojPojusaja }; CompleteExternalTask completeExternalTask = new CompleteExternalTask() { workerId = user.Email, variables = test }; var completeExternalTaskContent = new StringContent(JsonConvert.SerializeObject(completeExternalTask), Encoding.UTF8, "application/json"); HttpResponseMessage commpleteExternalTask = await client.PostAsync($"{_configuration["url"]}/external-task/{currenTask.id}/complete", completeExternalTaskContent); } catch (Exception e) { return(BadRequest()); } if (user.UserRetryCount > 3) { try { EmailService.SendEmail(new UserDto() { Email = user.Email }, _context, "NumberOfUploads"); //logujem ga FetchAndLock fetchAndLockFail = new FetchAndLock() { workerId = user.Email, maxTasks = 10, topics = new List <Topic>() { new Topic() { lockDuration = 10000, topicName = "NotificiranjeONeuspehu" } } }; var fetchAndLockContentFail = new StringContent(JsonConvert.SerializeObject(fetchAndLockFail), Encoding.UTF8, "application/json"); HttpResponseMessage lockExternalTaskFail = await client.PostAsync($"{_configuration["url"]}/external-task/fetchAndLock", fetchAndLockContentFail); //daj mi moj lokovan da izvucem id HttpResponseMessage externalTaskInfoFail = await client.GetAsync($"{_configuration["url"]}/external-task?workerId={user.Email}"); Task <string> jsonStringResult_1Fail = externalTaskInfoFail.Content.ReadAsStringAsync(); List <CamundaExternalTask> externalTasksFail = JsonConvert.DeserializeObject <List <CamundaExternalTask> >(jsonStringResult_1Fail.Result); CamundaExternalTask currenTaskFail = externalTasksFail.First(); //prosledimm reziltat CompleteExternalTask completeExternalTaskFail = new CompleteExternalTask() { workerId = user.Email, variables = null }; var completeExternalTaskContentFail = new StringContent(JsonConvert.SerializeObject(completeExternalTaskFail), Encoding.UTF8, "application/json"); HttpResponseMessage commpleteExternalTaskFail = await client.PostAsync($"{_configuration["url"]}/external-task/{currenTaskFail.id}/complete", completeExternalTaskContentFail); } catch (Exception e) { return(BadRequest()); } } return(Ok()); }
public async Task <IActionResult> Activate(string hash) { if (hash == null) { return(BadRequest()); } try { NewUserData data = _context.NewUserData.FirstOrDefault(ud => ud.Hash.Equals(hash)); User currentUser = _context.Users.FirstOrDefault(u => u.Email.Equals(data.NewUserEmmail)); currentUser.UserVerified = true; _context.Update(currentUser); _context.SaveChanges(); if (data.Writer) { ControlFlow.ResumeOnError(() => { EmailService.SendEmail(new UserDto() { FirstName = data.Hash, Writer = data.Writer, Email = data.NewUserEmmail }, null, "WorkUpload"); }); } HttpResponseMessage taskResponse = await client.GetAsync($"{_configuration["url"]}/task?processDefinitionId={data.processDefinitionId}&&processInstanceId={data.processInstanceId}"); Task <string> jsonStringResult = taskResponse.Content.ReadAsStringAsync(); List <CamundaTask> tasks = JsonConvert.DeserializeObject <List <CamundaTask> >(jsonStringResult.Result); if (tasks.Count == 0) { return(BadRequest()); } var content = new StringContent("{}", Encoding.UTF8, "application/json"); HttpResponseMessage commpleteTask = await client.PostAsync($"{_configuration["url"]}/task/{tasks[0].id}/complete", content); //logujem ga FetchAndLock fetchAndLock = new FetchAndLock() { workerId = currentUser.Email, maxTasks = 10, topics = new List <Topic>() { new Topic() { lockDuration = 10000, topicName = "ProveraKorisnikovePotvrde" } } }; var fetchAndLockContent = new StringContent(JsonConvert.SerializeObject(fetchAndLock), Encoding.UTF8, "application/json"); HttpResponseMessage lockExternalTask = await client.PostAsync($"{_configuration["url"]}/external-task/fetchAndLock", fetchAndLockContent); //daj mi moj lokovan da izvucem id HttpResponseMessage externalTaskInfo = await client.GetAsync($"{_configuration["url"]}/external-task?workerId={currentUser.Email}"); Task <string> jsonStringResult_1 = externalTaskInfo.Content.ReadAsStringAsync(); List <CamundaExternalTask> externalTasks = JsonConvert.DeserializeObject <List <CamundaExternalTask> >(jsonStringResult_1.Result); CamundaExternalTask currenTask = externalTasks.First(); //prosledimm reziltat CompleteExternalTask completeExternalTask = new CompleteExternalTask() { workerId = currentUser.Email, variables = new VariablesFirstTask() { Writer = new Writer() { value = data.Writer } } }; var completeExternalTaskContent = new StringContent(JsonConvert.SerializeObject(completeExternalTask), Encoding.UTF8, "application/json"); HttpResponseMessage commpleteExternalTask = await client.PostAsync($"{_configuration["url"]}/external-task/{currenTask.id}/complete", completeExternalTaskContent); return(Ok()); } catch { return(BadRequest()); } }
public async Task <IActionResult> RegisterNewUser([FromBody] UserDto dto) { int userId = -1; try { var content = new StringContent("{}", Encoding.UTF8, "application/json"); HttpResponseMessage commpleteTask = await client.PostAsync($"{_configuration["url"]}/task/{dto.TaskId}/complete", content); lit_udr.EntityFramework.Model.User newUser = new lit_udr.EntityFramework.Model.User() { FirstName = dto.FirstName, LastName = dto.LastName, Password = CreatePasswordHash(dto.Password), Email = dto.Email.ToLower(), Country = dto.Country, City = dto.City, Writer = dto.Writer, BetaReader = dto.BetaReader, UserVerified = false, UserRetryCount = 0, UserGenres = new List <UserGenre>() }; dto.Genre = dto.Genre.Distinct().ToList(); foreach (string genre in dto.Genre) { lit_udr.EntityFramework.Model.Genre genreInDatabase = _context.Genres.FirstOrDefault(x => x.Name.Equals(genre)); newUser.UserGenres.Add(new UserGenre() { UserId = newUser.Id, GenreId = genreInDatabase.Id }); } _context.Users.Add(newUser); _context.SaveChanges(); userId = newUser.Id; ControlFlow.ResumeOnError(() => { EmailService.SendEmail(dto, _context, "Registration"); }); //logujem ga FetchAndLock fetchAndLock = new FetchAndLock() { workerId = newUser.Email, maxTasks = 10, topics = new List <Topic>() { new Topic() { lockDuration = 10000, topicName = "ProveraRegistracije" } } }; var fetchAndLockContent = new StringContent(JsonConvert.SerializeObject(fetchAndLock), Encoding.UTF8, "application/json"); HttpResponseMessage lockExternalTask = await client.PostAsync($"{_configuration["url"]}/external-task/fetchAndLock", fetchAndLockContent); //daj mi moj lokovan da izvucem id HttpResponseMessage externalTaskInfo = await client.GetAsync($"{_configuration["url"]}/external-task?workerId={newUser.Email}"); Task <string> jsonStringResult_1 = externalTaskInfo.Content.ReadAsStringAsync(); List <CamundaExternalTask> externalTasks = JsonConvert.DeserializeObject <List <CamundaExternalTask> >(jsonStringResult_1.Result); CamundaExternalTask currenTask = externalTasks.First(); //prosledimm reziltat CompleteExternalTask completeExternalTask = new CompleteExternalTask() { workerId = newUser.Email, variables = new Camunda.Model.ProcessModel.Variables() { DataCorrect = new DataCorrect() { value = true } } }; var completeExternalTaskContent = new StringContent(JsonConvert.SerializeObject(completeExternalTask), Encoding.UTF8, "application/json"); HttpResponseMessage commpleteExternalTask = await client.PostAsync($"{_configuration["url"]}/external-task/{currenTask.id}/complete", completeExternalTaskContent); return(Ok()); } catch (Exception e) { User currentUser = _context.Users.FirstOrDefault(u => u.Id.Equals(userId)); if (currentUser != null) { _context.Users.Remove(currentUser); _context.SaveChanges(); } var content = new StringContent("{}", Encoding.UTF8, "application/json"); HttpResponseMessage commpleteTask = await client.PostAsync($"{_configuration["url"]}/task/{dto.TaskId}/complete", content); //logujem ga FetchAndLock fetchAndLock = new FetchAndLock() { workerId = "BadRequest", maxTasks = 10, topics = new List <Topic>() { new Topic() { lockDuration = 10000, topicName = "ProveraRegistracije" } } }; var fetchAndLockContent = new StringContent(JsonConvert.SerializeObject(fetchAndLock), Encoding.UTF8, "application/json"); HttpResponseMessage lockExternalTask = await client.PostAsync($"{_configuration["url"]}/external-task/fetchAndLock", fetchAndLockContent); //daj mi moj lokovan da izvucem id HttpResponseMessage externalTaskInfo = await client.GetAsync($"{_configuration["url"]}/external-task?workerId=BadRequest"); Task <string> jsonStringResult_1 = externalTaskInfo.Content.ReadAsStringAsync(); List <CamundaExternalTask> externalTasks = JsonConvert.DeserializeObject <List <CamundaExternalTask> >(jsonStringResult_1.Result); CamundaExternalTask currenTask = externalTasks.First(); //prosledimm reziltat CompleteExternalTask completeExternalTask = new CompleteExternalTask() { workerId = "BadRequest", variables = new Camunda.Model.ProcessModel.Variables() { DataCorrect = new DataCorrect() { value = false } } }; var completeExternalTaskContent = new StringContent(JsonConvert.SerializeObject(completeExternalTask), Encoding.UTF8, "application/json"); HttpResponseMessage commpleteExternalTask = await client.PostAsync($"{_configuration["url"]}/external-task/{currenTask.id}/complete", completeExternalTaskContent); return(BadRequest()); } }