@@ -121,28 +121,31 @@ defmodule Algora.Bounties do
121
121
|> Oban . insert ( )
122
122
end
123
123
124
- @ spec do_claim_bounty ( % { user: User . t ( ) , ticket: Ticket . t ( ) , pull_request: map ( ) } ) ::
124
+ @ spec do_claim_bounty ( % {
125
+ user: User . t ( ) ,
126
+ target: Ticket . t ( ) ,
127
+ source: Ticket . t ( ) ,
128
+ status: :pending | :approved | :rejected | :paid ,
129
+ type: :pull_request | :review | :video | :design | :article
130
+ } ) ::
125
131
{ :ok , Claim . t ( ) } | { :error , atom ( ) }
126
- defp do_claim_bounty ( % { user: user , ticket: ticket , pull_request: pull_request } ) do
132
+ defp do_claim_bounty ( % { user: user , target: target , source: source , status: status , type: type } ) do
127
133
# TODO: ensure user is pull request author
128
134
changeset =
129
135
Claim . changeset ( % Claim { } , % {
130
- ticket_id: ticket . id ,
136
+ target_id: target . id ,
137
+ source_id: source . id ,
131
138
user_id: user . id ,
132
- provider: "github" ,
133
- provider_id: to_string ( pull_request [ "id" ] ) ,
134
- provider_meta: Util . normalize_struct ( pull_request ) ,
135
- type: :pull_request ,
136
- title: pull_request [ "title" ] ,
137
- url: pull_request [ "html_url" ] ,
138
- merged_at: Util . to_date ( pull_request [ "merged_at" ] )
139
+ type: type ,
140
+ status: status ,
141
+ url: source . url
139
142
} )
140
143
141
144
case Repo . insert ( changeset ) do
142
145
{ :ok , claim } ->
143
146
{ :ok , claim }
144
147
145
- { :error , % { errors: [ ticket_id : { _ , [ constraint: :unique , constraint_name: _ ] } ] } } ->
148
+ { :error , % { errors: [ target_id : { _ , [ constraint: :unique , constraint_name: _ ] } ] } } ->
146
149
{ :error , :already_exists }
147
150
148
151
{ :error , _changeset } = error ->
@@ -153,17 +156,21 @@ defmodule Algora.Bounties do
153
156
@ spec claim_bounty (
154
157
% {
155
158
user: User . t ( ) ,
156
- ticket_ref: % { owner: String . t ( ) , repo: String . t ( ) , number: integer ( ) } ,
157
- pull_request: map ( )
159
+ target_ticket_ref: % { owner: String . t ( ) , repo: String . t ( ) , number: integer ( ) } ,
160
+ source_ticket_ref: % { owner: String . t ( ) , repo: String . t ( ) , number: integer ( ) } ,
161
+ status: :pending | :approved | :rejected | :paid ,
162
+ type: :pull_request | :review | :video | :design | :article
158
163
} ,
159
164
opts :: [ installation_id: integer ( ) ]
160
165
) ::
161
166
{ :ok , Bounty . t ( ) } | { :error , atom ( ) }
162
167
def claim_bounty (
163
168
% {
164
169
user: user ,
165
- ticket_ref: % { owner: repo_owner , repo: repo_name , number: number } = ticket_ref ,
166
- pull_request: pull_request
170
+ target_ticket_ref: % { owner: target_repo_owner , repo: target_repo_name , number: target_number } ,
171
+ source_ticket_ref: % { owner: source_repo_owner , repo: source_repo_name , number: source_number } ,
172
+ status: status ,
173
+ type: type
167
174
} ,
168
175
opts \\ [ ]
169
176
) do
@@ -176,8 +183,9 @@ defmodule Algora.Bounties do
176
183
177
184
Repo . transact ( fn ->
178
185
with { :ok , token } <- token_res ,
179
- { :ok , ticket } <- Workspace . ensure_ticket ( token , repo_owner , repo_name , number ) ,
180
- { :ok , claim } <- do_claim_bounty ( % { user: user , ticket: ticket , pull_request: pull_request } ) ,
186
+ { :ok , target } <- Workspace . ensure_ticket ( token , target_repo_owner , target_repo_name , target_number ) ,
187
+ { :ok , source } <- Workspace . ensure_ticket ( token , source_repo_owner , source_repo_name , source_number ) ,
188
+ { :ok , claim } <- do_claim_bounty ( % { user: user , target: target , source: source , status: status , type: type } ) ,
181
189
{ :ok , _job } <- notify_claim ( % { claim: claim } , installation_id: installation_id ) do
182
190
broadcast ( )
183
191
{ :ok , claim }
0 commit comments