Skip to content

Commit 8f4f4d6

Browse files
committed
feat: smark update group and token api to select field
1 parent 5e26aa6 commit 8f4f4d6

File tree

20 files changed

+811
-404
lines changed

20 files changed

+811
-404
lines changed

.github/workflows/ci.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,15 @@ jobs:
4141
with:
4242
version: latest
4343
working-directory: core
44-
args: --color always
44+
args: --color=always --path-mode=abs
4545

4646
- name: Run Fix Linter
4747
uses: golangci/golangci-lint-action@v8
4848
if: ${{ failure() }}
4949
with:
5050
install-mode: none
5151
working-directory: core
52-
args: --fix --color always
52+
args: --fix --color=always --path-mode=abs
5353

5454
- name: Auto Fix Diff Content
5555
if: ${{ failure() }}
@@ -83,15 +83,15 @@ jobs:
8383
with:
8484
version: latest
8585
working-directory: mcp-servers
86-
args: --color always
86+
args: --color=always --path-mode=abs
8787

8888
- name: Run Fix Linter
8989
uses: golangci/golangci-lint-action@v8
9090
if: ${{ failure() }}
9191
with:
9292
install-mode: none
9393
working-directory: mcp-servers
94-
args: --fix --color always
94+
args: --fix --color=always --path-mode=abs
9595

9696
- name: Auto Fix Diff Content
9797
if: ${{ failure() }}
@@ -120,15 +120,15 @@ jobs:
120120
with:
121121
version: latest
122122
working-directory: openapi-mcp
123-
args: --color always
123+
args: --color=always --path-mode=abs
124124

125125
- name: Run Fix Linter
126126
uses: golangci/golangci-lint-action@v8
127127
if: ${{ failure() }}
128128
with:
129129
install-mode: none
130130
working-directory: openapi-mcp
131-
args: --fix --color always
131+
args: --fix --color=always --path-mode=abs
132132

133133
- name: Auto Fix Diff Content
134134
if: ${{ failure() }}

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ jobs:
100100
run: |
101101
export GOOS=${{ matrix.targets.GOOS }}
102102
export GOARCH=${{ matrix.targets.GOARCH }}
103-
go build -trimpath -tags "jsoniter" -ldflags "-s -w" -o aiproxy-${{ matrix.targets.GOOS }}-${{ matrix.targets.GOARCH }}${{ matrix.targets.EXT }}
103+
go build -trimpath -ldflags "-s -w" -o aiproxy-${{ matrix.targets.GOOS }}-${{ matrix.targets.GOARCH }}${{ matrix.targets.EXT }}
104104
105105
- name: Get release meta
106106
if: ${{ startsWith(github.ref, 'refs/tags/') }}

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ RUN npm install -g pnpm
88

99
RUN pnpm install && pnpm run build
1010

11-
FROM golang:1.24-alpine AS builder
11+
FROM golang:1.25-alpine AS builder
1212

1313
RUN apk add --no-cache curl
1414

@@ -24,7 +24,7 @@ RUN go install github.com/swaggo/swag/cmd/swag@latest
2424

2525
RUN sh scripts/swag.sh
2626

27-
RUN go build -trimpath -tags "jsoniter" -ldflags "-s -w" -o aiproxy
27+
RUN go build -trimpath -ldflags "-s -w" -o aiproxy
2828

2929
FROM alpine:latest
3030

core/controller/group.go

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ func UpdateGroupRPMRatio(c *gin.Context) {
165165

166166
req := UpdateGroupRPMRatioRequest{}
167167

168-
err := sonic.ConfigDefault.NewDecoder(c.Request.Body).Decode(&req)
168+
err := c.ShouldBindJSON(&req)
169169
if err != nil {
170170
middleware.ErrorResponse(c, http.StatusBadRequest, "invalid parameter")
171171
return
@@ -205,7 +205,7 @@ func UpdateGroupTPMRatio(c *gin.Context) {
205205

206206
req := UpdateGroupTPMRatioRequest{}
207207

208-
err := sonic.ConfigDefault.NewDecoder(c.Request.Body).Decode(&req)
208+
err := c.ShouldBindJSON(&req)
209209
if err != nil {
210210
middleware.ErrorResponse(c, http.StatusBadRequest, "invalid parameter")
211211
return
@@ -245,7 +245,7 @@ func UpdateGroupStatus(c *gin.Context) {
245245

246246
req := UpdateGroupStatusRequest{}
247247

248-
err := sonic.ConfigDefault.NewDecoder(c.Request.Body).Decode(&req)
248+
err := c.ShouldBindJSON(&req)
249249
if err != nil {
250250
middleware.ErrorResponse(c, http.StatusBadRequest, "invalid parameter")
251251
return
@@ -390,7 +390,7 @@ func CreateGroup(c *gin.Context) {
390390

391391
req := CreateGroupRequest{}
392392

393-
err := sonic.ConfigDefault.NewDecoder(c.Request.Body).Decode(&req)
393+
err := c.ShouldBindJSON(&req)
394394
if err != nil {
395395
middleware.ErrorResponse(c, http.StatusBadRequest, "invalid parameter")
396396
return
@@ -404,7 +404,9 @@ func CreateGroup(c *gin.Context) {
404404
return
405405
}
406406

407-
middleware.SuccessResponse(c, g)
407+
middleware.SuccessResponse(c, &GroupResponse{
408+
Group: g,
409+
})
408410
}
409411

410412
// UpdateGroup godoc
@@ -415,8 +417,8 @@ func CreateGroup(c *gin.Context) {
415417
// @Accept json
416418
// @Produce json
417419
// @Security ApiKeyAuth
418-
// @Param group path string true "Group name"
419-
// @Param data body CreateGroupRequest true "Updated group information"
420+
// @Param group path string true "Group name"
421+
// @Param data body model.UpdateGroupRequest true "Updated group information"
420422
// @Success 200 {object} middleware.APIResponse{data=model.Group}
421423
// @Router /api/group/{group} [put]
422424
func UpdateGroup(c *gin.Context) {
@@ -426,23 +428,23 @@ func UpdateGroup(c *gin.Context) {
426428
return
427429
}
428430

429-
req := CreateGroupRequest{}
431+
req := model.UpdateGroupRequest{}
430432

431-
err := sonic.ConfigDefault.NewDecoder(c.Request.Body).Decode(&req)
433+
err := c.ShouldBindJSON(&req)
432434
if err != nil {
433435
middleware.ErrorResponse(c, http.StatusBadRequest, "invalid parameter")
434436
return
435437
}
436438

437-
g := req.ToGroup()
438-
439-
err = model.UpdateGroup(group, g)
439+
g, err := model.UpdateGroup(group, req)
440440
if err != nil {
441441
middleware.ErrorResponse(c, http.StatusInternalServerError, err.Error())
442442
return
443443
}
444444

445-
middleware.SuccessResponse(c, g)
445+
middleware.SuccessResponse(c, &GroupResponse{
446+
Group: g,
447+
})
446448
}
447449

448450
type SaveGroupModelConfigRequest struct {

core/controller/token.go

Lines changed: 31 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package controller
22

33
import (
4-
"errors"
54
"fmt"
65
"net/http"
76
"strconv"
@@ -27,23 +26,20 @@ func (t *TokenResponse) MarshalJSON() ([]byte, error) {
2726
return sonic.Marshal(&struct {
2827
*Alias
2928
CreatedAt int64 `json:"created_at"`
30-
ExpiredAt int64 `json:"expired_at"`
3129
AccessedAt int64 `json:"accessed_at"`
3230
}{
3331
Alias: (*Alias)(t),
3432
CreatedAt: t.CreatedAt.UnixMilli(),
35-
ExpiredAt: t.ExpiredAt.UnixMilli(),
3633
AccessedAt: t.AccessedAt.UnixMilli(),
3734
})
3835
}
3936

4037
type (
4138
AddTokenRequest struct {
42-
Name string `json:"name"`
43-
Subnets []string `json:"subnets"`
44-
Models []string `json:"models"`
45-
ExpiredAt int64 `json:"expiredAt"`
46-
Quota float64 `json:"quota"`
39+
Name string `json:"name"`
40+
Subnets []string `json:"subnets"`
41+
Models []string `json:"models"`
42+
Quota float64 `json:"quota"`
4743
}
4844

4945
UpdateTokenStatusRequest struct {
@@ -56,38 +52,24 @@ type (
5652
)
5753

5854
func (at *AddTokenRequest) ToToken() *model.Token {
59-
var expiredAt time.Time
60-
if at.ExpiredAt > 0 {
61-
expiredAt = time.UnixMilli(at.ExpiredAt)
62-
}
63-
6455
return &model.Token{
65-
Name: model.EmptyNullString(at.Name),
66-
Subnets: at.Subnets,
67-
Models: at.Models,
68-
ExpiredAt: expiredAt,
69-
Quota: at.Quota,
56+
Name: model.EmptyNullString(at.Name),
57+
Subnets: at.Subnets,
58+
Models: at.Models,
59+
Quota: at.Quota,
7060
}
7161
}
7262

7363
func validateToken(token AddTokenRequest) error {
74-
if token.Name == "" {
75-
return errors.New("token name cannot be empty")
76-
}
77-
78-
if len(token.Name) > 30 {
79-
return errors.New("token name is too long")
80-
}
81-
8264
if err := network.IsValidSubnets(token.Subnets); err != nil {
8365
return fmt.Errorf("invalid subnet: %w", err)
8466
}
8567

8668
return nil
8769
}
8870

89-
func validateTokenUpdate(token AddTokenRequest) error {
90-
if err := network.IsValidSubnets(token.Subnets); err != nil {
71+
func validateSubnets(subnets []string) error {
72+
if err := network.IsValidSubnets(subnets); err != nil {
9173
return fmt.Errorf("invalid subnet: %w", err)
9274
}
9375
return nil
@@ -492,8 +474,8 @@ func DeleteGroupTokens(c *gin.Context) {
492474
// @Accept json
493475
// @Produce json
494476
// @Security ApiKeyAuth
495-
// @Param id path int true "Token ID"
496-
// @Param token body AddTokenRequest true "Updated token information"
477+
// @Param id path int true "Token ID"
478+
// @Param token body model.UpdateTokenRequest true "Updated token information"
497479
// @Success 200 {object} middleware.APIResponse{data=TokenResponse}
498480
// @Router /api/tokens/{id} [put]
499481
func UpdateToken(c *gin.Context) {
@@ -503,20 +485,21 @@ func UpdateToken(c *gin.Context) {
503485
return
504486
}
505487

506-
var req AddTokenRequest
488+
var req model.UpdateTokenRequest
507489
if err := c.ShouldBindJSON(&req); err != nil {
508490
middleware.ErrorResponse(c, http.StatusBadRequest, err.Error())
509491
return
510492
}
511493

512-
if err := validateTokenUpdate(req); err != nil {
513-
middleware.ErrorResponse(c, http.StatusBadRequest, "parameter error: "+err.Error())
514-
return
494+
if req.Subnets != nil {
495+
if err := validateSubnets(*req.Subnets); err != nil {
496+
middleware.ErrorResponse(c, http.StatusBadRequest, "parameter error: "+err.Error())
497+
return
498+
}
515499
}
516500

517-
token := req.ToToken()
518-
519-
if err := model.UpdateToken(id, token); err != nil {
501+
token, err := model.UpdateToken(id, req)
502+
if err != nil {
520503
middleware.ErrorResponse(c, http.StatusInternalServerError, err.Error())
521504
return
522505
}
@@ -532,9 +515,9 @@ func UpdateToken(c *gin.Context) {
532515
// @Accept json
533516
// @Produce json
534517
// @Security ApiKeyAuth
535-
// @Param group path string true "Group name"
536-
// @Param id path int true "Token ID"
537-
// @Param token body AddTokenRequest true "Updated token information"
518+
// @Param group path string true "Group name"
519+
// @Param id path int true "Token ID"
520+
// @Param token body model.UpdateTokenRequest true "Updated token information"
538521
// @Success 200 {object} middleware.APIResponse{data=TokenResponse}
539522
// @Router /api/token/{group}/{id} [put]
540523
func UpdateGroupToken(c *gin.Context) {
@@ -546,20 +529,21 @@ func UpdateGroupToken(c *gin.Context) {
546529
return
547530
}
548531

549-
var req AddTokenRequest
532+
var req model.UpdateTokenRequest
550533
if err := c.ShouldBindJSON(&req); err != nil {
551534
middleware.ErrorResponse(c, http.StatusBadRequest, err.Error())
552535
return
553536
}
554537

555-
if err := validateTokenUpdate(req); err != nil {
556-
middleware.ErrorResponse(c, http.StatusBadRequest, "parameter error: "+err.Error())
557-
return
538+
if req.Subnets != nil {
539+
if err := validateSubnets(*req.Subnets); err != nil {
540+
middleware.ErrorResponse(c, http.StatusBadRequest, "parameter error: "+err.Error())
541+
return
542+
}
558543
}
559544

560-
token := req.ToToken()
561-
562-
if err := model.UpdateGroupToken(id, group, token); err != nil {
545+
token, err := model.UpdateGroupToken(id, group, req)
546+
if err != nil {
563547
middleware.ErrorResponse(c, http.StatusInternalServerError, err.Error())
564548
return
565549
}

0 commit comments

Comments
 (0)