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))); }); }
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) })); });