Beispiel #1
0
        public async Task <DatasetResponse> CreateGitLabProject(Task <Dataset> createDatasetTask, Dataset exsistingDataset)
        {
            // NOTE: Her venter jeg på at datasettet skal opprettes uten feil,
            // før det opprettes i gitlab, for å hindre at det eksisterer løse prosjekter
            // i gitlab.
            // Dette kan kanskje gjøres smoothere.
            var gitlabProjectResponse = await await createDatasetTask.ContinueWith(async(antecedent) => {
                var dataset = antecedent.Result;

                var publisher = await _publisherRepository.FindByIdAsync(dataset.PublisherId);

                // NOTE: Enn så lenge så må vi verifisere at det eksisterer en gitlab-gruppe for publisher
                // før vi kan lage et prosjekt i riktig gruppe. I produksjon vil ikke dette være nødvendig,
                // og det bør heller ikke kjøre, fordi hvis det ikke eksisterer betyr det at noe har gått
                // galt ved opprettelse av publisher. (TODO: ordne dette en gang)
                if (publisher.GitlabGroupNamespaceId == null)
                {
                    var gitlabGroupResponse = await _gitlabService.CreateGitlabGroupForPublisher(publisher);
                    if (gitlabGroupResponse.Success)
                    {
                        publisher.GitlabGroupPath        = gitlabGroupResponse.Resource.full_path;
                        publisher.GitlabGroupNamespaceId = gitlabGroupResponse.Resource.id;
                        _publisherRepository.Update(publisher);
                        await _unitOfWork.CompleteAsync();
                    }
                    else
                    {
                        // hvis vi havner her så har ting gått veldig galt. (Dette er midlertidige saker uansett.)
                        // typisk skjer dette hvis det allerede eksisterer en gruppe i gitlab for publisher,
                        // men dette er ikke reflektert i databasen.
                        return(new GitlabResponse <GitlabProject>(gitlabGroupResponse.Message + " ======> Noe har gått veldig galt med sære ting: Nei, vil ikke (Erna Solberg, 2018)"));
                    }
                }

                return(await _gitlabService.CreateDatasetProject(dataset));
            }, TaskContinuationOptions.OnlyOnRanToCompletion);

            if (gitlabProjectResponse.Success)
            {
                exsistingDataset.GitlabProjectId         = gitlabProjectResponse.Resource.id;
                exsistingDataset.GitlabProjectPath       = gitlabProjectResponse.Resource.path_with_namespace;
                exsistingDataset.GitlabDiscussionBoardId = gitlabProjectResponse.Resource.defaultGitlabIssueBoardId;
                _datasetRepository.Update(exsistingDataset);
                await _unitOfWork.CompleteAsync();

                return(new DatasetResponse(exsistingDataset));
            }
            else
            {
                // Hvis opprettelse av prosjekt i gitlab feiler bør datasettet fjernes fra databasen
                // Denne kan nå også potensielt fjerne eksisterende datasett som ikke enda har fått en gitlab tilknytting om det oppstår en feil
                _datasetRepository.Remove(exsistingDataset);
                await _unitOfWork.CompleteAsync();

                return(new DatasetResponse("GitLab project response failed:" + gitlabProjectResponse.Message));
            }
        }
Beispiel #2
0
        public async Task <PublisherResponse> SaveAsync(Publisher publisher)
        {
            try
            {
                var createPublisherTask = Task.Run(async() => {
                    await _publisherRepository.AddAsync(publisher);
                    await _unitOfWork.CompleteAsync();
                });

                var gitlabGroupResponse = await await createPublisherTask.ContinueWith((antecedent) => {
                    return(_gitlabService.CreateGitlabGroupForPublisher(publisher));
                }, TaskContinuationOptions.OnlyOnRanToCompletion);

                if (gitlabGroupResponse.Success)
                {
                    // NOTE: bruker full_path her i stedet for web_url.
                    // full web url (med hostname) lages ved opprettelse av resource.
                    publisher.GitlabGroupPath        = gitlabGroupResponse.Resource.full_path;
                    publisher.GitlabGroupNamespaceId = gitlabGroupResponse.Resource.id;

                    _publisherRepository.Update(publisher);
                    await _unitOfWork.CompleteAsync();

                    return(new PublisherResponse(publisher));
                }
                else
                {
                    // Hvis opprettelse av gruppe i gitlab feiler bør publisher fjernes fra databasen
                    _publisherRepository.Remove(publisher);
                    await _unitOfWork.CompleteAsync();

                    return(new PublisherResponse(gitlabGroupResponse.Message));
                }
            }
            catch (Exception ex)
            {
                // Do some logging stuff
                return(new PublisherResponse($"An error occurred when saving the publisher: {ex.Message}"));
            }
        }