mirror of
https://github.com/coaidev/coai.git
synced 2025-05-19 21:10:18 +09:00
68 lines
1.2 KiB
Go
68 lines
1.2 KiB
Go
package admin
|
|
|
|
import (
|
|
"chat/utils"
|
|
"database/sql"
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
func GetRedeemData(db *sql.DB) []RedeemData {
|
|
var data []RedeemData
|
|
|
|
rows, err := db.Query(`
|
|
SELECT quota, COUNT(*) AS total, SUM(IF(used = 0, 0, 1)) AS used
|
|
FROM redeem
|
|
GROUP BY quota
|
|
`)
|
|
if err != nil {
|
|
return data
|
|
}
|
|
|
|
for rows.Next() {
|
|
var d RedeemData
|
|
if err := rows.Scan(&d.Quota, &d.Total, &d.Used); err != nil {
|
|
return data
|
|
}
|
|
data = append(data, d)
|
|
}
|
|
|
|
return data
|
|
}
|
|
|
|
func GenerateRedeemCodes(db *sql.DB, num int, quota float32) RedeemGenerateResponse {
|
|
arr := make([]string, 0)
|
|
idx := 0
|
|
for idx < num {
|
|
code, err := CreateRedeemCode(db, quota)
|
|
|
|
if err != nil {
|
|
return RedeemGenerateResponse{
|
|
Status: false,
|
|
Message: err.Error(),
|
|
}
|
|
}
|
|
arr = append(arr, code)
|
|
idx++
|
|
}
|
|
|
|
return RedeemGenerateResponse{
|
|
Status: true,
|
|
Data: arr,
|
|
}
|
|
}
|
|
|
|
func CreateRedeemCode(db *sql.DB, quota float32) (string, error) {
|
|
code := fmt.Sprintf("nio-%s", utils.GenerateChar(32))
|
|
_, err := db.Exec(`
|
|
INSERT INTO redeem (code, quota) VALUES (?, ?)
|
|
`, code, quota)
|
|
|
|
if err != nil && strings.Contains(err.Error(), "Duplicate entry") {
|
|
// code name is duplicate
|
|
return CreateRedeemCode(db, quota)
|
|
}
|
|
|
|
return code, err
|
|
}
|