Ejemplo n.º 1
0
        private ValueSetPatchParameters Build(ClientTermValueSetApiModel model)
        {
            var codesToAdd    = this.GetCodesForInstruction(model, OperationInstruction.Add);
            var codesToRemove = this.GetCodesForInstruction(model, OperationInstruction.Remove);

            return(new ValueSetPatchParameters
            {
                Name = model.Name,
                ValueSetMeta = model,
                CodesToAdd = codesToAdd,
                CodesToRemove = codesToRemove
            });
        }
Ejemplo n.º 2
0
        public Attempt <IValueSet> UpdateValueSet(Guid valueSetGuid, ClientTermValueSetApiModel model)
        {
            var parameters = this.Build(model);

            parameters.ValueSetGuid = valueSetGuid;

            if (parameters.IsValid())
            {
                return(this.clientTermValueSetService.Patch(parameters));
            }

            var invalidModel = new InvalidOperationException("Failed to validate ClientTermValueSetApiModel.  Possible duplicate codes detected between add and remove instructions.");

            return(Attempt <IValueSet> .Failed(invalidModel));
        }
Ejemplo n.º 3
0
        public Attempt <IValueSet> CreateValueSet(ClientTermValueSetApiModel model)
        {
            var parameters = this.Build(model);

            if (parameters.IsValid())
            {
                return(this.clientTermValueSetService.Create(
                           parameters.Name,
                           parameters.ValueSetMeta,
                           parameters.CodesToAdd.ToList()));
            }

            var invalidModel = new InvalidOperationException("Failed to validate ClientTermValueSetApiModel. Possible duplicate codes detected between add and remove instructions.");

            return(Attempt <IValueSet> .Failed(invalidModel));
        }
Ejemplo n.º 4
0
        private IEnumerable <ICodeSystemCode> GetCodesForInstruction(
            ClientTermValueSetApiModel model,
            OperationInstruction operationInstruction)
        {
            var codes = new List <ICodeSystemCode>();

            var valueSetGuids = GetIdGuids(model.CodeOperations, CodeOperationSource.ValueSet, operationInstruction);
            var codeGuids     = GetIdGuids(model.CodeOperations, CodeOperationSource.CodeSystemCode, operationInstruction);

            codes.AddRange(this.GetCodeSystemCodesByValueSets(valueSetGuids));
            codes.AddRange(this.GetCodeSystemCodes(codeGuids));

            return(codes.GroupBy(csc => csc.CodeGuid)
                   .Select(group => group.FirstOrDefault())
                   .Where(csc => csc != null)
                   .ToList());
        }
Ejemplo n.º 5
0
 private static Attempt <ClientTermValueSetApiModel> FailedAttempt(string msg, ClientTermValueSetApiModel model) =>
 Attempt <ClientTermValueSetApiModel> .Failed(new ValueSetOperationException(msg), model);
Ejemplo n.º 6
0
        public static Attempt <ClientTermValueSetApiModel> ValidatePatchModel(Guid valueSetGuid, ClientTermValueSetApiModel model)
        {
            if (AttemptsToUseItselfAsCodeSource(valueSetGuid, model.CodeOperations))
            {
                return(FailedAttempt(
                           "Invalid model. Operation would result in an attempt to add value set to itself. ValueSetGuid references the value set to which the operation would be applied.",
                           model));
            }

            if (AttemptsToPerformOperationOnDuplicateReferenceKey(model.CodeOperations, CodeOperationSource.ValueSet))
            {
                return(FailedAttempt("Invalid model.  Found a duplicate valueSetGuid in codeOperation values.", model));
            }

            if (AttemptsToPerformOperationOnDuplicateReferenceKey(
                    model.CodeOperations,
                    CodeOperationSource.CodeSystemCode))
            {
                return(FailedAttempt(
                           "Invalid model.  Found a duplicate codeGuid in codeOperation values.  Codes must be unique in a value set and it ambiguous to attempt to both add and remove the same code.",
                           model));
            }

            return(Attempt <ClientTermValueSetApiModel> .Successful(model));
        }