| @@ -2,11 +2,71 @@ package endpoints | |||||
| import ( | import ( | ||||
| "encoding/json" | "encoding/json" | ||||
| . "github.com/imosed/signet/data" | |||||
| "gorm.io/gorm/clause" | |||||
| "net/http" | "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) { | func GetRewardFunds(w http.ResponseWriter, r *http.Request) { | ||||
| var req GetRewardFundsRequest | var req GetRewardFundsRequest | ||||
| err := json.NewDecoder(r.Body).Decode(&req) | err := json.NewDecoder(r.Body).Decode(&req) | ||||
| @@ -16,11 +76,7 @@ func GetRewardFunds(w http.ResponseWriter, r *http.Request) { | |||||
| var resp GetRewardFundsResponse | var resp GetRewardFundsResponse | ||||
| var rewardFunds []RewardFund | 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 { | for _, f := range rewardFunds { | ||||
| resp.RewardFunds = append(resp.RewardFunds, FundInfo{ | resp.RewardFunds = append(resp.RewardFunds, FundInfo{ | ||||