Never show closed github issues as open bounties

* do not show a bounty issue in open bounties listing or activity feed
  items in case it was closed (manually or via PR)

Fixes: #95
This commit is contained in:
Teemu Patja 2017-09-13 11:09:48 +03:00
parent 640cf8abd6
commit 6522265f7d
No known key found for this signature in database
GPG Key ID: F5B7035E6580FD4C
5 changed files with 150 additions and 2 deletions

View File

@ -0,0 +1,118 @@
ALTER TABLE "public"."issues"
ADD COLUMN "is_open" boolean DEFAULT 'true';
DROP VIEW "public"."bounties_view" CASCADE;
CREATE VIEW "public"."bounties_view" AS
SELECT i.title AS issue_title,
i.issue_number,
r.repo AS repo_name,
r.owner AS repo_owner,
concat(r.owner, '/', r.repo)::character varying(128) AS user_name,
r.owner_avatar_url AS user_avatar_url,
i.payout_receipt,
i.balance_eth as balance_eth,
i.updated,
i.tokens,
i.value_usd,
i.is_open AS issue_open
FROM issues i,
repositories r
WHERE r.repo_id = i.repo_id
AND i.contract_address IS NOT NULL
AND i.comment_id IS NOT NULL
ORDER BY i.updated;
DROP VIEW "public"."claims_view" CASCADE;
CREATE VIEW "public"."claims_view" AS
SELECT i.title AS issue_title,
i.issue_number,
r.repo AS repo_name,
r.owner AS repo_owner,
COALESCE(u.name, u.login) AS user_name,
u.avatar_url AS user_avatar_url,
i.payout_receipt,
p.updated,
i.balance_eth as balance_eth,
i.tokens,
i.value_usd,
p.state AS pr_state,
i.is_open AS issue_open
FROM issues i,
users u,
repositories r,
pull_requests p
WHERE r.repo_id = i.repo_id
AND p.issue_id = i.issue_id
AND p.user_id = u.id
AND i.contract_address IS NOT NULL
AND i.comment_id IS NOT NULL
ORDER BY p.updated;
CREATE OR REPLACE VIEW "public"."activity_feed_view" AS
SELECT 'open-claim'::text AS type,
claims_view.issue_title,
claims_view.repo_name,
claims_view.repo_owner,
claims_view.issue_number,
claims_view.user_name,
claims_view.user_avatar_url,
claims_view.balance_eth,
claims_view.tokens,
claims_view.value_usd,
claims_view.updated
FROM claims_view
WHERE claims_view.pr_state = 0
AND claims_view.payout_receipt IS NULL
AND claims_view.issue_open is true
UNION
SELECT 'claim-payout'::text AS type,
claims_view.issue_title,
claims_view.repo_name,
claims_view.repo_owner,
claims_view.issue_number,
claims_view.user_name,
claims_view.user_avatar_url,
claims_view.balance_eth,
claims_view.tokens,
claims_view.value_usd,
claims_view.updated
FROM claims_view
WHERE claims_view.pr_state = 1
AND claims_view.payout_receipt IS NOT NULL
UNION
SELECT 'new-bounty'::text AS type,
bounties_view.issue_title,
bounties_view.repo_name,
bounties_view.repo_owner,
bounties_view.issue_number,
bounties_view.user_name,
bounties_view.user_avatar_url,
bounties_view.balance_eth,
bounties_view.tokens,
bounties_view.value_usd,
bounties_view.updated
FROM bounties_view
WHERE bounties_view.value_usd = 0::numeric
AND bounties_view.payout_receipt IS NULL
AND bounties_view.issue_open is true
UNION
SELECT 'balance-update'::text AS type,
bounties_view.issue_title,
bounties_view.repo_name,
bounties_view.repo_owner,
bounties_view.issue_number,
bounties_view.user_name,
bounties_view.user_avatar_url,
bounties_view.balance_eth,
bounties_view.tokens,
bounties_view.value_usd,
bounties_view.updated
FROM bounties_view
WHERE bounties_view.value_usd > 0::numeric
AND bounties_view.payout_receipt IS NULL
AND bounties_view.issue_open is true
ORDER BY 11 DESC;

View File

@ -350,6 +350,20 @@ value_usd_updated = timezone('utc'::text, now())
WHERE contract_address = :contract_address;
-- :name update-issue-open :! :n
-- :doc updates issue's open status
UPDATE issues
SET is_open = :is_open
WHERE issue_id = :issue_id;
-- :name issue-exists :1
-- :doc updates issue's open status
SELECT exists(SELECT 1
FROM issues
WHERE issue_id = :issue_id);
-- :name open-bounties :? :*
-- :doc all bounty issues for given owner
SELECT

View File

@ -81,3 +81,15 @@
(jdbc/with-db-connection [con-db *db*]
(db/update-usd-value con-db {:contract_address contract-address
:usd_value usd-value})))
(defn update-open-status
[issue-id is-open]
(jdbc/with-db-connection [con-db *db*]
(db/update-issue-open con-db {:issue_id issue-id
:is_open is-open})))
(defn is-bounty-issue?
[issue-id]
(let [res (jdbc/with-db-connection [con-db *db*]
(db/issue-exists con-db {:issue_id issue-id}))]
res))

View File

@ -50,11 +50,15 @@
(bounties/add-bounty-for-issue repo-name repo-id issue)))
(defn handle-issue-closed
;; TODO: does not work in case the issue is closed on github web ui
[{{{owner :login} :owner repo :name} :repository
{issue-id :id issue-number :number} :issue}]
(log/debug "handle-issue-closed" owner repo issue-number issue-id)
(when-let [commit-sha (find-commit-sha owner repo issue-number ["referenced" "closed"])]
(when (issues/is-bounty-issue? issue-id)
(log/debug "Updating issue status to closed")
(issues/update-open-status issue-id false))
#_(when-let [commit-sha (find-commit-sha owner repo issue-number ["referenced" "closed"])]
(log/debug (format "Issue %s/%s/%s closed with commit %s"
owner repo issue-number commit-sha))
(log/info "NOT considering event as bounty winner")