Example #1
0
        /// <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
            });
        }