private void HandleCreateExperiment(CreateExperiment createExperiment)
        {
            Result <Experiment> experimentCreationResult = _repository.CreateExperiment(createExperiment);

            if (experimentCreationResult.IsFailure)
            {
                ExperimentCreationFailed failedExperiment =
                    new ExperimentCreationFailed(
                        experimentCreationResult.Error,
                        createExperiment.LoggedInUserId,
                        createExperiment.SagaId
                        );
                _kafkaProducer.Produce(failedExperiment, EXPERIMENT_TOPIC);
                return;
            }

            ExperimentCreated createdExperiment = new ExperimentCreated(
                experimentCreationResult.Value.Id,
                experimentCreationResult.Value.Creator,
                experimentCreationResult.Value.Name,
                experimentCreationResult.Value.CreationDate,
                createExperiment.LoggedInUserId,
                createExperiment.SagaId
                );

            _kafkaProducer.Produce(createdExperiment, EXPERIMENT_TOPIC);
        }
        public IActionResult CreateExperimentWithMethods(ExperimentWithMethodsDTO experimentWithMethodsDTO)
        {
            long loggedInUserId = GetLoggedInUserIdMockUp();

            if (loggedInUserId == -1)
            {
                return(Unauthorized());
            }

            CreateExperiment createExperiment =
                new CreateExperiment(experimentWithMethodsDTO.Experiment.Creator, experimentWithMethodsDTO.Experiment.Name, loggedInUserId);

            List <CreateMethod> createMethods = new List <CreateMethod>();

            foreach (var methodDTO in experimentWithMethodsDTO.Methods)
            {
                CreateMethod createMethod = new CreateMethod(methodDTO.Creator, methodDTO.Name, methodDTO.ApplicationRate, loggedInUserId);
                createMethods.Add(createMethod);
            }

            CreateMethods createMethodsCommand = new CreateMethods(createMethods, loggedInUserId);

            Guid sagaId = Guid.NewGuid();

            StartCreatingExperimentWithMethods startCreatingExperimentWithMethods =
                new StartCreatingExperimentWithMethods(createExperiment, createMethodsCommand, loggedInUserId, sagaId);

            _kafkaProducer.Produce(startCreatingExperimentWithMethods, EXPERIMENTS_TOPIC);

            _logger.LogInformation("In Controller about to return");

            return(Ok("Currently processing your request..."));
        }
        public async Task <GoogleExperiment> CreateExperimentAsync(string profileId, string name, int?nodeId = null)
        {
            var command = new CreateExperiment(AnalyticsAccount.GetByUniqueId(profileId),
                                               name, nodeId == null, nodeId);

            return(await ExecuteAsync(command));
        }
        public IActionResult CreateExperiment([FromBody] ExperimentDTO experimentDTO)
        {
            long loggedInUserId = GetLoggedInUserIdMockUp();

            if (loggedInUserId == -1)
            {
                return(Unauthorized());
            }

            CreateExperiment createExperiment =
                new CreateExperiment(experimentDTO.Creator, experimentDTO.Name, loggedInUserId);

            _kafkaProducer.Produce(createExperiment, EXPERIMENT_TOPIC);

            return(Ok("Currently processing your request..."));
        }
        public Result <Experiment> CreateExperiment(CreateExperiment createExperiment)
        {
            Experiment experiment = new Experiment(createExperiment.Creator, createExperiment.Name);

            ExperimentValidator experimentValidator = new ExperimentValidator();
            var validationResult = experimentValidator.Validate(experiment);

            if (!validationResult.IsValid)
            {
                return(Result.Fail <Experiment>(string.Join(" ", validationResult.Errors)));
            }

            experiment.SetId(++lastIdValue);
            experimentsMemoryDatabase.Add(experiment);

            return(Result.Ok <Experiment>(experiment));
        }