public async Task <IActionResult> NewTask([FromBody] NewTaskRequest request)
        {
            var client = getCacheClient();

            var requestId           = RandomGenerator.GenerateToken();
            var postMerchantContent = new
            {
                price = REQUEST_PRICE
            };

            var postMerchantResponse = HttpHelper.PostToMerchantAsync("/api/transaction/new", postMerchantContent);
            var getChallengeResponse = HttpHelper.GetFromChallengeAsync("/ChallengeMe");

            NewTransactionResponse merchantResult  = JsonConvert.DeserializeObject <NewTransactionResponse>(await postMerchantResponse);
            NewChallengeResponse   challengeResult = JsonConvert.DeserializeObject <NewChallengeResponse>(await getChallengeResponse);

            var requestDetails = new RequestDetails(requestId, merchantResult.TransactionId, request.Method);

            var ttl   = RandomGenerator.GenerateTTL();
            var added = client.Add(REQUEST_PREFIX + requestId, requestDetails, ttl);

            if (!added)
            {
                return(BadRequest("Cache error"));
            }

            var response = new NewTaskResponse(requestId, merchantResult.TransactionId, challengeResult.Header, challengeResult.Target);

            return(Ok(response));
        }
Пример #2
0
        public IActionResult ScheduleTask([FromBody] NewTaskRequest request)
        {
            //Todo: Add Auth Check, Change to HTTPPost and validate workerID is valid
            if (request is null)
            {
                return(BadRequest());
            }


            using (var context = new tasktDbContext())
            {
                var publishedScript = context.PublishedScripts.Where(f => f.PublishedScriptID == request.publishedScriptID).FirstOrDefault();

                if (publishedScript == null)
                {
                    return(BadRequest());
                }


                //find worker
                var workerRecord = context.Workers.Where(f => f.WorkerID == request.workerID).FirstOrDefault();

                //if worker wasnt found then search for pool

                if (workerRecord == null)
                {
                    //find from pool
                    var poolExists = context.WorkerPools.Any(s => s.WorkerPoolID == request.workerID);

                    //if pool wasnt found
                    if (!poolExists)
                    {
                        //return bad request
                        return(BadRequest());
                    }
                }


                //create new task
                var newTask = new Task();
                newTask.WorkerID      = request.workerID;
                newTask.TaskStarted   = DateTime.Now;
                newTask.Status        = "Scheduled";
                newTask.ExecutionType = "Remote";
                newTask.Script        = publishedScript.PublishedScriptID.ToString();
                newTask.Remark        = "Scheduled by tasktServer";

                var entry = context.Tasks.Add(newTask);
                context.SaveChanges();
                return(Ok(newTask));
            }
        }