one-api/controller/channel.go

205 lines
4.0 KiB
Go

package controller
import (
"errors"
"net/http"
"one-api/common"
"one-api/common/utils"
"one-api/model"
"strconv"
"strings"
"github.com/gin-gonic/gin"
)
func GetChannelsList(c *gin.Context) {
var params model.SearchChannelsParams
if err := c.ShouldBindQuery(&params); err != nil {
common.APIRespondWithError(c, http.StatusOK, err)
return
}
channels, err := model.GetChannelsList(&params)
if err != nil {
common.APIRespondWithError(c, http.StatusOK, err)
return
}
c.JSON(http.StatusOK, gin.H{
"success": true,
"message": "",
"data": channels,
})
}
func GetChannel(c *gin.Context) {
id, err := strconv.Atoi(c.Param("id"))
if err != nil {
c.JSON(http.StatusOK, gin.H{
"success": false,
"message": err.Error(),
})
return
}
channel, err := model.GetChannelById(id, false)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"success": false,
"message": err.Error(),
})
return
}
c.JSON(http.StatusOK, gin.H{
"success": true,
"message": "",
"data": channel,
})
}
func AddChannel(c *gin.Context) {
channel := model.Channel{}
err := c.ShouldBindJSON(&channel)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"success": false,
"message": err.Error(),
})
return
}
channel.CreatedTime = utils.GetTimestamp()
keys := strings.Split(channel.Key, "\n")
channels := make([]model.Channel, 0, len(keys))
for _, key := range keys {
if key == "" {
continue
}
localChannel := channel
localChannel.Key = key
channels = append(channels, localChannel)
}
err = model.BatchInsertChannels(channels)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"success": false,
"message": err.Error(),
})
return
}
c.JSON(http.StatusOK, gin.H{
"success": true,
"message": "",
})
}
func DeleteChannel(c *gin.Context) {
id, _ := strconv.Atoi(c.Param("id"))
channel := model.Channel{Id: id}
err := channel.Delete()
if err != nil {
c.JSON(http.StatusOK, gin.H{
"success": false,
"message": err.Error(),
})
return
}
c.JSON(http.StatusOK, gin.H{
"success": true,
"message": "",
})
}
func DeleteDisabledChannel(c *gin.Context) {
rows, err := model.DeleteDisabledChannel()
if err != nil {
c.JSON(http.StatusOK, gin.H{
"success": false,
"message": err.Error(),
})
return
}
c.JSON(http.StatusOK, gin.H{
"success": true,
"message": "",
"data": rows,
})
}
func UpdateChannel(c *gin.Context) {
channel := model.Channel{}
err := c.ShouldBindJSON(&channel)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"success": false,
"message": err.Error(),
})
return
}
if channel.Models == "" {
err = channel.Update(false)
} else {
err = channel.Update(true)
}
if err != nil {
c.JSON(http.StatusOK, gin.H{
"success": false,
"message": err.Error(),
})
return
}
c.JSON(http.StatusOK, gin.H{
"success": true,
"message": "",
"data": channel,
})
}
func BatchUpdateChannelsAzureApi(c *gin.Context) {
var params model.BatchChannelsParams
err := c.ShouldBindJSON(&params)
if err != nil {
common.APIRespondWithError(c, http.StatusOK, err)
return
}
if params.Ids == nil || len(params.Ids) == 0 {
common.APIRespondWithError(c, http.StatusOK, errors.New("ids不能为空"))
return
}
var count int64
count, err = model.BatchUpdateChannelsAzureApi(&params)
if err != nil {
common.APIRespondWithError(c, http.StatusOK, err)
return
}
c.JSON(http.StatusOK, gin.H{
"data": count,
"success": true,
"message": "更新成功",
})
}
func BatchDelModelChannels(c *gin.Context) {
var params model.BatchChannelsParams
err := c.ShouldBindJSON(&params)
if err != nil {
common.APIRespondWithError(c, http.StatusOK, err)
return
}
if params.Ids == nil || len(params.Ids) == 0 {
common.APIRespondWithError(c, http.StatusOK, errors.New("ids不能为空"))
return
}
var count int64
count, err = model.BatchDelModelChannels(&params)
if err != nil {
common.APIRespondWithError(c, http.StatusOK, err)
return
}
c.JSON(http.StatusOK, gin.H{
"data": count,
"success": true,
"message": "更新成功",
})
}