drop view if exists claims_view cascade;
drop view if exists bounties_view cascade;
drop view if exists activity_feed_view cascade;
CREATE VIEW 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,
    p.state AS pr_state
   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 view 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,
    i.updated
   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;

create view 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,
    claims_view.updated
   FROM claims_view
  WHERE claims_view.pr_state = 0 AND claims_view.payout_receipt IS NULL
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,
    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,
    bounties_view.updated
   FROM bounties_view
  WHERE bounties_view.balance = 0::numeric AND bounties_view.payout_receipt IS NULL
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,
    bounties_view.updated
   FROM bounties_view
  WHERE bounties_view.balance > 0::numeric AND bounties_view.payout_receipt IS NULL
  ORDER BY 9 DESC;
