Exemple #1
0
 static IEnumerable <QueryPreflightCheckResult> Project <T>(this IEnumerable <IGrouping <T, QueryPreflightCheckResultRecord> > grouped)
 {
     return(grouped.Select(g =>
     {
         var f = g.First();
         return new QueryPreflightCheckResult
         {
             QueryRef = new QueryRef(f.QueryId, QueryUrn.From(f.QueryUniversalId)),
             Ver = f.QueryVer,
             IsPresent = f.QueryIsPresent,
             IsAuthorized = f.QueryIsAuthorized,
             ConceptCheck = new ConceptPreflightCheck
             {
                 Results = g.Where(c => c.ConceptId.HasValue)
                           .Select(c => new ConceptPreflightCheckResult
                 {
                     Id = c.ConceptId,
                     UniversalId = ConceptUrn.From(c.ConceptUniversalId),
                     IsPresent = c.ConceptIsPresent,
                     IsAuthorized = c.ConceptIsAuthorized
                 })
             }
         };
     }));
 }
Exemple #2
0
        public async Task <IEnumerable <BaseQuery> > GetUserQueriesAsync(string userId)
        {
            using (var cn = new SqlConnection(opts.ConnectionString))
            {
                await cn.OpenAsync();

                var records = await cn.QueryAsync <BaseQueryRecord>(
                    Sql.SavedQueriesByOwner,
                    new { user = userId },
                    commandType : CommandType.StoredProcedure,
                    commandTimeout : opts.DefaultTimeout
                    );

                return(records.Select(r => new BaseQuery
                {
                    Id = r.Id,
                    UniversalId = QueryUrn.From(r.UniversalId),
                    Name = r.Name,
                    Category = r.Category,
                    Owner = r.Owner,
                    Created = r.Created,
                    Updated = r.Updated,
                    Count = r.Count
                }));
            }
        }
 public void SetUniversalId(string urn)
 {
     if (!string.IsNullOrWhiteSpace(urn))
     {
         UniversalId = QueryUrn.From(urn);
     }
 }
Exemple #4
0
        public async Task <QueryDeleteResult> Delete(QueryUrn uid, bool force)
        {
            logger.LogInformation("Deleting query. Query:{Query}", uid.ToString());
            using (var cn = new SqlConnection(dbOpts.ConnectionString))
            {
                await cn.OpenAsync();

                try
                {
                    var dependents = await cn.QueryAsync <QueryDependentRecord>(
                        deleteQuery,
                        new { uid = uid.ToString(), force, user = user.UUID },
                        commandType : CommandType.StoredProcedure,
                        commandTimeout : dbOpts.DefaultTimeout
                        );

                    return(QueryDeleteResult.From(dependents.Select(d =>
                    {
                        return new QueryDependent(d.Id, QueryUrn.From(d.UniversalId), d.Name, d.Owner);
                    })));
                }
                catch (SqlException se)
                {
                    logger.LogError("Could not delete query. Query:{Query} Code:{Code} Error:{Error}", uid.ToString(), se.ErrorCode, se.Message);
                    se.MapThrow();
                    throw;
                }
            }
        }
Exemple #5
0
        public async Task <IEnumerable <BaseQuery> > GetQueries()
        {
            logger.LogInformation("Getting queries");
            using (var cn = new SqlConnection(dbOpts.ConnectionString))
            {
                await cn.OpenAsync();

                var records = await cn.QueryAsync <BaseQueryRecord>(
                    queryQueries,
                    new { user = user.UUID, groups = GroupMembership.From(user) },
                    commandType : CommandType.StoredProcedure,
                    commandTimeout : dbOpts.DefaultTimeout
                    );

                return(records.Select(r => new BaseQuery
                {
                    Id = r.Id,
                    UniversalId = QueryUrn.From(r.UniversalId),
                    Name = r.Name,
                    Category = r.Category,
                    Owner = r.Owner,
                    Created = r.Created,
                    Updated = r.Updated,
                    Count = r.Count
                }));
            }
        }
Exemple #6
0
        public void Errors_Should_Return_Null_If_Ok()
        {
            var qpcr = new QueryPreflightCheckResult
            {
                QueryRef     = new QueryRef(QueryUrn.From("urn:leaf:query:d7359679-df0d-4604-a2d9-1d3d04417dc2:123456")),
                IsPresent    = true,
                IsAuthorized = true,
                ConceptCheck = new ConceptPreflightCheck
                {
                    Results = new ConceptPreflightCheckResult[]
                    {
                        new ConceptPreflightCheckResult
                        {
                            Id           = Guid.NewGuid(),
                            UniversalId  = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"),
                            IsPresent    = true,
                            IsAuthorized = true
                        },
                        new ConceptPreflightCheckResult
                        {
                            Id           = Guid.NewGuid(),
                            UniversalId  = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"),
                            IsPresent    = true,
                            IsAuthorized = true
                        }
                    }
                }
            };

            Assert.Null(qpcr.Errors());
        }
Exemple #7
0
        public async Task <ActionResult <QueryDeleteResultDTO> > Delete(string ident, [FromQuery] bool force)
        {
            try
            {
                var urn    = QueryUrn.From(ident);
                var result = await queryService.Delete(urn, force);

                if (!result.Ok)
                {
                    return(Conflict(QueryDeleteResultDTO.From(result.Dependents)));
                }

                return(Ok());
            }
            catch (FormatException fe)
            {
                log.LogError("Malformed query identifer. UniversalId:{UniversalId} Error:{Error}", ident, fe.Message);
                return(BadRequest());
            }
            catch (LeafDbException lde)
            {
                return(StatusCode(lde.StatusCode));
            }
            catch (Exception e)
            {
                log.LogError("Could not delete query. UniversalId:{UniversalId} Error:{Error}", ident, e.ToString());
                return(StatusCode(StatusCodes.Status500InternalServerError));
            }
        }
Exemple #8
0
        public async Task <Query> GetQueryAsync(QueryUrn urn)
        {
            log.LogInformation("Getting query. UId:{UId}", urn);
            try
            {
                var query = await service.GetQueryAsync(urn);

                if (query == null)
                {
                    log.LogError("Could not find query. UId:{UId}", urn);
                }
                else
                {
                    log.LogInformation("Found query. Id:{Id} UId:{UId}", query.Id, query.UniversalId);
                }
                if (HideCount)
                {
                    query.Count = null;
                }
                return(query);
            }
            catch (DbException de)
            {
                log.LogError("Failed to get query. UniversalId:{UniversalId} Code:{Code} Error:{Error}", urn, de.ErrorCode, de.Message);
                de.MapThrow();
                throw;
            }
        }
Exemple #9
0
        public async Task <Query> GetQueryAsync(QueryUrn uid)
        {
            using (var cn = new SqlConnection(dbOpts.ConnectionString))
            {
                await cn.OpenAsync();

                var r = await cn.QueryFirstOrDefaultAsync <QueryRecord>(
                    queryQueryByUId,
                    new { uid = uid.ToString(), user = user.UUID, groups = GroupMembership.From(user), admin = user.IsAdmin },
                    commandType : CommandType.StoredProcedure,
                    commandTimeout : dbOpts.DefaultTimeout
                    );

                return(new Query
                {
                    Id = r.Id,
                    UniversalId = QueryUrn.From(r.UniversalId),
                    Name = r.Name,
                    Category = r.Category,
                    Owner = r.Owner,
                    Created = r.Created,
                    Updated = r.Updated,
                    Count = r.Count,
                    Definition = r.Definition
                });
            }
        }
Exemple #10
0
        public async Task <QuerySaveResult> InitialSaveAsync(QuerySave query)
        {
            var urn        = QueryUrn.Create(query.QueryId);
            var conceptids = query.Resources.Concepts.Select(c => c.Id.Value).Where(c => c != Guid.Empty);
            var queryids   = query.Resources.Queries.Select(q => q.Id.Value);

            using (var cn = new SqlConnection(dbOpts.ConnectionString))
            {
                await cn.OpenAsync();

                var qsr = await cn.QueryFirstOrDefaultAsync <QuerySaveResultRecord>(
                    initialQuerySave,
                    new
                {
                    queryid    = query.QueryId,
                    urn        = urn.ToString(),
                    name       = query.Name,
                    category   = query.Category,
                    conceptids = ResourceIdTable.From(conceptids),
                    queryids   = ResourceIdTable.From(queryids),
                    definition = query.Definition,
                    user       = user.UUID
                },
                    commandType : CommandType.StoredProcedure,
                    commandTimeout : dbOpts.DefaultTimeout
                    );

                if (qsr == null)
                {
                    return(null);
                }

                return(new QuerySaveResult(query.QueryId, QueryUrn.From(qsr.UniversalId), qsr.Ver));
            }
        }
Exemple #11
0
        public void QueryUrn_Create_Ok()
        {
            var id = Guid.NewGuid();

            var urn = QueryUrn.Create(id);

            Assert.Contains(id.ToString(), urn.ToString());
        }
Exemple #12
0
        public void QueryUrn_From_Query_Urn_Ok()
        {
            var urn = $"urn:leaf:query:{Guid.NewGuid()}:12318742";

            var curn = QueryUrn.From(urn);

            Assert.Equal(urn, curn.ToString());
        }
Exemple #13
0
        public void QueryUrn_TryParse_From_Query_Urn_Ok()
        {
            var urn = $"urn:leaf:query:{Guid.NewGuid()}:12318742";

            var ok = QueryUrn.TryParse(urn, out var _);

            Assert.True(ok);
        }
Exemple #14
0
        public async Task <ActionResult <QuerySaveResponseDTO> > Save(
            string id,
            [FromBody] QuerySaveDTO querySave,
            CancellationToken cancelToken
            )
        {
            try
            {
                // federated user submitting an initial save request
                if (!user.IsInstutional && QueryUrn.From(querySave.UniversalId) == null)
                {
                    return(BadRequest("Initial save requests must be made to home node."));
                }

                var result = await manager.SaveAsync(new Guid(id), querySave, QueryDefinitionDTO.JSON, cancelToken);

                switch (result.State)
                {
                case QueryManager.SaveState.Preflight:
                    return(BadRequest(new QuerySaveResponseDTO {
                        Preflight = new PreflightCheckDTO(result.Preflight)
                    }));

                case QueryManager.SaveState.NotFound:
                    return(NotFound());
                }

                return(Ok(new QuerySaveResponseDTO
                {
                    Preflight = new PreflightCheckDTO(result.Preflight),
                    Query = new QuerySaveResultDTO(result.Result)
                }));
            }
            catch (InvalidOperationException ie)
            {
                log.LogError("Unrecoverable validation error in query. Error:{Error}", ie.Message);
                return(BadRequest());
            }
            catch (FormatException fe)
            {
                log.LogError("Malformed query identifier. Id:{Id} UniversalId:{UniversalId} Error:{Error}", id, querySave.UniversalId, fe.Message);
                return(BadRequest());
            }
            catch (OperationCanceledException)
            {
                log.LogInformation("Request cancelled.");
                return(NoContent());
            }
            catch (LeafRPCException lde)
            {
                return(StatusCode(lde.StatusCode));
            }
            catch (Exception e)
            {
                log.LogError("Could not save query. QueryId:{QueryId} Query:{@Query} Error:{Error}", id, querySave, e.ToString());
                return(StatusCode(StatusCodes.Status500InternalServerError));
            }
        }
Exemple #15
0
 public UserInquiry ToInquiry()
 {
     return(new UserInquiry
     {
         AssociatedQueryId = QueryUrn.From(AssociatedQueryId),
         EmailAddress = EmailAddress,
         Type = Type,
         Text = Text
     });
 }
Exemple #16
0
        public IEnumerator <object[]> GetEnumerator()
        {
            yield return(new object[]
            {
                new QueryRef(QueryUrn.From("urn:leaf:query:d7359679-df0d-4604-a2d9-1d3d04417dc2:123456")),
                new QueryRef(QueryUrn.From("urn:leaf:query:d7359679-df0d-4604-a2d9-1d3d04417dc2:123456")),
                true
            });

            yield return(new object[]
            {
                new QueryRef {
                    Id = Guid.NewGuid(), UniversalId = QueryUrn.From("urn:leaf:query:d7359679-df0d-4604-a2d9-1d3d04417dc2:123456")
                },
                new QueryRef {
                    Id = Guid.NewGuid(), UniversalId = QueryUrn.From("urn:leaf:query:d7359679-df0d-4604-a2d9-1d3d04417dc2:123456")
                },
                true
            });

            yield return(new object[]
            {
                new QueryRef {
                    Id = Guid.NewGuid(), UniversalId = QueryUrn.From("urn:leaf:query:d7359679-df0d-4604-a2d9-1d3d04417dc2:123456")
                },
                new QueryRef {
                    Id = Guid.NewGuid(), UniversalId = QueryUrn.From("urn:leaf:query:d7359678-df0d-4604-a2d9-1d3d04417dc2:123456")
                },
                false
            });

            var id = Guid.NewGuid();

            yield return(new object[]
            {
                new QueryRef {
                    Id = id
                },
                new QueryRef {
                    Id = id
                },
                true
            });

            yield return(new object[]
            {
                new QueryRef {
                    Id = Guid.NewGuid()
                },
                new QueryRef {
                    Id = Guid.NewGuid()
                },
                false
            });
        }
Exemple #17
0
 public async Task <Query> GetQueryAsync(QueryUrn urn)
 {
     log.LogInformation("Getting query UId:{UId}", urn);
     try
     {
         return(await service.GetQueryAsync(urn));
     }
     catch (DbException de)
     {
         log.LogError("Could not get query. UniversalId:{UniversalId} Code:{Code} Error:{Error}", urn, de.ErrorCode, de.Message);
         de.MapThrow();
         throw;
     }
 }
Exemple #18
0
 public async Task <QueryDeleteResult> DeleteAsync(QueryUrn urn, bool force)
 {
     log.LogInformation("Deleting query. Query:{Query} Force:{Force}", urn, force);
     try
     {
         return(await service.DeleteAsync(urn, force));
     }
     catch (DbException de)
     {
         log.LogError("Could not delete query. Query:{Query} Code:{Code} Error:{Error}", urn, de.ErrorCode, de.Message);
         de.MapThrow();
         throw;
     }
 }
Exemple #19
0
 public QueryRef(string identifier)
 {
     if (Guid.TryParse(identifier, out var guid))
     {
         Id = guid;
     }
     else if (QueryUrn.TryParse(identifier, out var urn))
     {
         UniversalId = urn;
     }
     else
     {
         throw new FormatException($"Query identifier {identifier} is not a valid Guid or Urn");
     }
 }
Exemple #20
0
        async Task <QuerySaveResult> UpsertSave(QuerySave query)
        {
            var conceptids = query.Resources.Concepts.Select(c => c.Id.Value);
            var queryids   = query.Resources.Queries.Select(q => q.Id.Value);

            try
            {
                using (var cn = new SqlConnection(dbOpts.ConnectionString))
                {
                    await cn.OpenAsync();

                    var qsr = await cn.QueryFirstOrDefaultAsync <QuerySaveResultRecord>(
                        upsertQuerySave,
                        new
                    {
                        queryid    = query.QueryId,
                        urn        = query.UniversalId.ToString(),
                        ver        = query.Ver,
                        name       = query.Name,
                        category   = query.Category,
                        conceptids = ResourceIdTable.From(conceptids),
                        queryids   = ResourceIdTable.From(queryids),
                        definition = query.Definition,
                        user       = user.UUID
                    },
                        commandType : CommandType.StoredProcedure,
                        commandTimeout : dbOpts.DefaultTimeout
                        );

                    if (qsr == null)
                    {
                        return(null);
                    }

                    return(new QuerySaveResult(query.QueryId, QueryUrn.From(qsr.UniversalId), qsr.Ver));
                }
            }
            catch (SqlException se)
            {
                logger.LogError("Could not save query. Query:{@Query} Code:{Code} Error:{Error}", query, se.ErrorCode, se.Message);
                se.MapThrow();
                throw;
            }
        }
Exemple #21
0
        public async Task <QueryDeleteResult> DeleteAsync(QueryUrn uid, bool force)
        {
            using (var cn = new SqlConnection(dbOpts.ConnectionString))
            {
                await cn.OpenAsync();

                var dependents = await cn.QueryAsync <QueryDependentRecord>(
                    deleteQuery,
                    new { uid = uid.ToString(), force, user = user.UUID, admin = user.IsAdmin },
                    commandType : CommandType.StoredProcedure,
                    commandTimeout : dbOpts.DefaultTimeout
                    );

                return(QueryDeleteResult.From(dependents.Select(d =>
                {
                    return new QueryDependent(d.Id, QueryUrn.From(d.UniversalId), d.Name, d.Owner);
                })));
            }
        }
Exemple #22
0
        public async Task <ActionResult <QueryDTO> > Get(string ident)
        {
            try
            {
                var urn   = QueryUrn.From(ident);
                var query = await queryService.GetQuery(urn);

                if (query == null)
                {
                    return(NotFound());
                }
                return(Ok(new QueryDTO(query)));
            }
            catch (LeafDbException le)
            {
                return(StatusCode(le.StatusCode));
            }
            catch (Exception e)
            {
                log.LogError("Could not get query. Identifier:{Identifier} Error:{Error}", ident, e.ToString());
                return(StatusCode(StatusCodes.Status500InternalServerError));
            }
        }
Exemple #23
0
        public async Task <Query> GetQuery(QueryUrn uid)
        {
            logger.LogInformation("Getting query UId:{UId}", uid);
            using (var cn = new SqlConnection(dbOpts.ConnectionString))
            {
                await cn.OpenAsync();

                try
                {
                    var r = await cn.QueryFirstOrDefaultAsync <QueryRecord>(
                        queryQueryByUId,
                        new { uid = uid.ToString(), user = user.UUID, groups = GroupMembership.From(user) },
                        commandType : CommandType.StoredProcedure,
                        commandTimeout : dbOpts.DefaultTimeout
                        );

                    return(new Query
                    {
                        Id = r.Id,
                        UniversalId = QueryUrn.From(r.UniversalId),
                        Name = r.Name,
                        Category = r.Category,
                        Owner = r.Owner,
                        Created = r.Created,
                        Updated = r.Updated,
                        Count = r.Count,
                        Definition = r.Definition
                    });
                }
                catch (SqlException se)
                {
                    logger.LogError("Could not get query. UniversalId:{UniversalId} Code:{Code} Error:{Error}", uid, se.ErrorCode, se.Message);
                    se.MapThrow();
                    throw;
                }
            }
        }
Exemple #24
0
        public async Task <QueryDeleteResult> DeleteAsync(QueryUrn urn, bool force)
        {
            log.LogInformation("Deleting query. Query:{Query} Force:{Force}", urn, force);
            try
            {
                var result = await service.DeleteAsync(urn, force);

                if (result.Ok)
                {
                    log.LogInformation("Deleted query. Query:{Query}", urn);
                }
                else
                {
                    log.LogInformation("Could not delete query due to conflict. Query:{Query} Result:{@Result}", urn, result);
                }
                return(result);
            }
            catch (DbException de)
            {
                log.LogError("Failed to delete query. Query:{Query} Code:{Code} Error:{Error}", urn, de.ErrorCode, de.Message);
                de.MapThrow();
                throw;
            }
        }
Exemple #25
0
        public IEnumerator <object[]> GetEnumerator()
        {
            yield return(new object[]
            {
                new QueryPreflightCheckResult
                {
                    QueryRef = new QueryRef(QueryUrn.From("urn:leaf:query:d7359679-df0d-4604-a2d9-1d3d04417dc2:123456")),
                    IsPresent = true,
                    IsAuthorized = true,
                    ConceptCheck = new ConceptPreflightCheck
                    {
                        Results = new ConceptPreflightCheckResult[]
                        {
                            new ConceptPreflightCheckResult
                            {
                                Id = Guid.NewGuid(),
                                UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"),
                                IsPresent = true,
                                IsAuthorized = true
                            },
                            new ConceptPreflightCheckResult
                            {
                                Id = Guid.NewGuid(),
                                UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"),
                                IsPresent = true,
                                IsAuthorized = true
                            }
                        }
                    }
                },
                true
            });

            yield return(new object[]
            {
                new QueryPreflightCheckResult
                {
                    QueryRef = new QueryRef(QueryUrn.From("urn:leaf:query:d7359679-df0d-4604-a2d9-1d3d04417dc2:123456")),
                    IsPresent = false,
                    IsAuthorized = false,
                    ConceptCheck = new ConceptPreflightCheck
                    {
                        Results = new ConceptPreflightCheckResult[]
                        {
                            new ConceptPreflightCheckResult
                            {
                                Id = Guid.NewGuid(),
                                UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"),
                                IsPresent = true,
                                IsAuthorized = true
                            },
                            new ConceptPreflightCheckResult
                            {
                                Id = Guid.NewGuid(),
                                UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"),
                                IsPresent = true,
                                IsAuthorized = true
                            }
                        }
                    }
                },
                false
            });

            yield return(new object[]
            {
                new QueryPreflightCheckResult
                {
                    QueryRef = new QueryRef(QueryUrn.From("urn:leaf:query:d7359679-df0d-4604-a2d9-1d3d04417dc2:123456")),
                    IsPresent = true,
                    IsAuthorized = true,
                    ConceptCheck = new ConceptPreflightCheck
                    {
                        Results = new ConceptPreflightCheckResult[]
                        {
                            new ConceptPreflightCheckResult
                            {
                                Id = Guid.NewGuid(),
                                UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"),
                                IsPresent = false,
                                IsAuthorized = false
                            },
                            new ConceptPreflightCheckResult
                            {
                                Id = Guid.NewGuid(),
                                UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"),
                                IsPresent = true,
                                IsAuthorized = true
                            }
                        }
                    }
                },
                false
            });
        }
Exemple #26
0
        public async Task <ActionResult <QuerySaveResponseDTO> > Save(
            string id,
            [FromBody] QuerySaveDTO querySave,
            [FromServices] IPanelConverterService panelConverter,
            [FromServices] IPanelValidator panelValidator,
            CancellationToken cancelToken
            )
        {
            try
            {
                // federated user submitting an initial save request
                if (!user.IsInstutional && QueryUrn.From(querySave.UniversalId) == null)
                {
                    return(BadRequest("Initial save requests must be made to home node."));
                }

                var ctx = await panelConverter.GetPanelsAsync(querySave, cancelToken);

                if (!ctx.PreflightPassed)
                {
                    return(BadRequest(new QuerySaveResponseDTO {
                        Preflight = new PreflightCheckDTO(ctx.PreflightCheck)
                    }));
                }
                var query = panelValidator.Validate(ctx);

                cancelToken.ThrowIfCancellationRequested();

                if (!user.IsInstutional)
                {
                    panelConverter.LocalizeDefinition(querySave, query);
                }


                var toSave = new QuerySave
                {
                    QueryId     = new Guid(id),
                    UniversalId = ctx.UniversalId,
                    Name        = querySave.Name,
                    Category    = querySave.Category,
                    Definition  = QueryDefinitionDTO.JSON(querySave),
                    Resources   = query.Panels.GetResources()
                };
                if (querySave.Ver.HasValue)
                {
                    toSave.Ver = querySave.Ver.Value;
                }

                var saved = await queryService.Save(toSave);

                if (saved == null)
                {
                    return(NotFound());
                }

                var response = new QuerySaveResponseDTO
                {
                    Preflight = new PreflightCheckDTO(ctx.PreflightCheck),
                    Query     = new QuerySaveResultDTO(saved)
                };

                return(Ok(response));
            }
            catch (InvalidOperationException ie)
            {
                log.LogError("Unrecoverable validation error in query. Error:{Error}", ie.Message);
                return(BadRequest());
            }
            catch (FormatException fe)
            {
                log.LogError("Malformed query identifier. Id:{Id} UniversalId:{UniversalId} Error:{Error}", id, querySave.UniversalId, fe.Message);
                return(BadRequest());
            }
            catch (OperationCanceledException)
            {
                log.LogInformation("Request cancelled.");
                return(NoContent());
            }
            catch (LeafDbException lde)
            {
                return(StatusCode(lde.StatusCode));
            }
            catch (Exception e)
            {
                log.LogError("Could not save query. QueryId:{QueryId} Query:{@Query} Error:{Error}", id, querySave, e.ToString());
                return(StatusCode(StatusCodes.Status500InternalServerError));
            }
        }
        public IEnumerator <object[]> GetEnumerator()
        {
            var first = new QueryRef {
                UniversalId = QueryUrn.From("urn:leaf:query:d7359679-df0d-4604-a2d9-1d3d04417dc2:123456")
            };
            var second = new QueryRef {
                UniversalId = QueryUrn.From("urn:leaf:query:d7359668-df0d-4604-a2d9-1d3d04417dc2:563423")
            };

            yield return(new object[]
            {
                new PreflightResources(new QueryRef[] { })
                {
                    DirectConceptsCheck = new PreflightConcepts
                    {
                        PreflightCheck = new ConceptPreflightCheck
                        {
                            Results = new ConceptPreflightCheckResult[]
                            {
                                new ConceptPreflightCheckResult
                                {
                                    Id = Guid.NewGuid(),
                                    UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"),
                                    IsPresent = true,
                                    IsAuthorized = true
                                },
                                new ConceptPreflightCheckResult
                                {
                                    Id = Guid.NewGuid(),
                                    UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"),
                                    IsPresent = true,
                                    IsAuthorized = true
                                }
                            }
                        }
                    },
                    DirectQueriesCheck = new PreflightQueries
                    {
                        Results = new QueryPreflightCheckResult[]
                        {
                            new QueryPreflightCheckResult
                            {
                                QueryRef = first,
                                IsPresent = true,
                                IsAuthorized = true,
                                ConceptCheck = new ConceptPreflightCheck
                                {
                                    Results = new ConceptPreflightCheckResult[]
                                    {
                                        new ConceptPreflightCheckResult
                                        {
                                            Id = Guid.NewGuid(),
                                            UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"),
                                            IsPresent = true,
                                            IsAuthorized = true
                                        },
                                        new ConceptPreflightCheckResult
                                        {
                                            Id = Guid.NewGuid(),
                                            UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"),
                                            IsPresent = true,
                                            IsAuthorized = true
                                        }
                                    }
                                }
                            },
                            new QueryPreflightCheckResult
                            {
                                QueryRef = second,
                                IsPresent = true,
                                IsAuthorized = true,
                                ConceptCheck = new ConceptPreflightCheck
                                {
                                    Results = new ConceptPreflightCheckResult[]
                                    {
                                        new ConceptPreflightCheckResult
                                        {
                                            Id = Guid.NewGuid(),
                                            UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.41"),
                                            IsPresent = true,
                                            IsAuthorized = true
                                        },
                                        new ConceptPreflightCheckResult
                                        {
                                            Id = Guid.NewGuid(),
                                            UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.50"),
                                            IsPresent = true,
                                            IsAuthorized = true
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                true
            });

            yield return(new object[]
            {
                new PreflightResources(new QueryRef[] { })
                {
                    DirectConceptsCheck = new PreflightConcepts
                    {
                        PreflightCheck = new ConceptPreflightCheck
                        {
                            Results = new ConceptPreflightCheckResult[]
                            {
                                new ConceptPreflightCheckResult
                                {
                                    Id = Guid.NewGuid(),
                                    UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"),
                                    IsPresent = false,
                                    IsAuthorized = false
                                },
                                new ConceptPreflightCheckResult
                                {
                                    Id = Guid.NewGuid(),
                                    UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"),
                                    IsPresent = true,
                                    IsAuthorized = true
                                }
                            }
                        }
                    },
                    DirectQueriesCheck = new PreflightQueries
                    {
                        Results = new QueryPreflightCheckResult[]
                        {
                            new QueryPreflightCheckResult
                            {
                                QueryRef = first,
                                IsPresent = true,
                                IsAuthorized = true,
                                ConceptCheck = new ConceptPreflightCheck
                                {
                                    Results = new ConceptPreflightCheckResult[]
                                    {
                                        new ConceptPreflightCheckResult
                                        {
                                            Id = Guid.NewGuid(),
                                            UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"),
                                            IsPresent = true,
                                            IsAuthorized = true
                                        },
                                        new ConceptPreflightCheckResult
                                        {
                                            Id = Guid.NewGuid(),
                                            UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"),
                                            IsPresent = true,
                                            IsAuthorized = true
                                        }
                                    }
                                }
                            },
                            new QueryPreflightCheckResult
                            {
                                QueryRef = second,
                                IsPresent = true,
                                IsAuthorized = true,
                                ConceptCheck = new ConceptPreflightCheck
                                {
                                    Results = new ConceptPreflightCheckResult[]
                                    {
                                        new ConceptPreflightCheckResult
                                        {
                                            Id = Guid.NewGuid(),
                                            UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.41"),
                                            IsPresent = true,
                                            IsAuthorized = true
                                        },
                                        new ConceptPreflightCheckResult
                                        {
                                            Id = Guid.NewGuid(),
                                            UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.50"),
                                            IsPresent = true,
                                            IsAuthorized = true
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                false
            });

            yield return(new object[]
            {
                new PreflightResources(new QueryRef[] { })
                {
                    DirectConceptsCheck = new PreflightConcepts
                    {
                        PreflightCheck = new ConceptPreflightCheck
                        {
                            Results = new ConceptPreflightCheckResult[]
                            {
                                new ConceptPreflightCheckResult
                                {
                                    Id = Guid.NewGuid(),
                                    UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"),
                                    IsPresent = true,
                                    IsAuthorized = true
                                },
                                new ConceptPreflightCheckResult
                                {
                                    Id = Guid.NewGuid(),
                                    UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"),
                                    IsPresent = true,
                                    IsAuthorized = true
                                }
                            }
                        }
                    },
                    DirectQueriesCheck = new PreflightQueries
                    {
                        Results = new QueryPreflightCheckResult[]
                        {
                            new QueryPreflightCheckResult
                            {
                                QueryRef = first,
                                IsPresent = false,
                                IsAuthorized = false,
                                ConceptCheck = new ConceptPreflightCheck
                                {
                                    Results = new ConceptPreflightCheckResult[]
                                    {
                                        new ConceptPreflightCheckResult
                                        {
                                            Id = Guid.NewGuid(),
                                            UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"),
                                            IsPresent = true,
                                            IsAuthorized = true
                                        },
                                        new ConceptPreflightCheckResult
                                        {
                                            Id = Guid.NewGuid(),
                                            UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"),
                                            IsPresent = true,
                                            IsAuthorized = true
                                        }
                                    }
                                }
                            },
                            new QueryPreflightCheckResult
                            {
                                QueryRef = second,
                                IsPresent = true,
                                IsAuthorized = true,
                                ConceptCheck = new ConceptPreflightCheck
                                {
                                    Results = new ConceptPreflightCheckResult[]
                                    {
                                        new ConceptPreflightCheckResult
                                        {
                                            Id = Guid.NewGuid(),
                                            UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.41"),
                                            IsPresent = true,
                                            IsAuthorized = true
                                        },
                                        new ConceptPreflightCheckResult
                                        {
                                            Id = Guid.NewGuid(),
                                            UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.50"),
                                            IsPresent = true,
                                            IsAuthorized = true
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                false
            });

            yield return(new object[]
            {
                new PreflightResources(new QueryRef[] { })
                {
                    DirectConceptsCheck = new PreflightConcepts
                    {
                        PreflightCheck = new ConceptPreflightCheck
                        {
                            Results = new ConceptPreflightCheckResult[]
                            {
                                new ConceptPreflightCheckResult
                                {
                                    Id = Guid.NewGuid(),
                                    UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"),
                                    IsPresent = true,
                                    IsAuthorized = true
                                },
                                new ConceptPreflightCheckResult
                                {
                                    Id = Guid.NewGuid(),
                                    UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"),
                                    IsPresent = true,
                                    IsAuthorized = true
                                }
                            }
                        }
                    },
                    DirectQueriesCheck = new PreflightQueries
                    {
                        Results = new QueryPreflightCheckResult[]
                        {
                            new QueryPreflightCheckResult
                            {
                                QueryRef = first,
                                IsPresent = true,
                                IsAuthorized = true,
                                ConceptCheck = new ConceptPreflightCheck
                                {
                                    Results = new ConceptPreflightCheckResult[]
                                    {
                                        new ConceptPreflightCheckResult
                                        {
                                            Id = Guid.NewGuid(),
                                            UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"),
                                            IsPresent = true,
                                            IsAuthorized = true
                                        },
                                        new ConceptPreflightCheckResult
                                        {
                                            Id = Guid.NewGuid(),
                                            UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"),
                                            IsPresent = true,
                                            IsAuthorized = true
                                        }
                                    }
                                }
                            },
                            new QueryPreflightCheckResult
                            {
                                QueryRef = second,
                                IsPresent = true,
                                IsAuthorized = true,
                                ConceptCheck = new ConceptPreflightCheck
                                {
                                    Results = new ConceptPreflightCheckResult[]
                                    {
                                        new ConceptPreflightCheckResult
                                        {
                                            Id = Guid.NewGuid(),
                                            UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.41"),
                                            IsPresent = true,
                                            IsAuthorized = true
                                        },
                                        new ConceptPreflightCheckResult
                                        {
                                            Id = Guid.NewGuid(),
                                            UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.50"),
                                            IsPresent = false,
                                            IsAuthorized = false
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                false
            });
        }
        public void Errors_Queries_Should_Have_Data_If_Not_Ok()
        {
            var first = new QueryRef {
                UniversalId = QueryUrn.From("urn:leaf:query:d7359679-df0d-4604-a2d9-1d3d04417dc2:123456")
            };
            var second = new QueryRef {
                UniversalId = QueryUrn.From("urn:leaf:query:d7359668-df0d-4604-a2d9-1d3d04417dc2:563423")
            };
            var pr = new PreflightResources(new QueryRef[] { })
            {
                DirectConceptsCheck = new PreflightConcepts
                {
                    PreflightCheck = new ConceptPreflightCheck
                    {
                        Results = new ConceptPreflightCheckResult[]
                        {
                            new ConceptPreflightCheckResult
                            {
                                Id           = Guid.NewGuid(),
                                UniversalId  = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"),
                                IsPresent    = true,
                                IsAuthorized = true
                            },
                            new ConceptPreflightCheckResult
                            {
                                Id           = Guid.NewGuid(),
                                UniversalId  = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"),
                                IsPresent    = true,
                                IsAuthorized = true
                            }
                        }
                    }
                },
                DirectQueriesCheck = new PreflightQueries
                {
                    Results = new QueryPreflightCheckResult[]
                    {
                        new QueryPreflightCheckResult
                        {
                            QueryRef     = first,
                            IsPresent    = false,
                            IsAuthorized = false,
                            ConceptCheck = new ConceptPreflightCheck
                            {
                                Results = new ConceptPreflightCheckResult[]
                                {
                                    new ConceptPreflightCheckResult
                                    {
                                        Id           = Guid.NewGuid(),
                                        UniversalId  = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"),
                                        IsPresent    = true,
                                        IsAuthorized = true
                                    },
                                    new ConceptPreflightCheckResult
                                    {
                                        Id           = Guid.NewGuid(),
                                        UniversalId  = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"),
                                        IsPresent    = true,
                                        IsAuthorized = true
                                    }
                                }
                            }
                        },
                        new QueryPreflightCheckResult
                        {
                            QueryRef     = second,
                            IsPresent    = true,
                            IsAuthorized = true,
                            ConceptCheck = new ConceptPreflightCheck
                            {
                                Results = new ConceptPreflightCheckResult[]
                                {
                                    new ConceptPreflightCheckResult
                                    {
                                        Id           = Guid.NewGuid(),
                                        UniversalId  = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.41"),
                                        IsPresent    = true,
                                        IsAuthorized = true
                                    },
                                    new ConceptPreflightCheckResult
                                    {
                                        Id           = Guid.NewGuid(),
                                        UniversalId  = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.50"),
                                        IsPresent    = true,
                                        IsAuthorized = true
                                    }
                                }
                            }
                        }
                    }
                }
            };

            var errors = pr.Errors();

            Assert.False(errors.ConceptErrors.Any());
            Assert.True(errors.QueryErrors.Any());
        }
        public void Concepts_Should_Match_Count_If_Ok()
        {
            var first = new QueryRef {
                Id = Guid.NewGuid(), UniversalId = QueryUrn.From("urn:leaf:query:d7359679-df0d-4604-a2d9-1d3d04417dc2:123456")
            };
            var second = new QueryRef {
                Id = Guid.NewGuid(), UniversalId = QueryUrn.From("urn:leaf:query:d7359668-df0d-4604-a2d9-1d3d04417dc2:563423")
            };
            var errorUid = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42");

            var c12342 = Guid.NewGuid();
            var c12345 = Guid.NewGuid();
            var c12341 = Guid.NewGuid();
            var c12344 = Guid.NewGuid();
            var c12340 = Guid.NewGuid();
            var c12350 = Guid.NewGuid();

            var pr = new PreflightResources(new QueryRef[] { first, second })
            {
                DirectConceptsCheck = new PreflightConcepts
                {
                    PreflightCheck = new ConceptPreflightCheck
                    {
                        Results = new ConceptPreflightCheckResult[]
                        {
                            new ConceptPreflightCheckResult
                            {
                                Id           = c12342,
                                UniversalId  = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"),
                                IsPresent    = true,
                                IsAuthorized = true
                            },
                            new ConceptPreflightCheckResult
                            {
                                Id           = c12345,
                                UniversalId  = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"),
                                IsPresent    = true,
                                IsAuthorized = true
                            }
                        }
                    },
                    Concepts = new Concept[]
                    {
                        new Concept
                        {
                            Id          = c12342,
                            UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"),
                        },
                        new Concept
                        {
                            Id          = c12345,
                            UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"),
                        }
                    }
                },
                DirectQueriesCheck = new PreflightQueries
                {
                    Results = new QueryPreflightCheckResult[]
                    {
                        new QueryPreflightCheckResult
                        {
                            QueryRef     = first,
                            IsPresent    = true,
                            IsAuthorized = true,
                            ConceptCheck = new ConceptPreflightCheck
                            {
                                Results = new ConceptPreflightCheckResult[]
                                {
                                    new ConceptPreflightCheckResult
                                    {
                                        Id           = c12341,
                                        UniversalId  = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.41"),
                                        IsPresent    = true,
                                        IsAuthorized = true
                                    },
                                    new ConceptPreflightCheckResult
                                    {
                                        Id           = c12344,
                                        UniversalId  = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.44"),
                                        IsPresent    = true,
                                        IsAuthorized = true
                                    }
                                }
                            }
                        },
                        new QueryPreflightCheckResult
                        {
                            QueryRef     = second,
                            IsPresent    = true,
                            IsAuthorized = true,
                            ConceptCheck = new ConceptPreflightCheck
                            {
                                Results = new ConceptPreflightCheckResult[]
                                {
                                    new ConceptPreflightCheckResult
                                    {
                                        Id           = c12340,
                                        UniversalId  = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.40"),
                                        IsPresent    = true,
                                        IsAuthorized = true
                                    },
                                    new ConceptPreflightCheckResult
                                    {
                                        Id           = c12350,
                                        UniversalId  = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.50"),
                                        IsPresent    = true,
                                        IsAuthorized = true
                                    }
                                }
                            }
                        }
                    }
                }
            };

            var concepts = pr.Concepts(new Model.Options.CompilerOptions {
                Alias = "@", FieldPersonId = "person_id"
            });

            Assert.True(concepts.Count() == 4);
            Assert.Contains(concepts, c => c.Id == c12342);
            Assert.Contains(concepts, c => c.Id == c12345);
            Assert.Contains(concepts, c => c.Id == first.Id.Value);
            Assert.Contains(concepts, c => c.Id == second.Id.Value);
        }
Exemple #30
0
        public void QueryUrn_From_NonQueryUrn_Should_Fail()
        {
            var urn = "urn:leaf:concept:diag:codeset=ICD9+code=123.42";

            Assert.Throws <FormatException>(() => QueryUrn.From(urn));
        }