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 }); }
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)); }
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)); }
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()); }
private static Attempt <ClientTermValueSetApiModel> FailedAttempt(string msg, ClientTermValueSetApiModel model) => Attempt <ClientTermValueSetApiModel> .Failed(new ValueSetOperationException(msg), model);
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)); }