Exemplo n.º 1
0
        public ProjectCrudController()
        {
            Post("/api/v1/project/post/new", _ => {
                var me      = UserRepository.Find(CurrentRequest.UserId);
                var project = ProjectRepository.FindByGuid(GetRequestStr("project_guid"));
                if (project == null)
                {
                    return(HttpResponse.Error(HttpStatusCode.NotFound, "Project not found"));
                }

                var errors = ValidationProcessor.Process(Request, new IValidatorRule[] {
                    new ShouldHaveParameters(new[] { "project_guid", "title", "content" }),
                    new ExistsInTable("project_guid", "projects", "guid"),
                    new HasPermission(me, project.id, EntityType.Project),
                }, true);
                if (errors.Count > 0)
                {
                    return(HttpResponse.Errors(errors));
                }

                var post = ProjectPost.Create(
                    project, GetRequestStr("title"), GetRequestStr("content")
                    );

                return(HttpResponse.Item(
                           "post", new ProjectPostTransformer().Transform(post), HttpStatusCode.Created
                           ));
            });

            Delete("/api/v1/project/post/delete", _ => {
                var post = ProjectPost.FindBy("guid", GetRequestStr("post_guid"));
                if (post == null)
                {
                    return(HttpResponse.Error(HttpStatusCode.NotFound, "Post not found"));
                }

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

                var errors = ValidationProcessor.Process(Request, new IValidatorRule[] {
                    new ShouldHaveParameters(new[] { "post_guid" }),
                    new HasPermission(me, post.project_id, EntityType.Project),
                }, true);
                if (errors.Count > 0)
                {
                    return(HttpResponse.Errors(errors));
                }

                post.Delete();

                return(HttpResponse.Item("post", new ProjectPostTransformer().Transform(post)));
            });
        }
Exemplo n.º 2
0
        public SyncReleases()
        {
            Post("/api/v1/schedule/project/sync_releases/start", _ => {
                var task = Task.Run(() => {
                    var githubClient = new GitHubClient(new ProductHeaderValue("GitCom"));
                    var githubToken  = AppConfig.GetConfiguration("auth:external:github:token");
                    if (githubToken != null)
                    {
                        githubClient.Credentials = new Credentials(githubToken);
                    }

                    var repos = Repo.GetRandom(50);

                    foreach (var repo in repos)
                    {
                        try {
                            if (repo.service_type != RepoServiceType.GitHub)
                            {
                                continue;
                            }
                            var splitUrl = repo.repo_url.Split("/");
                            IEnumerable <Release> releases;
                            try {
                                releases = githubClient.Repository.Release.GetAll(
                                    splitUrl[3], splitUrl[4]
                                    ).Result.OrderBy(x => x.Id);
                            }
                            catch (Exception e) {
                                continue; // ignored
                            }

                            foreach (var release in releases)
                            {
                                if (release.Body.Length < 100)
                                {
                                    continue;
                                }

                                var existingPost = ProjectPost.FindBy("origin_id", release.Id.ToString());
                                if (existingPost != null)
                                {
                                    continue;
                                }

                                var post = ProjectPost.Create(
                                    repo.Project(), $"Released {release.Name}", release.Body
                                    );
                                post.UpdateCol("origin_id", release.Id.ToString());
                                post.UpdateCol(
                                    "created_at", release.PublishedAt.Value.ToUnixTimeSeconds().ToString()
                                    );
                            }
                        }
                        catch (Exception e) {
                            SentrySdk.CaptureException(e);
                        }
                    }
                });
                JobsPool.Get().Push(task);
                return(HttpResponse.Data(new JObject()));
            });
        }