From c4aa30e564046f35a965198aa6967ebfb861243d Mon Sep 17 00:00:00 2001 From: OpenClaw Agent Date: Thu, 17 Sep 2026 02:20:11 +0800 Subject: [PATCH] feat: add redeem batch revocation --- main.go | 1 + redeem.go | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/main.go b/main.go index 6b827ad..0974bce 100644 --- a/main.go +++ b/main.go @@ -54,6 +54,7 @@ func main() { admin.PUT("/users/:id", a.adminUpdateUser) admin.GET("/redeem", a.adminListRedeemBatches) admin.POST("/redeem", a.adminCreateRedeemBatch) + admin.POST("/redeem/:id/revoke", a.adminRevokeRedeemBatch) admin.GET("/settings", a.getSettings) admin.PUT("/settings", a.putSettings) admin.POST("/webdav/test", a.testWebDAV) diff --git a/redeem.go b/redeem.go index c39c270..912f997 100644 --- a/redeem.go +++ b/redeem.go @@ -129,6 +129,15 @@ func (a *App) redeem(c *gin.Context) { c.JSON(200, gin.H{"credits": amount}) } +func (a *App) adminRevokeRedeemBatch(c *gin.Context) { + id := c.Param("id") + if err := a.db.Model(&RedeemCode{}).Where("batch_id = ? AND status = ?", id, "unused").Update("status", "revoked").Error; err != nil { + c.JSON(500, gin.H{"error": err.Error()}) + return + } + c.JSON(200, gin.H{"ok": true}) +} + func (a *App) adminListRedeemBatches(c *gin.Context) { var batches []RedeemBatch if err := a.db.Order("id desc").Limit(100).Find(&batches).Error; err != nil {