Initial commit on Forgejo
All checks were successful
CI and deploy / Test (push) Successful in 4m52s
CI and deploy / Deploy production (push) Successful in 23s

Fresh repository history for elektrine/tarakan hosted at
https://git.elektrine.com/elektrine/tarakan.
This commit is contained in:
Maxfield Luke 2026-07-29 04:43:40 -04:00
commit af6077b9c3
455 changed files with 78366 additions and 0 deletions

View file

@ -0,0 +1,71 @@
defmodule Tarakan.Repo.Migrations.CreateBounties do
use Ecto.Migration
def change do
create table(:bounties) do
add :public_id, :uuid, null: false, default: fragment("gen_random_uuid()")
add :sponsor_account_id, references(:accounts), null: false
add :target_type, :string, null: false
add :repository_id, references(:repositories)
add :pattern_key, :string
add :canonical_finding_id, references(:canonical_findings)
add :title, :string, null: false
add :description, :string, null: false
add :funding, :string, null: false
add :amount_cents, :integer
add :credit_amount, :integer
add :take_rate, :decimal, precision: 4, scale: 3, null: false
add :status, :string, null: false, default: "pending_funding"
add :stripe_checkout_session_id, :string
add :winner_account_id, references(:accounts)
add :expires_at, :utc_datetime_usec
timestamps(type: :utc_datetime_usec)
end
create unique_index(:bounties, [:public_id])
create index(:bounties, [:status])
create index(:bounties, [:repository_id])
create index(:bounties, [:pattern_key])
create index(:bounties, [:canonical_finding_id])
create index(:bounties, [:sponsor_account_id])
create index(:bounties, [:stripe_checkout_session_id])
# Target shape (exactly one ref matching target_type) is validated in the
# Bounty changeset; see Tarakan.Market.Bounty.validate_target/1.
create constraint(:bounties, :bounties_target_type_must_be_valid,
check: "target_type IN ('repository','infestation','finding')"
)
create constraint(:bounties, :bounties_funding_must_be_valid,
check: "funding IN ('fiat','credits')"
)
create constraint(:bounties, :bounties_status_must_be_valid,
check:
"status IN ('pending_funding','open','claimed','fulfilled','payout_pending','paid','cancelled','expired')"
)
create table(:bounty_claims) do
add :bounty_id, references(:bounties), null: false
add :account_id, references(:accounts), null: false
add :review_task_id, references(:review_tasks)
add :status, :string, null: false, default: "claimed"
timestamps(type: :utc_datetime_usec)
end
create index(:bounty_claims, [:bounty_id])
create index(:bounty_claims, [:account_id])
create constraint(:bounty_claims, :bounty_claims_status_must_be_valid,
check: "status IN ('claimed','submitted','accepted','rejected','withdrawn')"
)
# One active claim per hunter per bounty.
create unique_index(:bounty_claims, [:bounty_id, :account_id],
name: :bounty_claims_active_unique_index,
where: "status IN ('claimed','submitted')"
)
end
end