Example #1
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());
        }
Example #2
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());
            }
        }