public Task <ResponseDTO> Handle(SearchRequestDTO request, CancellationToken cancellationToken)
        {
            ResponseDTO result = new ResponseDTO();

            try
            {
                var dicAlgorithms = GetAlgorithmsDictionary();

                ISearchAlgorithm algorithm = AlgorithmsCreator.GetAlgorithm(dicAlgorithms, request.AlgorithmKey, request.Matrix);
                var algorithmResult        = algorithm.Find(request.WordStream);

                _unitOfWork.SearchesRepository.Add(new Searches()
                {
                    UserName     = request.UserName,
                    AlgorithmKey = request.AlgorithmKey,
                    Matrix       = request.Matrix.Aggregate((x, y) => x + "," + y),
                    WordStream   = request.WordStream.Aggregate((x, y) => x + "," + y)
                });

                _unitOfWork.SaveChanges();

                result.Status = (int)eStatus.Success;
                result.Value  = algorithmResult;
            }
            catch (WordFinderCustomException ex)
            {
                result.Status  = (int)eStatus.Error;
                result.Message = ex.Message;
            }
            catch (Exception ex)
            {
                result.Status  = (int)eStatus.Error;
                result.Message = "Unexpected error";
            }

            return(Task.FromResult(result));
        }