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);
            }
        }
Ejemplo n.º 2
0
        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}");
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
        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}");
            }
        }
Ejemplo n.º 7
0
        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);
            }
        }
Ejemplo n.º 8
0
        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);
            }
        }
Ejemplo n.º 9
0
        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());
        }
Ejemplo n.º 10
0
        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());
        }
Ejemplo n.º 11
0
        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());
            }
        }
Ejemplo n.º 12
0
        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());
            }
        }