public MyRepositoriesController()
        {
            Get("/api/v1/me/external/repositories/get", _ => {
                var me = UserRepository.Find(CurrentRequest.UserId);

                var repos = GitHubRepositoriesUtils.GetUserRepositories(me);

                repos = repos.Concat(
                    GitLabRepositoriesUtils.GetUserRepositories(me)
                    ).ToArray();

                return(HttpResponse.Item("repositories", new ExternalRepoTransformer().Many(repos)));
            });
        }
Exemplo n.º 2
0
        public ImportRepoController()
        {
            Post("/api/v1/repository/import", _ => {
                var errors = ValidationProcessor.Process(Request, new IValidatorRule[] {
                    new ShouldHaveParameters(new[] { "service_type", "origin_id" }),
                    new ShouldBeCorrectEnumValue("service_type", typeof(RepoServiceType))
                }, true);
                if (errors.Count > 0)
                {
                    return(HttpResponse.Errors(errors));
                }

                var originId = GetRequestStr("origin_id");

                RepoServiceType serviceType =
                    (RepoServiceType)GetRequestEnum("service_type", typeof(RepoServiceType));

                var existingRepo = RepoRepository.Find(originId, serviceType);

                if (existingRepo != null)
                {
                    return(HttpResponse.Error(HttpStatusCode.UnprocessableEntity, "Project is already imported",
                                              new JObject()
                    {
                        ["project"] = new ProjectTransformer().Transform(existingRepo.Project()),
                    }));
                }

                if (serviceType == RepoServiceType.GitHub && !GitHubRepositoriesUtils.IfRepoExists(originId))
                {
                    return(HttpResponse.Error(
                               HttpStatusCode.NotFound, "GitHub repository with this id does not exist"
                               ));
                }

                if (serviceType == RepoServiceType.GitLab && !GitlabApi.IfRepoExists(originId))
                {
                    return(HttpResponse.Error(
                               HttpStatusCode.NotFound, "GitLab repository with this id does not exist"
                               ));
                }

                var me = UserRepository.Find(CurrentRequest.UserId);

                (ProjectModel project, DL.Model.Repo.Repo repo)result = (null, null);

                switch (serviceType)
                {
                case RepoServiceType.GitHub:
                    result = GitHubRepositoriesUtils.ImportProject(me, originId);
                    break;

                case RepoServiceType.GitLab:
                    result = GitLabRepositoriesUtils.ImportProject(me, originId);
                    break;
                }

                if (result.project == null || result.repo == null)
                {
                    return(HttpResponse.Error(HttpStatusCode.BadRequest, "Cannot import target project"));
                }

                return(HttpResponse.Data(new JObject()
                {
                    ["project"] = new ProjectTransformer().Transform(result.project),
                    ["repository"] = new RepoTransformer().Transform(result.repo)
                }));
            });