diff --git a/common/gin.go b/common/gin.go index f876a92b..8c67bb4d 100644 --- a/common/gin.go +++ b/common/gin.go @@ -4,6 +4,7 @@ import ( "bytes" "github.com/gin-gonic/gin" "io" + "net/http" "one-api/constant" "strings" "time" @@ -86,3 +87,25 @@ func GetContextKeyType[T any](c *gin.Context, key constant.ContextKey) (T, bool) var t T return t, false } + +func ApiError(c *gin.Context, err error) { + c.JSON(http.StatusOK, gin.H{ + "success": false, + "message": err.Error(), + }) +} + +func ApiErrorMsg(c *gin.Context, msg string) { + c.JSON(http.StatusOK, gin.H{ + "success": false, + "message": msg, + }) +} + +func ApiSuccess(c *gin.Context, data any) { + c.JSON(http.StatusOK, gin.H{ + "success": true, + "message": "", + "data": data, + }) +} diff --git a/common/page_info.go b/common/page_info.go index 20a90fa2..5e4535e3 100644 --- a/common/page_info.go +++ b/common/page_info.go @@ -1,15 +1,14 @@ package common import ( - "github.com/gin-gonic/gin" "strconv" + + "github.com/gin-gonic/gin" ) type PageInfo struct { - Page int `json:"page"` // page num 页码 - PageSize int `json:"page_size"` // page size 页大小 - StartTimestamp int64 `json:"start_timestamp"` // 秒级 - EndTimestamp int64 `json:"end_timestamp"` // 秒级 + Page int `json:"page"` // page num 页码 + PageSize int `json:"page_size"` // page size 页大小 Total int `json:"total"` // 总条数,后设置 Items any `json:"items"` // 数据,后设置 @@ -39,11 +38,14 @@ func (p *PageInfo) SetItems(items any) { p.Items = items } -func GetPageQuery(c *gin.Context) (*PageInfo, error) { +func GetPageQuery(c *gin.Context) *PageInfo { pageInfo := &PageInfo{} - err := c.BindQuery(pageInfo) - if err != nil { - return nil, err + // 手动获取并处理每个参数 + if page, err := strconv.Atoi(c.Query("page")); err == nil { + pageInfo.Page = page + } + if pageSize, err := strconv.Atoi(c.Query("page_size")); err == nil { + pageInfo.PageSize = pageSize } if pageInfo.Page < 1 { // 兼容 @@ -56,7 +58,25 @@ func GetPageQuery(c *gin.Context) (*PageInfo, error) { } if pageInfo.PageSize == 0 { - pageInfo.PageSize = ItemsPerPage + // 兼容 + pageSize, _ := strconv.Atoi(c.Query("ps")) + if pageSize != 0 { + pageInfo.PageSize = pageSize + } + if pageInfo.PageSize == 0 { + pageSize, _ = strconv.Atoi(c.Query("size")) // token page + if pageSize != 0 { + pageInfo.PageSize = pageSize + } + } + if pageInfo.PageSize == 0 { + pageInfo.PageSize = ItemsPerPage + } } - return pageInfo, nil + + if pageInfo.PageSize > 100 { + pageInfo.PageSize = 100 + } + + return pageInfo } diff --git a/controller/channel-billing.go b/controller/channel-billing.go index 2c2c25b9..5152e060 100644 --- a/controller/channel-billing.go +++ b/controller/channel-billing.go @@ -4,7 +4,6 @@ import ( "encoding/json" "errors" "fmt" - "github.com/shopspring/decimal" "io" "net/http" "one-api/common" @@ -16,6 +15,8 @@ import ( "strconv" "time" + "github.com/shopspring/decimal" + "github.com/gin-gonic/gin" ) @@ -410,18 +411,12 @@ func updateChannelBalance(channel *model.Channel) (float64, error) { func UpdateChannelBalance(c *gin.Context) { id, err := strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } channel, err := model.CacheGetChannel(id) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } if channel.ChannelInfo.IsMultiKey { @@ -433,10 +428,7 @@ func UpdateChannelBalance(c *gin.Context) { } balance, err := updateChannelBalance(channel) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ @@ -480,10 +472,7 @@ func UpdateAllChannelsBalance(c *gin.Context) { // TODO: make it async err := updateAllChannelsBalance() if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ diff --git a/controller/channel-test.go b/controller/channel-test.go index 203c91a2..14ccb76c 100644 --- a/controller/channel-test.go +++ b/controller/channel-test.go @@ -306,18 +306,12 @@ func buildTestRequest(model string) *dto.GeneralOpenAIRequest { func TestChannel(c *gin.Context) { channelId, err := strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } channel, err := model.CacheGetChannel(channelId) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } //defer func() { @@ -431,10 +425,7 @@ func testAllChannels(notify bool) error { func TestAllChannels(c *gin.Context) { err := testAllChannels(true) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ diff --git a/controller/channel.go b/controller/channel.go index 126b7877..855affa1 100644 --- a/controller/channel.go +++ b/controller/channel.go @@ -53,14 +53,7 @@ func parseStatusFilter(statusParam string) int { } func GetAllChannels(c *gin.Context) { - p, _ := strconv.Atoi(c.Query("p")) - pageSize, _ := strconv.Atoi(c.Query("page_size")) - if p < 1 { - p = 1 - } - if pageSize < 1 { - pageSize = common.ItemsPerPage - } + pageInfo := common.GetPageQuery(c) channelData := make([]*model.Channel, 0) idSort, _ := strconv.ParseBool(c.Query("id_sort")) enableTagMode, _ := strconv.ParseBool(c.Query("tag_mode")) @@ -79,7 +72,7 @@ func GetAllChannels(c *gin.Context) { var total int64 if enableTagMode { - tags, err := model.GetPaginatedTags((p-1)*pageSize, pageSize) + tags, err := model.GetPaginatedTags(pageInfo.GetStartIdx(), pageInfo.GetPageSize()) if err != nil { c.JSON(http.StatusOK, gin.H{"success": false, "message": err.Error()}) return @@ -126,7 +119,7 @@ func GetAllChannels(c *gin.Context) { order = "id desc" } - err := baseQuery.Order(order).Limit(pageSize).Offset((p - 1) * pageSize).Omit("key").Find(&channelData).Error + err := baseQuery.Order(order).Limit(pageInfo.GetPageSize()).Offset(pageInfo.GetStartIdx()).Omit("key").Find(&channelData).Error if err != nil { c.JSON(http.StatusOK, gin.H{"success": false, "message": err.Error()}) return @@ -148,17 +141,12 @@ func GetAllChannels(c *gin.Context) { for _, r := range results { typeCounts[r.Type] = r.Count } - - c.JSON(http.StatusOK, gin.H{ - "success": true, - "message": "", - "data": gin.H{ - "items": channelData, - "total": total, - "page": p, - "page_size": pageSize, - "type_counts": typeCounts, - }, + common.ApiSuccess(c, gin.H{ + "items": channelData, + "total": total, + "page": pageInfo.GetPage(), + "page_size": pageInfo.GetPageSize(), + "type_counts": typeCounts, }) return } @@ -166,19 +154,13 @@ func GetAllChannels(c *gin.Context) { func FetchUpstreamModels(c *gin.Context) { id, err := strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } channel, err := model.GetChannelById(id, true) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } @@ -195,10 +177,7 @@ func FetchUpstreamModels(c *gin.Context) { } body, err := GetResponseBody("GET", url, channel, GetAuthHeader(channel.Key)) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } @@ -230,10 +209,7 @@ func FetchUpstreamModels(c *gin.Context) { func FixChannelsAbilities(c *gin.Context) { success, fails, err := model.FixAbility() if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ @@ -358,18 +334,12 @@ func SearchChannels(c *gin.Context) { 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(), - }) + common.ApiError(c, err) return } channel, err := model.GetChannelById(id, false) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ @@ -422,10 +392,7 @@ func AddChannel(c *gin.Context) { addChannelRequest := AddChannelRequest{} err := c.ShouldBindJSON(&addChannelRequest) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } @@ -547,10 +514,7 @@ func AddChannel(c *gin.Context) { } err = model.BatchInsertChannels(channels) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ @@ -565,10 +529,7 @@ func DeleteChannel(c *gin.Context) { channel := model.Channel{Id: id} err := channel.Delete() if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ @@ -581,10 +542,7 @@ func DeleteChannel(c *gin.Context) { func DeleteDisabledChannel(c *gin.Context) { rows, err := model.DeleteDisabledChannel() if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ @@ -617,10 +575,7 @@ func DisableTagChannels(c *gin.Context) { } err = model.DisableChannelByTag(channelTag.Tag) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ @@ -642,10 +597,7 @@ func EnableTagChannels(c *gin.Context) { } err = model.EnableChannelByTag(channelTag.Tag) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ @@ -674,10 +626,7 @@ func EditTagChannels(c *gin.Context) { } err = model.EditChannelByTag(channelTag.Tag, channelTag.NewTag, channelTag.ModelMapping, channelTag.Models, channelTag.Groups, channelTag.Priority, channelTag.Weight) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ @@ -704,10 +653,7 @@ func DeleteChannelBatch(c *gin.Context) { } err = model.BatchDeleteChannels(channelBatch.Ids) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ @@ -727,10 +673,7 @@ func UpdateChannel(c *gin.Context) { channel := PatchChannel{} err := c.ShouldBindJSON(&channel) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } err = channel.ValidateSettings() @@ -781,10 +724,7 @@ func UpdateChannel(c *gin.Context) { } err = channel.Update() if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } channel.Key = "" @@ -889,10 +829,7 @@ func BatchSetChannelTag(c *gin.Context) { } err = model.BatchSetChannelTag(channelBatch.Ids, channelBatch.Tag) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ diff --git a/controller/github.go b/controller/github.go index 79711841..881d6dc1 100644 --- a/controller/github.go +++ b/controller/github.go @@ -5,13 +5,14 @@ import ( "encoding/json" "errors" "fmt" - "github.com/gin-contrib/sessions" - "github.com/gin-gonic/gin" "net/http" "one-api/common" "one-api/model" "strconv" "time" + + "github.com/gin-contrib/sessions" + "github.com/gin-gonic/gin" ) type GitHubOAuthResponse struct { @@ -103,10 +104,7 @@ func GitHubOAuth(c *gin.Context) { code := c.Query("code") githubUser, err := getGitHubUserInfoByCode(code) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } user := model.User{ @@ -185,10 +183,7 @@ func GitHubBind(c *gin.Context) { code := c.Query("code") githubUser, err := getGitHubUserInfoByCode(code) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } user := model.User{ @@ -207,19 +202,13 @@ func GitHubBind(c *gin.Context) { user.Id = id.(int) err = user.FillUserById() if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } user.GitHubId = githubUser.Login err = user.Update(false) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ @@ -239,10 +228,7 @@ func GenerateOAuthCode(c *gin.Context) { session.Set("oauth_state", state) err := session.Save() if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ diff --git a/controller/linuxdo.go b/controller/linuxdo.go index 2cdb3517..65380b65 100644 --- a/controller/linuxdo.go +++ b/controller/linuxdo.go @@ -38,10 +38,7 @@ func LinuxDoBind(c *gin.Context) { code := c.Query("code") linuxdoUser, err := getLinuxdoUserInfoByCode(code, c) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } @@ -63,20 +60,14 @@ func LinuxDoBind(c *gin.Context) { err = user.FillUserById() if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } user.LinuxDOId = strconv.Itoa(linuxdoUser.Id) err = user.Update(false) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } @@ -202,10 +193,7 @@ func LinuxdoOAuth(c *gin.Context) { code := c.Query("code") linuxdoUser, err := getLinuxdoUserInfoByCode(code, c) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } diff --git a/controller/log.go b/controller/log.go index 8d67c83e..042fa725 100644 --- a/controller/log.go +++ b/controller/log.go @@ -10,14 +10,7 @@ import ( ) func GetAllLogs(c *gin.Context) { - p, _ := strconv.Atoi(c.Query("p")) - pageSize, _ := strconv.Atoi(c.Query("page_size")) - if p < 1 { - p = 1 - } - if pageSize < 0 { - pageSize = common.ItemsPerPage - } + pageInfo := common.GetPageQuery(c) logType, _ := strconv.Atoi(c.Query("type")) startTimestamp, _ := strconv.ParseInt(c.Query("start_timestamp"), 10, 64) endTimestamp, _ := strconv.ParseInt(c.Query("end_timestamp"), 10, 64) @@ -26,38 +19,19 @@ func GetAllLogs(c *gin.Context) { modelName := c.Query("model_name") channel, _ := strconv.Atoi(c.Query("channel")) group := c.Query("group") - logs, total, err := model.GetAllLogs(logType, startTimestamp, endTimestamp, modelName, username, tokenName, (p-1)*pageSize, pageSize, channel, group) + logs, total, err := model.GetAllLogs(logType, startTimestamp, endTimestamp, modelName, username, tokenName, pageInfo.GetStartIdx(), pageInfo.GetPageSize(), channel, group) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } - c.JSON(http.StatusOK, gin.H{ - "success": true, - "message": "", - "data": map[string]any{ - "items": logs, - "total": total, - "page": p, - "page_size": pageSize, - }, - }) + pageInfo.SetTotal(int(total)) + pageInfo.SetItems(logs) + common.ApiSuccess(c, pageInfo) + return } func GetUserLogs(c *gin.Context) { - p, _ := strconv.Atoi(c.Query("p")) - pageSize, _ := strconv.Atoi(c.Query("page_size")) - if p < 1 { - p = 1 - } - if pageSize < 0 { - pageSize = common.ItemsPerPage - } - if pageSize > 100 { - pageSize = 100 - } + pageInfo := common.GetPageQuery(c) userId := c.GetInt("id") logType, _ := strconv.Atoi(c.Query("type")) startTimestamp, _ := strconv.ParseInt(c.Query("start_timestamp"), 10, 64) @@ -65,24 +39,14 @@ func GetUserLogs(c *gin.Context) { tokenName := c.Query("token_name") modelName := c.Query("model_name") group := c.Query("group") - logs, total, err := model.GetUserLogs(userId, logType, startTimestamp, endTimestamp, modelName, tokenName, (p-1)*pageSize, pageSize, group) + logs, total, err := model.GetUserLogs(userId, logType, startTimestamp, endTimestamp, modelName, tokenName, pageInfo.GetStartIdx(), pageInfo.GetPageSize(), group) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } - c.JSON(http.StatusOK, gin.H{ - "success": true, - "message": "", - "data": map[string]any{ - "items": logs, - "total": total, - "page": p, - "page_size": pageSize, - }, - }) + pageInfo.SetTotal(int(total)) + pageInfo.SetItems(logs) + common.ApiSuccess(c, pageInfo) return } @@ -90,10 +54,7 @@ func SearchAllLogs(c *gin.Context) { keyword := c.Query("keyword") logs, err := model.SearchAllLogs(keyword) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ @@ -109,10 +70,7 @@ func SearchUserLogs(c *gin.Context) { userId := c.GetInt("id") logs, err := model.SearchUserLogs(userId, keyword) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ @@ -198,10 +156,7 @@ func DeleteHistoryLogs(c *gin.Context) { } count, err := model.DeleteOldLog(c.Request.Context(), targetTimestamp, 100) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ diff --git a/controller/midjourney.go b/controller/midjourney.go index 56bdcb80..02ad708f 100644 --- a/controller/midjourney.go +++ b/controller/midjourney.go @@ -5,7 +5,6 @@ import ( "context" "encoding/json" "fmt" - "github.com/gin-gonic/gin" "io" "net/http" "one-api/common" @@ -13,8 +12,9 @@ import ( "one-api/model" "one-api/service" "one-api/setting" - "strconv" "time" + + "github.com/gin-gonic/gin" ) func UpdateMidjourneyTaskBulk() { @@ -213,14 +213,7 @@ func checkMjTaskNeedUpdate(oldTask *model.Midjourney, newTask dto.MidjourneyDto) } func GetAllMidjourney(c *gin.Context) { - p, _ := strconv.Atoi(c.Query("p")) - if p < 1 { - p = 1 - } - pageSize, _ := strconv.Atoi(c.Query("page_size")) - if pageSize <= 0 { - pageSize = common.ItemsPerPage - } + pageInfo := common.GetPageQuery(c) // 解析其他查询参数 queryParams := model.TaskQueryParams{ @@ -230,7 +223,7 @@ func GetAllMidjourney(c *gin.Context) { EndTimestamp: c.Query("end_timestamp"), } - items := model.GetAllTasks((p-1)*pageSize, pageSize, queryParams) + items := model.GetAllTasks(pageInfo.GetStartIdx(), pageInfo.GetPageSize(), queryParams) total := model.CountAllTasks(queryParams) if setting.MjForwardUrlEnabled { @@ -239,27 +232,13 @@ func GetAllMidjourney(c *gin.Context) { items[i] = midjourney } } - c.JSON(200, gin.H{ - "success": true, - "message": "", - "data": gin.H{ - "items": items, - "total": total, - "page": p, - "page_size": pageSize, - }, - }) + pageInfo.SetTotal(int(total)) + pageInfo.SetItems(items) + common.ApiSuccess(c, pageInfo) } func GetUserMidjourney(c *gin.Context) { - p, _ := strconv.Atoi(c.Query("p")) - if p < 1 { - p = 1 - } - pageSize, _ := strconv.Atoi(c.Query("page_size")) - if pageSize <= 0 { - pageSize = common.ItemsPerPage - } + pageInfo := common.GetPageQuery(c) userId := c.GetInt("id") @@ -269,7 +248,7 @@ func GetUserMidjourney(c *gin.Context) { EndTimestamp: c.Query("end_timestamp"), } - items := model.GetAllUserTask(userId, (p-1)*pageSize, pageSize, queryParams) + items := model.GetAllUserTask(userId, pageInfo.GetStartIdx(), pageInfo.GetPageSize(), queryParams) total := model.CountAllUserTask(userId, queryParams) if setting.MjForwardUrlEnabled { @@ -278,14 +257,7 @@ func GetUserMidjourney(c *gin.Context) { items[i] = midjourney } } - c.JSON(200, gin.H{ - "success": true, - "message": "", - "data": gin.H{ - "items": items, - "total": total, - "page": p, - "page_size": pageSize, - }, - }) + pageInfo.SetTotal(int(total)) + pageInfo.SetItems(items) + common.ApiSuccess(c, pageInfo) } diff --git a/controller/misc.go b/controller/misc.go index 4ffe86f4..ea52cbe5 100644 --- a/controller/misc.go +++ b/controller/misc.go @@ -214,10 +214,7 @@ func SendEmailVerification(c *gin.Context) { "
验证码 %d 分钟内有效,如果不是本人操作,请忽略。
", common.SystemName, code, common.VerificationValidMinutes) err := common.SendEmail(subject, email, content) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ @@ -253,10 +250,7 @@ func SendPasswordResetEmail(c *gin.Context) { "重置链接 %d 分钟内有效,如果不是本人操作,请忽略。
", common.SystemName, link, link, common.VerificationValidMinutes) err := common.SendEmail(subject, email, content) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ @@ -291,10 +285,7 @@ func ResetPassword(c *gin.Context) { password := common.GenerateVerificationCode(12) err = model.ResetUserPasswordByEmail(req.Email, password) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } common.DeleteKey(req.Email, common.PasswordResetPurpose) diff --git a/controller/oidc.go b/controller/oidc.go index 440e0964..df8ea1c4 100644 --- a/controller/oidc.go +++ b/controller/oidc.go @@ -126,10 +126,7 @@ func OidcAuth(c *gin.Context) { code := c.Query("code") oidcUser, err := getOidcUserInfoByCode(code) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } user := model.User{ @@ -195,10 +192,7 @@ func OidcBind(c *gin.Context) { code := c.Query("code") oidcUser, err := getOidcUserInfoByCode(code) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } user := model.User{ @@ -217,19 +211,13 @@ func OidcBind(c *gin.Context) { user.Id = id.(int) err = user.FillUserById() if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } user.OidcId = oidcUser.OpenID err = user.Update(false) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ diff --git a/controller/option.go b/controller/option.go index 97bb6a5a..decdb0d4 100644 --- a/controller/option.go +++ b/controller/option.go @@ -160,10 +160,7 @@ func UpdateOption(c *gin.Context) { } err = model.UpdateOption(option.Key, option.Value) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ diff --git a/controller/redemption.go b/controller/redemption.go index 50620597..83ec19ad 100644 --- a/controller/redemption.go +++ b/controller/redemption.go @@ -1,91 +1,51 @@ package controller import ( + "errors" "net/http" "one-api/common" "one-api/model" "strconv" - "errors" "github.com/gin-gonic/gin" ) func GetAllRedemptions(c *gin.Context) { - p, _ := strconv.Atoi(c.Query("p")) - pageSize, _ := strconv.Atoi(c.Query("page_size")) - if p < 0 { - p = 0 - } - if pageSize < 1 { - pageSize = common.ItemsPerPage - } - redemptions, total, err := model.GetAllRedemptions((p-1)*pageSize, pageSize) + pageInfo := common.GetPageQuery(c) + redemptions, total, err := model.GetAllRedemptions(pageInfo.GetStartIdx(), pageInfo.GetPageSize()) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } - c.JSON(http.StatusOK, gin.H{ - "success": true, - "message": "", - "data": gin.H{ - "items": redemptions, - "total": total, - "page": p, - "page_size": pageSize, - }, - }) + pageInfo.SetTotal(int(total)) + pageInfo.SetItems(redemptions) + common.ApiSuccess(c, pageInfo) return } func SearchRedemptions(c *gin.Context) { keyword := c.Query("keyword") - p, _ := strconv.Atoi(c.Query("p")) - pageSize, _ := strconv.Atoi(c.Query("page_size")) - if p < 0 { - p = 0 - } - if pageSize < 1 { - pageSize = common.ItemsPerPage - } - redemptions, total, err := model.SearchRedemptions(keyword, (p-1)*pageSize, pageSize) + pageInfo := common.GetPageQuery(c) + redemptions, total, err := model.SearchRedemptions(keyword, pageInfo.GetStartIdx(), pageInfo.GetPageSize()) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } - c.JSON(http.StatusOK, gin.H{ - "success": true, - "message": "", - "data": gin.H{ - "items": redemptions, - "total": total, - "page": p, - "page_size": pageSize, - }, - }) + pageInfo.SetTotal(int(total)) + pageInfo.SetItems(redemptions) + common.ApiSuccess(c, pageInfo) return } func GetRedemption(c *gin.Context) { id, err := strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } redemption, err := model.GetRedemptionById(id) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ @@ -100,10 +60,7 @@ func AddRedemption(c *gin.Context) { redemption := model.Redemption{} err := c.ShouldBindJSON(&redemption) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } if len(redemption.Name) == 0 || len(redemption.Name) > 20 { @@ -165,10 +122,7 @@ func DeleteRedemption(c *gin.Context) { id, _ := strconv.Atoi(c.Param("id")) err := model.DeleteRedemptionById(id) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ @@ -183,18 +137,12 @@ func UpdateRedemption(c *gin.Context) { redemption := model.Redemption{} err := c.ShouldBindJSON(&redemption) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } cleanRedemption, err := model.GetRedemptionById(redemption.Id) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } if statusOnly == "" { @@ -212,10 +160,7 @@ func UpdateRedemption(c *gin.Context) { } err = cleanRedemption.Update() if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ @@ -229,16 +174,13 @@ func UpdateRedemption(c *gin.Context) { func DeleteInvalidRedemption(c *gin.Context) { rows, err := model.DeleteInvalidRedemptions() if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ "success": true, "message": "", - "data": rows, + "data": rows, }) return } diff --git a/controller/task.go b/controller/task.go index 5cfa728a..78674d8b 100644 --- a/controller/task.go +++ b/controller/task.go @@ -5,8 +5,6 @@ import ( "encoding/json" "errors" "fmt" - "github.com/gin-gonic/gin" - "github.com/samber/lo" "io" "net/http" "one-api/common" @@ -17,6 +15,9 @@ import ( "sort" "strconv" "time" + + "github.com/gin-gonic/gin" + "github.com/samber/lo" ) func UpdateTaskBulk() { @@ -225,14 +226,7 @@ func checkTaskNeedUpdate(oldTask *model.Task, newTask dto.SunoDataResponse) bool } func GetAllTask(c *gin.Context) { - p, _ := strconv.Atoi(c.Query("p")) - if p < 1 { - p = 1 - } - pageSize, _ := strconv.Atoi(c.Query("page_size")) - if pageSize <= 0 { - pageSize = common.ItemsPerPage - } + pageInfo := common.GetPageQuery(c) startTimestamp, _ := strconv.ParseInt(c.Query("start_timestamp"), 10, 64) endTimestamp, _ := strconv.ParseInt(c.Query("end_timestamp"), 10, 64) @@ -247,30 +241,15 @@ func GetAllTask(c *gin.Context) { ChannelID: c.Query("channel_id"), } - items := model.TaskGetAllTasks((p-1)*pageSize, pageSize, queryParams) + items := model.TaskGetAllTasks(pageInfo.GetStartIdx(), pageInfo.GetPageSize(), queryParams) total := model.TaskCountAllTasks(queryParams) - - c.JSON(200, gin.H{ - "success": true, - "message": "", - "data": gin.H{ - "items": items, - "total": total, - "page": p, - "page_size": pageSize, - }, - }) + pageInfo.SetTotal(int(total)) + pageInfo.SetItems(items) + common.ApiSuccess(c, pageInfo) } func GetUserTask(c *gin.Context) { - p, _ := strconv.Atoi(c.Query("p")) - if p < 1 { - p = 1 - } - pageSize, _ := strconv.Atoi(c.Query("page_size")) - if pageSize <= 0 { - pageSize = common.ItemsPerPage - } + pageInfo := common.GetPageQuery(c) userId := c.GetInt("id") @@ -286,17 +265,9 @@ func GetUserTask(c *gin.Context) { EndTimestamp: endTimestamp, } - items := model.TaskGetAllUserTask(userId, (p-1)*pageSize, pageSize, queryParams) + items := model.TaskGetAllUserTask(userId, pageInfo.GetStartIdx(), pageInfo.GetPageSize(), queryParams) total := model.TaskCountAllUserTask(userId, queryParams) - - c.JSON(200, gin.H{ - "success": true, - "message": "", - "data": gin.H{ - "items": items, - "total": total, - "page": p, - "page_size": pageSize, - }, - }) + pageInfo.SetTotal(int(total)) + pageInfo.SetItems(items) + common.ApiSuccess(c, pageInfo) } diff --git a/controller/token.go b/controller/token.go index 173fc22e..62eb5474 100644 --- a/controller/token.go +++ b/controller/token.go @@ -1,46 +1,26 @@ package controller import ( - "github.com/gin-gonic/gin" "net/http" "one-api/common" "one-api/model" "strconv" + + "github.com/gin-gonic/gin" ) func GetAllTokens(c *gin.Context) { userId := c.GetInt("id") - p, _ := strconv.Atoi(c.Query("p")) - size, _ := strconv.Atoi(c.Query("size")) - if p < 1 { - p = 1 - } - if size <= 0 { - size = common.ItemsPerPage - } else if size > 100 { - size = 100 - } - tokens, err := model.GetAllUserTokens(userId, (p-1)*size, size) + pageInfo := common.GetPageQuery(c) + tokens, err := model.GetAllUserTokens(userId, pageInfo.GetStartIdx(), pageInfo.GetPageSize()) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } - // Get total count for pagination total, _ := model.CountUserTokens(userId) - - c.JSON(http.StatusOK, gin.H{ - "success": true, - "message": "", - "data": gin.H{ - "items": tokens, - "total": total, - "page": p, - "page_size": size, - }, - }) + pageInfo.SetTotal(int(total)) + pageInfo.SetItems(tokens) + common.ApiSuccess(c, pageInfo) return } @@ -50,10 +30,7 @@ func SearchTokens(c *gin.Context) { token := c.Query("token") tokens, err := model.SearchUserTokens(userId, keyword, token) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ @@ -68,18 +45,12 @@ func GetToken(c *gin.Context) { id, err := strconv.Atoi(c.Param("id")) userId := c.GetInt("id") if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } token, err := model.GetTokenByIds(id, userId) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ @@ -95,10 +66,7 @@ func GetTokenStatus(c *gin.Context) { userId := c.GetInt("id") token, err := model.GetTokenByIds(tokenId, userId) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } expiredAt := token.ExpiredTime @@ -118,10 +86,7 @@ func AddToken(c *gin.Context) { token := model.Token{} err := c.ShouldBindJSON(&token) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } if len(token.Name) > 30 { @@ -156,10 +121,7 @@ func AddToken(c *gin.Context) { } err = cleanToken.Insert() if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ @@ -174,10 +136,7 @@ func DeleteToken(c *gin.Context) { userId := c.GetInt("id") err := model.DeleteTokenById(id, userId) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ @@ -193,10 +152,7 @@ func UpdateToken(c *gin.Context) { token := model.Token{} err := c.ShouldBindJSON(&token) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } if len(token.Name) > 30 { @@ -208,10 +164,7 @@ func UpdateToken(c *gin.Context) { } cleanToken, err := model.GetTokenByIds(token.Id, userId) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } if token.Status == common.TokenStatusEnabled { @@ -245,10 +198,7 @@ func UpdateToken(c *gin.Context) { } err = cleanToken.Update() if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ @@ -275,10 +225,7 @@ func DeleteTokenBatch(c *gin.Context) { userId := c.GetInt("id") count, err := model.BatchDeleteTokens(tokenBatch.Ids, userId) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ diff --git a/controller/usedata.go b/controller/usedata.go index 270eadf3..4adee50f 100644 --- a/controller/usedata.go +++ b/controller/usedata.go @@ -1,10 +1,12 @@ package controller import ( - "github.com/gin-gonic/gin" "net/http" + "one-api/common" "one-api/model" "strconv" + + "github.com/gin-gonic/gin" ) func GetAllQuotaDates(c *gin.Context) { @@ -13,10 +15,7 @@ func GetAllQuotaDates(c *gin.Context) { username := c.Query("username") dates, err := model.GetAllQuotaDates(startTimestamp, endTimestamp, username) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ @@ -41,10 +40,7 @@ func GetUserQuotaDates(c *gin.Context) { } dates, err := model.GetQuotaDataByUserId(userId, startTimestamp, endTimestamp) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ diff --git a/controller/user.go b/controller/user.go index 44450836..292ed8c6 100644 --- a/controller/user.go +++ b/controller/user.go @@ -188,10 +188,7 @@ func Register(c *gin.Context) { cleanUser.Email = user.Email } if err := cleanUser.Insert(inviterId); err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } @@ -247,81 +244,45 @@ func Register(c *gin.Context) { } func GetAllUsers(c *gin.Context) { - pageInfo, err := common.GetPageQuery(c) - if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": "parse page query failed", - }) - return - } + pageInfo := common.GetPageQuery(c) users, total, err := model.GetAllUsers(pageInfo) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } pageInfo.SetTotal(int(total)) pageInfo.SetItems(users) - c.JSON(http.StatusOK, gin.H{ - "success": true, - "message": "", - "data": pageInfo, - }) + + common.ApiSuccess(c, pageInfo) return } func SearchUsers(c *gin.Context) { keyword := c.Query("keyword") group := c.Query("group") - p, _ := strconv.Atoi(c.Query("p")) - pageSize, _ := strconv.Atoi(c.Query("page_size")) - if p < 1 { - p = 1 - } - if pageSize < 0 { - pageSize = common.ItemsPerPage - } - startIdx := (p - 1) * pageSize - users, total, err := model.SearchUsers(keyword, group, startIdx, pageSize) + pageInfo := common.GetPageQuery(c) + users, total, err := model.SearchUsers(keyword, group, pageInfo.GetStartIdx(), pageInfo.GetPageSize()) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } - c.JSON(http.StatusOK, gin.H{ - "success": true, - "message": "", - "data": gin.H{ - "items": users, - "total": total, - "page": p, - "page_size": pageSize, - }, - }) + + pageInfo.SetTotal(int(total)) + pageInfo.SetItems(users) + common.ApiSuccess(c, pageInfo) return } func GetUser(c *gin.Context) { id, err := strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } user, err := model.GetUserById(id, false) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } myRole := c.GetInt("role") @@ -344,10 +305,7 @@ func GenerateAccessToken(c *gin.Context) { id := c.GetInt("id") user, err := model.GetUserById(id, true) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } // get rand int 28-32 @@ -372,10 +330,7 @@ func GenerateAccessToken(c *gin.Context) { } if err := user.Update(false); err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } @@ -395,18 +350,12 @@ func TransferAffQuota(c *gin.Context) { id := c.GetInt("id") user, err := model.GetUserById(id, true) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } tran := TransferAffQuotaRequest{} if err := c.ShouldBindJSON(&tran); err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } err = user.TransferAffQuotaToQuota(tran.Quota) @@ -427,10 +376,7 @@ func GetAffCode(c *gin.Context) { id := c.GetInt("id") user, err := model.GetUserById(id, true) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } if user.AffCode == "" { @@ -455,10 +401,7 @@ func GetSelf(c *gin.Context) { id := c.GetInt("id") user, err := model.GetUserById(id, false) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } // Hide admin remarks: set to empty to trigger omitempty tag, ensuring the remark field is not included in JSON returned to regular users @@ -479,10 +422,7 @@ func GetUserModels(c *gin.Context) { } user, err := model.GetUserCache(id) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } groups := setting.GetUserUsableGroups(user.Group) @@ -524,10 +464,7 @@ func UpdateUser(c *gin.Context) { } originUser, err := model.GetUserById(updatedUser.Id, false) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } myRole := c.GetInt("role") @@ -550,10 +487,7 @@ func UpdateUser(c *gin.Context) { } updatePassword := updatedUser.Password != "" if err := updatedUser.Edit(updatePassword); err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } if originUser.Quota != updatedUser.Quota { @@ -599,17 +533,11 @@ func UpdateSelf(c *gin.Context) { } updatePassword, err := checkUpdatePassword(user.OriginalPassword, user.Password, cleanUser.Id) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } if err := cleanUser.Update(updatePassword); err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } @@ -640,18 +568,12 @@ func checkUpdatePassword(originalPassword string, newPassword string, userId int func DeleteUser(c *gin.Context) { id, err := strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } originUser, err := model.GetUserById(id, false) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } myRole := c.GetInt("role") @@ -686,10 +608,7 @@ func DeleteSelf(c *gin.Context) { err := model.DeleteUserById(id) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ @@ -735,10 +654,7 @@ func CreateUser(c *gin.Context) { DisplayName: user.DisplayName, } if err := cleanUser.Insert(0); err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } @@ -848,10 +764,7 @@ func ManageUser(c *gin.Context) { } if err := user.Update(false); err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } clearUser := model.User{ @@ -883,20 +796,14 @@ func EmailBind(c *gin.Context) { } err := user.FillUserById() if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } user.Email = email // no need to check if this email already taken, because we have used verification code to check it err = user.Update(false) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ @@ -918,19 +825,13 @@ func TopUp(c *gin.Context) { req := topUpRequest{} err := c.ShouldBindJSON(&req) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } id := c.GetInt("id") quota, err := model.Redeem(req.Key, id) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{ @@ -1013,10 +914,7 @@ func UpdateUserSetting(c *gin.Context) { userId := c.GetInt("id") user, err := model.GetUserById(userId, true) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } diff --git a/controller/wechat.go b/controller/wechat.go index 9b5f2070..9a4bdfed 100644 --- a/controller/wechat.go +++ b/controller/wechat.go @@ -4,13 +4,14 @@ import ( "encoding/json" "errors" "fmt" - "github.com/gin-contrib/sessions" - "github.com/gin-gonic/gin" "net/http" "one-api/common" "one-api/model" "strconv" "time" + + "github.com/gin-contrib/sessions" + "github.com/gin-gonic/gin" ) type wechatLoginResponse struct { @@ -150,19 +151,13 @@ func WeChatBind(c *gin.Context) { } err = user.FillUserById() if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } user.WeChatId = wechatId err = user.Update(false) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + common.ApiError(c, err) return } c.JSON(http.StatusOK, gin.H{