public SearchModule(IRepository repo, ArcOnlineHttpClient client) { Get["/search/{facilityNumber}/facility/{facilityId}/feature/{featureId}", true] = async(_, ctx) => { Log.Debug("Searching Edocs for attachments {FacilityNumber} {FacilityId} {FeatureId}", _.facilityNumber, _.facilityId, _.featureId); var facilityNumber = _.facilityNumber.ToString(); var facilityId = _.facilityId.ToString(); IEnumerable <EDocEntry> result = await repo.Get(facilityNumber).ConfigureAwait(false); // we don't have any documents so exit quickly if (!result.Any()) { Log.Debug("No results for {FacilityNumber} {FacilityId} {FeatureId}", _.facilityNumber, _.facilityId, _.featureId); return(Response.AsJson(result)); } var token = await client.GetToken().ConfigureAwait(false); if (string.IsNullOrEmpty(token)) { Log.Warning("Token Expired"); return(Response.AsJson(new Errorable { Error = new Error { Message = "Your arcgis online token expired. Please sign in again." } })); } var queryParams = new[] { new KeyValuePair <string, string>("objectIds", _.featureId.ToString()), new KeyValuePair <string, string>("f", "json"), new KeyValuePair <string, string>("token", token) }; const string attachmentUrl = "/queryAttachments"; var formUrl = new FormUrlEncodedContent(queryParams); var querystringContent = await formUrl.ReadAsStringAsync(); var url = string.Format("{0}/{1}?{2}", Request.Query["url"], attachmentUrl, querystringContent); ArcOnlineResponse <AttachmentResponse> response = await client.GetAttachmentsFor(url).ConfigureAwait(false); // we don't have attachments exit early if (!response.Result.AttachmentGroups.Any() || !response.Result.AttachmentGroups[0].AttachmentInfos.Any()) { Log.Debug("No attachments for {FacilityNumber} {FacilityId} {FeatureId}", _); return(Response.AsJson(result)); } var filenames = response.Result.AttachmentGroups[0].AttachmentInfos.ToDictionary(key => string.Format("{0}?{1}", key.Name, key.Id), value => value.Id); return(Response.AsJson(result.Select(mapped => { var updated = new EDocEntry(mapped, facilityId); var uploads = filenames.Where(key => { var name = key.Key.Split('?')[0]; return string.Compare(name, updated.File, StringComparison.InvariantCultureIgnoreCase) == 0; }).ToList(); updated.Uploaded = uploads.Any(); if (updated.Uploaded) { updated.UploadId = uploads.First().Value; } return updated; }))); }; }
public AttachmentModule(ArcOnlineHttpClient client) { Get["/attachment/{featureId}", true] = async(_, ctx) => { var token = await client.GetToken().ConfigureAwait(false); if (string.IsNullOrEmpty(token)) { Log.Warning("Token Expired"); return(Response.AsJson(new Errorable { Error = new Error { Message = "Your arcgis online token expired. Please sign in again." } })); } var queryParams = new[] { new KeyValuePair <string, string>("objectIds", _.featureId.ToString()), new KeyValuePair <string, string>("f", "json"), new KeyValuePair <string, string>("token", token) }; const string attachmentUrl = "queryAttachments"; var formUrl = new FormUrlEncodedContent(queryParams); var querystringContent = await formUrl.ReadAsStringAsync(); var url = string.Format("{0}/{1}?{2}", Request.Query["url"], attachmentUrl, querystringContent); ArcOnlineResponse <AttachmentResponse> response = await client.GetAttachmentsFor(url).ConfigureAwait(false); if (response.Result.Error != null) { Log.Error("There was an issue getting attachments {@Error}", response.Result.Error); return(Response.AsJson(new Errorable { Error = new Error { Message = response.Result.Error.Messages } })); } // we don't have attachments exit early if (!response.Result.AttachmentGroups.Any() || !response.Result.AttachmentGroups[0].AttachmentInfos.Any()) { return(Response.AsJson(new GenericAttachment())); } queryParams = new[] { new KeyValuePair <string, string>("token", token) }; formUrl = new FormUrlEncodedContent(queryParams); querystringContent = await formUrl.ReadAsStringAsync(); var files = response.Result.AttachmentGroups[0].AttachmentInfos .Select(x => new GenericAttachment.GenericFile( GetDisplayName(x.Name), string.Format("{0}/{1}/attachments/{2}?{3}", Request.Query["url"], _.featureId.ToString(), x.Id, querystringContent) )); return(Response.AsJson(new GenericAttachment(files))); }; }