/// <summary> /// Creates the protocol. /// </summary> /// <param name="customerId"></param> /// <param name="request">The request.</param> /// <returns></returns> public async Task <OperationResultDto <Guid, CreateUpdateProtocolStatus> > CreateProtocol( int customerId, CreateProtocolRequestDto request ) { #region Step 1 - Client IDs validation var validationResult = PerformValidationStep1(request); if (!validationResult.HasFlag(CreateUpdateProtocolStatus.Success)) { return(new OperationResultDto <Guid, CreateUpdateProtocolStatus>() { Status = validationResult }); } #endregion #region Step 2 - Remaining Validation which can be made only after successfuly passed step 1 validationResult = await PerformValidationStep2(request); if (!validationResult.HasFlag(CreateUpdateProtocolStatus.Success)) { return(new OperationResultDto <Guid, CreateUpdateProtocolStatus>() { Status = validationResult }); } #endregion var protocol = await BuildProtocol(customerId, request); var createdProtocol = await protocolService.CreateProtocol(protocol); await globalSearchCacheHelper.AddOrUpdateEntry(customerId, Mapper.Map <Protocol, SearchEntryDto>(protocol)); await tagsSearchCacheHelper.AddOrUpdateTags(customerId, createdProtocol.Tags.Select(t => t.Name).ToList()); var unusedTags = await tagsService.RemoveUnusedTags(customerId); await tagsSearchCacheHelper.RemoveTags(customerId, unusedTags); return(new OperationResultDto <Guid, CreateUpdateProtocolStatus>() { Content = createdProtocol.Id, Status = validationResult }); }