|
|
@@ -0,0 +1,71 @@ |
|
|
|
package endpoints |
|
|
|
|
|
|
|
import ( |
|
|
|
"encoding/json" |
|
|
|
"net/http" |
|
|
|
|
|
|
|
. "github.com/imosed/signet/data" |
|
|
|
"github.com/rs/zerolog/log" |
|
|
|
) |
|
|
|
|
|
|
|
type AnalyticsFund struct { |
|
|
|
ID int `json:"id"` |
|
|
|
Asset string `json:"asset"` |
|
|
|
MinContribution float64 `json:"minContribution"` |
|
|
|
AmountAvailable float64 `json:"amountAvailable"` |
|
|
|
Memo string `json:"memo"` |
|
|
|
FundWallet string `json:"fundWallet"` |
|
|
|
Raised float64 `json:"raised"` |
|
|
|
} |
|
|
|
|
|
|
|
type NearlyCompleteFundsRequest struct { |
|
|
|
Threshold float32 `json:"threshold"` |
|
|
|
} |
|
|
|
|
|
|
|
type NearlyCompleteFundsResponse struct { |
|
|
|
Funds []AnalyticsFund `json:"funds"` |
|
|
|
} |
|
|
|
|
|
|
|
func NearlyCompleteFunds(w http.ResponseWriter, r *http.Request) { |
|
|
|
var req NearlyCompleteFundsRequest |
|
|
|
err := json.NewDecoder(r.Body).Decode(&req) |
|
|
|
if err != nil { |
|
|
|
log.Error().Err(err).Msg("Could not decode body in NearlyCompleteFunds call") |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
var resp NearlyCompleteFundsResponse |
|
|
|
Db.Table("contributions"). |
|
|
|
Select("rf.id", "asset", "min_contribution", "amount_available", "memo", "fund_wallet", "sum(amount) as raised"). |
|
|
|
Joins("inner join reward_funds rf on rf.id = contributions.reward_fund_id"). |
|
|
|
Group("asset, rf.id, min_contribution, amount_available, memo, fund_wallet"). |
|
|
|
Having("sum(amount) between (rf.amount_available * ?) and rf.amount_available", req.Threshold/100). |
|
|
|
Scan(&resp.Funds) |
|
|
|
err = json.NewEncoder(w).Encode(resp) |
|
|
|
if err != nil { |
|
|
|
log.Error().Err(err).Msg("Could not deliver response in NearlyCompleteFunds call") |
|
|
|
return |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// CompletedFundsRequest TODO: Finish out this for a future release |
|
|
|
type CompletedFundsRequest struct { |
|
|
|
} |
|
|
|
|
|
|
|
type CompletedFundsResponse struct { |
|
|
|
} |
|
|
|
|
|
|
|
func CompletedFunds(w http.ResponseWriter, r *http.Request) { |
|
|
|
var req CompletedFundsRequest |
|
|
|
err := json.NewDecoder(r.Body).Decode(&req) |
|
|
|
if err != nil { |
|
|
|
panic("Could not decode body") |
|
|
|
} |
|
|
|
|
|
|
|
var resp CompletedFundsResponse |
|
|
|
|
|
|
|
err = json.NewEncoder(w).Encode(resp) |
|
|
|
if err != nil { |
|
|
|
panic("Could not deliver response") |
|
|
|
} |
|
|
|
} |