92 lines
2.7 KiB
Go
92 lines
2.7 KiB
Go
package main
|
|
|
|
import (
|
|
"github.com/gin-gonic/gin"
|
|
"strconv"
|
|
)
|
|
|
|
func (a *App) adminUserCreditTransactions(c *gin.Context) {
|
|
id, err := strconv.ParseUint(c.Param("id"), 10, 64)
|
|
if err != nil {
|
|
c.JSON(400, gin.H{"error": "invalid user id"})
|
|
return
|
|
}
|
|
limit := 50
|
|
if n, e := strconv.Atoi(c.DefaultQuery("limit", "50")); e == nil && n > 0 && n <= 200 {
|
|
limit = n
|
|
}
|
|
var txs []CreditTransaction
|
|
q := a.db.Where("user_id = ?", id).Order("id desc").Limit(limit)
|
|
if before := c.Query("before"); before != "" {
|
|
if n, e := strconv.ParseUint(before, 10, 64); e == nil {
|
|
q = q.Where("id < ?", n)
|
|
}
|
|
}
|
|
if err := q.Find(&txs).Error; err != nil {
|
|
c.JSON(500, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
type item struct {
|
|
ID uint `json:"id"`
|
|
Type string `json:"type"`
|
|
Amount int64 `json:"amount"`
|
|
BalanceAfter int64 `json:"balanceAfter"`
|
|
ReferenceType string `json:"referenceType"`
|
|
ReferenceID string `json:"referenceId"`
|
|
Reason string `json:"reason"`
|
|
CreatedAt interface{} `json:"createdAt"`
|
|
}
|
|
out := make([]item, 0, len(txs))
|
|
for _, t := range txs {
|
|
out = append(out, item{t.ID, t.Type, t.Amount, t.BalanceAfter, t.ReferenceType, t.ReferenceID, t.Reason, t.CreatedAt})
|
|
}
|
|
next := uint(0)
|
|
if len(txs) == limit {
|
|
next = txs[len(txs)-1].ID
|
|
}
|
|
c.JSON(200, gin.H{"data": out, "nextBefore": next})
|
|
}
|
|
|
|
func (a *App) adminCreditTransactions(c *gin.Context) {
|
|
limit := 100
|
|
if n, e := strconv.Atoi(c.DefaultQuery("limit", "100")); e == nil && n > 0 && n <= 300 {
|
|
limit = n
|
|
}
|
|
var txs []CreditTransaction
|
|
q := a.db.Order("id desc").Limit(limit)
|
|
if uid := c.Query("user_id"); uid != "" {
|
|
if n, e := strconv.ParseUint(uid, 10, 64); e == nil {
|
|
q = q.Where("user_id = ?", n)
|
|
}
|
|
}
|
|
if before := c.Query("before"); before != "" {
|
|
if n, e := strconv.ParseUint(before, 10, 64); e == nil {
|
|
q = q.Where("id < ?", n)
|
|
}
|
|
}
|
|
if err := q.Find(&txs).Error; err != nil {
|
|
c.JSON(500, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
type item struct {
|
|
ID uint `json:"id"`
|
|
UserID uint `json:"userId"`
|
|
Type string `json:"type"`
|
|
Amount int64 `json:"amount"`
|
|
BalanceAfter int64 `json:"balanceAfter"`
|
|
ReferenceType string `json:"referenceType"`
|
|
ReferenceID string `json:"referenceId"`
|
|
Reason string `json:"reason"`
|
|
CreatedAt interface{} `json:"createdAt"`
|
|
}
|
|
out := make([]item, 0, len(txs))
|
|
for _, t := range txs {
|
|
out = append(out, item{t.ID, t.UserID, t.Type, t.Amount, t.BalanceAfter, t.ReferenceType, t.ReferenceID, t.Reason, t.CreatedAt})
|
|
}
|
|
next := uint(0)
|
|
if len(txs) == limit {
|
|
next = txs[len(txs)-1].ID
|
|
}
|
|
c.JSON(200, gin.H{"data": out, "nextBefore": next})
|
|
}
|