public async Task <ActionResult> Create(CreateSReqViewModel theVM)
        {
            if (ModelState.IsValid)
            {
                FESearchRequest newSearchRequest = theVM.TheSearchRequest;

                newSearchRequest.TheStatus = Status.New;
                newSearchRequest.TheUserID = User.Identity.GetUserId();
                newSearchRequest.TheSelectedSources.SetFromList(theVM.SelectedSources);

                var response = await TheSReqController.PostFESearchRequest(newSearchRequest);

                if (response.GetType() == typeof(CreatedAtRouteNegotiatedContentResult <FESearchRequest>))
                {
                    FESearchRequest createdSearchRequest = ((CreatedAtRouteNegotiatedContentResult <FESearchRequest>)response).Content;
                    return(await Execute(createdSearchRequest));
                }
                else
                {
                    return(RedirectTo("Index", MR_BannerMsg.ErrorNotCreated));
                }
            }
            else
            {
                return(RedirectTo("Create"));
            }
        }
        public async Task <IHttpActionResult> UpdateFESearchRequest(int id, FESearchRequest fESearchRequest)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            if (id != fESearchRequest.ID)
            {
                return(BadRequest());
            }

            using (var db = new FEMainDBContext()) {
                db.Entry(fESearchRequest).State = EntityState.Modified;

                try {
                    await db.SaveChangesAsync();
                } catch (DbUpdateConcurrencyException) {
                    if (!FESearchRequestExists(id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
            }
            return(StatusCode(HttpStatusCode.NoContent));
        }
        public async Task <IHttpActionResult> PostFESearchRequest(FESearchRequest fESearchRequest)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            using (var db = new FEMainDBContext()) {
                db.FESearchRequests.Add(fESearchRequest);
                await db.SaveChangesAsync();
            }
            return(CreatedAtRoute("DefaultApi", new { id = fESearchRequest.ID }, fESearchRequest));
        }
        public async Task <ActionResult> Execute(int searchRequestID)
        {
            var response = await TheSReqController.GetFESearchRequest(searchRequestID);

            if (response.GetType() == typeof(OkNegotiatedContentResult <FESearchRequest>))
            {
                FESearchRequest searchRequest = ((OkNegotiatedContentResult <FESearchRequest>)response).Content;
                return(await Execute(searchRequest));
            }
            else
            {
                return(RedirectTo("Inspect", MR_BannerMsg.ErrorNotExecuted, routeValues: new { id = searchRequestID }));
            }
        }
        public async Task <IHttpActionResult> UpdateFESearchRequestStatus(int id, Status newStatus)
        {
            FESearchRequest oldSearchRequest = null;

            using (var db = new FEMainDBContext()) {
                oldSearchRequest = await db.FESearchRequests.FindAsync(id);

                if (oldSearchRequest == null)
                {
                    return(NotFound());
                }
                oldSearchRequest.TheStatus = newStatus;
            }
            return(await UpdateFESearchRequest(id, oldSearchRequest));
        }
        public async Task <IHttpActionResult> GetFESearchRequest(int id)
        {
            FESearchRequest fESearchRequest = null;

            using (var db = new FEMainDBContext()) {
                fESearchRequest = db.FESearchRequests
                                  .Where(sReq => sReq.ID == id)
                                  .Include(sReq => sReq.TheLatestExecution.TheResults)
                                  .First();
            }
            if (fESearchRequest == null)
            {
                return(NotFound());
            }
            return(Ok(fESearchRequest));
        }
        public async Task <IHttpActionResult> SubmitResults(Results theResults)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            int baseSearchRequestID = theResults.ID;

            // Find the corresponding Search Request
            var response = await TheSReqController.GetFESearchRequest(baseSearchRequestID);

            if (response.GetType() == typeof(OkNegotiatedContentResult <FESearchRequest>))
            {
                FESearchRequest searchRequest = ((OkNegotiatedContentResult <FESearchRequest>)response).Content;
                if (searchRequest.TheStatus != Status.Executing)
                {
                    return(Ok());
                }

                // Create the Execution object concerning the execution that was just completed, with the returned Results
                FEExecution newExecution = new FEExecution(baseSearchRequestID, searchRequest.LastExecutionCreatedOn, DateTime.Now);
                newExecution.TheResults = theResults;
                response = await TheExecsController.PostFEExecution(newExecution);

                if (response.GetType() == typeof(CreatedAtRouteNegotiatedContentResult <FEExecution>))
                {
                    FEExecution createdExecution = ((CreatedAtRouteNegotiatedContentResult <FEExecution>)response).Content;

                    // Update the Search Request
                    searchRequest.TheStatus         = Status.Fulfilled;
                    searchRequest.LatestExecutionID = createdExecution.ID;
                    await TheSReqController.UpdateFESearchRequest(searchRequest.ID, searchRequest);

                    return(Ok());
                }
                else
                {
                    return(InternalServerError());
                }
            }
            else
            {
                return(InternalServerError());
            }
        }
        private async Task <ActionResult> Execute(FESearchRequest searchRequest)
        {
            Status previousStatus = searchRequest.TheStatus;

            if (previousStatus == Status.Executing)
            {
                return(RedirectTo("Inspect", MR_BannerMsg.ErrorAlreadyExecuting, routeValues: new { id = searchRequest.ID }));
            }
            searchRequest.TheStatus = Status.Executing;
            await TheSReqController.UpdateFESearchRequestStatus(searchRequest.ID, Status.Executing);

            // Send the Search Request to the BE Server for execution
            try {
                var response = await clientBEserver.PostAsJsonAsync(
                    WebConfigurationManager.AppSettings["WebApiProvider-SubmitRoute"],
                    (BaseSearchRequest)searchRequest);

                if (response.IsSuccessStatusCode)
                {
                    searchRequest.LastExecutionCreatedOn = DateTime.Now;
                    await TheSReqController.UpdateFESearchRequest(searchRequest.ID, searchRequest);

                    return(RedirectTo("Inspect", MR_BannerMsg.CreateOk, routeValues: new { id = searchRequest.ID }));
                }
                else
                {
                    await TheSReqController.UpdateFESearchRequestStatus(searchRequest.ID, previousStatus);

                    return(RedirectTo("Inspect", MR_BannerMsg.ErrorNotExecuted, routeValues: new { id = searchRequest.ID }));
                }
            } catch {
                await TheSReqController.UpdateFESearchRequestStatus(searchRequest.ID, previousStatus);

                return(RedirectTo("Inspect", MR_BannerMsg.ErrorNotExecuted, routeValues: new { id = searchRequest.ID }));
            }
        }
Beispiel #9
0
 public CreateSReqViewModel()
 {
     TheSearchRequest = new FESearchRequest();
     SelectedSources  = new List <SourceOption>();
 }