| @@ -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") | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,41 @@ | |||||
| package endpoints | |||||
| import ( | |||||
| "encoding/json" | |||||
| "net/http" | |||||
| . "github.com/imosed/signet/data" | |||||
| "github.com/rs/zerolog/log" | |||||
| ) | |||||
| type FundOrder struct { | |||||
| ID int `json:"id"` | |||||
| Asset string `json:"asset"` | |||||
| Order int `json:"order"` | |||||
| } | |||||
| type EditQueueRequest struct { | |||||
| QueueID int `json:"queueID"` | |||||
| FundOrders []FundOrder `json:"fundOrders"` | |||||
| } | |||||
| func EditQueue(w http.ResponseWriter, r *http.Request) { | |||||
| var req EditQueueRequest | |||||
| err := json.NewDecoder(r.Body).Decode(&req) | |||||
| if err != nil { | |||||
| log.Error().Err(err).Msg("Could not decode body in EditQueue call") | |||||
| return | |||||
| } | |||||
| var resp SuccessResponse | |||||
| for _, qo := range req.FundOrders { | |||||
| Db.Table("queue_orders"). | |||||
| Where("reward_fund_id = ? and queue_id = ?", qo.ID, req.QueueID). | |||||
| Update("order", qo.Order) | |||||
| } | |||||
| err = json.NewEncoder(w).Encode(resp) | |||||
| if err != nil { | |||||
| log.Error().Err(err).Msg("Could not deliver response in EditQueue call") | |||||
| } | |||||
| } | |||||
| @@ -35,6 +35,7 @@ func GetQueueMembers(w http.ResponseWriter, r *http.Request) { | |||||
| Db.Table("queue_orders qo").Select("rf.id, asset, title, qo.order"). | Db.Table("queue_orders qo").Select("rf.id, asset, title, qo.order"). | ||||
| Where("queue_id = ?", req.ID). | Where("queue_id = ?", req.ID). | ||||
| Joins("inner join reward_funds rf on qo.reward_fund_id = rf.id"). | Joins("inner join reward_funds rf on qo.reward_fund_id = rf.id"). | ||||
| Order("qo.order"). | |||||
| Scan(&members) | Scan(&members) | ||||
| var resp GetQueueMembersResponse | var resp GetQueueMembersResponse | ||||
| @@ -37,6 +37,7 @@ func main() { | |||||
| router.HandleFunc("/CreateQueue", endpoints.CreateQueue) | router.HandleFunc("/CreateQueue", endpoints.CreateQueue) | ||||
| router.HandleFunc("/GetQueues", endpoints.GetQueues) | router.HandleFunc("/GetQueues", endpoints.GetQueues) | ||||
| router.HandleFunc("/GetQueueMembers", endpoints.GetQueueMembers) | router.HandleFunc("/GetQueueMembers", endpoints.GetQueueMembers) | ||||
| router.HandleFunc("/EditQueue", endpoints.EditQueue) | |||||
| router.HandleFunc("/CreateRewardFund", endpoints.CreateRewardFund) | router.HandleFunc("/CreateRewardFund", endpoints.CreateRewardFund) | ||||
| router.HandleFunc("/CloseRewardFund", endpoints.CloseRewardFund) | router.HandleFunc("/CloseRewardFund", endpoints.CloseRewardFund) | ||||
| // router.HandleFunc("/SubmitFund", endpoints.SubmitFund) | // router.HandleFunc("/SubmitFund", endpoints.SubmitFund) | ||||
| @@ -45,6 +46,7 @@ func main() { | |||||
| router.HandleFunc("/ContributorStream", endpoints.ContributorStream) | router.HandleFunc("/ContributorStream", endpoints.ContributorStream) | ||||
| router.HandleFunc("/Login", endpoints.Login) | router.HandleFunc("/Login", endpoints.Login) | ||||
| router.HandleFunc("/Register", endpoints.Register) | router.HandleFunc("/Register", endpoints.Register) | ||||
| router.HandleFunc("/NearlyCompleteFunds", endpoints.NearlyCompleteFunds) | |||||
| router.HandleFunc("/EscalatePrivileges", endpoints.EscalatePrivileges) | router.HandleFunc("/EscalatePrivileges", endpoints.EscalatePrivileges) | ||||
| router.HandleFunc("/UsersExist", endpoints.UsersExist) | router.HandleFunc("/UsersExist", endpoints.UsersExist) | ||||