public async Task <TrainingTemplateDto> CloneAsync(TrainingTemplate template, int userId)
        {
            User user = await userService.GetUserEntityByIdAsync(userId);

            if (template is null || user is null)
            {
                return(null);
            }

            TrainingTemplate templateClone = template.Clone();

            templateClone.CreatorId = userId;

            TrainingTemplateDto templateDto = await AddTrainingTemplateAsync(
                mapper.Map <TrainingTemplate, TrainingTemplateModel>(templateClone), userId);

            if (templateDto is null)
            {
                return(null);
            }

            templateClone = await traingingTemplateRepository.GetByIdAsync(templateDto.Id);

            List <Exercise> clonedExercises = template.Exercises.Select(e => e.Clone()).ToList();

            templateClone.Exercises = clonedExercises;

            templateClone = await traingingTemplateRepository.UpdateAsync(templateClone);

            await traingingTemplateRepository.SaveChangesAsync();

            return(mapper.Map <TrainingTemplate, TrainingTemplateDto>(templateClone));
        }