| @@ -2,11 +2,71 @@ package endpoints | |||
| import ( | |||
| "encoding/json" | |||
| . "github.com/imosed/signet/data" | |||
| "gorm.io/gorm/clause" | |||
| "net/http" | |||
| . "github.com/imosed/signet/data" | |||
| ) | |||
| func getQualifiedRewardFunds() []RewardFund { | |||
| var standalone []RewardFund | |||
| var currentFromQueues []RewardFund | |||
| var allQueues []RewardFund | |||
| Db.Table("reward_funds"). | |||
| Select("reward_funds.id", | |||
| "reward_funds.created_at", | |||
| "reward_funds.updated_at", | |||
| "reward_funds.deleted_at", | |||
| "reward_funds.asset", | |||
| "reward_funds.fund_wallet", | |||
| "reward_funds.selling_wallet", | |||
| "reward_funds.issuer_wallet", | |||
| "reward_funds.memo", | |||
| "reward_funds.price", | |||
| "reward_funds.amount_available", | |||
| "reward_funds.min_contribution", | |||
| "reward_funds.title", | |||
| "reward_funds.description"). | |||
| Joins("left outer join queue_orders qo on reward_funds.id = qo.reward_fund_id"). | |||
| Where("qo.reward_fund_id is null"). | |||
| Scan(&standalone) | |||
| tempTable := Db.Table("contributions c"). | |||
| Select("c.reward_fund_id", | |||
| "queue_id", | |||
| "sum(amount) amt"). | |||
| Joins("inner join queue_orders qo on c.reward_fund_id = qo.reward_fund_id"). | |||
| Group("c.reward_fund_id"). | |||
| Group("qo.queue_id") | |||
| Db.Table("reward_funds"). | |||
| Select("distinct on (qo.queue_id) reward_funds.id", | |||
| "reward_funds.created_at", | |||
| "reward_funds.updated_at", | |||
| "reward_funds.deleted_at", | |||
| "reward_funds.asset", | |||
| "reward_funds.fund_wallet", | |||
| "reward_funds.selling_wallet", | |||
| "reward_funds.issuer_wallet", | |||
| "reward_funds.memo", | |||
| "reward_funds.price", | |||
| "reward_funds.amount_available", | |||
| "reward_funds.min_contribution", | |||
| "reward_funds.title", | |||
| "reward_funds.description"). | |||
| Joins("inner join queue_orders qo on reward_funds.id = qo.reward_fund_id"). | |||
| Joins("left join contributions c on reward_funds.id = c.reward_fund_id"). | |||
| Joins("inner join (?) tt on reward_funds.id = tt.reward_fund_id", | |||
| tempTable, | |||
| Db.Where("tt.amount < reward_funds.amount_available or tt.amount is null")). | |||
| Order("qo.queue_id"). | |||
| Order("qo.order"). | |||
| Scan(¤tFromQueues) | |||
| allQueues = append(standalone, currentFromQueues...) | |||
| return allQueues | |||
| } | |||
| func GetRewardFunds(w http.ResponseWriter, r *http.Request) { | |||
| var req GetRewardFundsRequest | |||
| err := json.NewDecoder(r.Body).Decode(&req) | |||
| @@ -16,11 +76,7 @@ func GetRewardFunds(w http.ResponseWriter, r *http.Request) { | |||
| var resp GetRewardFundsResponse | |||
| var rewardFunds []RewardFund | |||
| Db.Table("reward_funds").Count(&resp.Total) | |||
| Db.Preload(clause.Associations).Table("reward_funds"). | |||
| Select("id", "created_at", "asset", "fund_wallet", "issuer_wallet", "memo", "min_contribution", "amount_available", "title"). | |||
| Order("created_at desc"). | |||
| Find(&rewardFunds) | |||
| rewardFunds = getQualifiedRewardFunds() | |||
| for _, f := range rewardFunds { | |||
| resp.RewardFunds = append(resp.RewardFunds, FundInfo{ | |||