refactor: remove user-level API methods, keep admin and send only

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
shiran
2026-06-08 15:45:25 +08:00
parent 69be4bcb82
commit f004408ca0
6 changed files with 4 additions and 209 deletions
+4 -4
View File
@@ -28,7 +28,7 @@ const (
// 构造方式:
// - NewServiceClient: 管理端(自动调用 service-token-login 获取 Bearer Token
// - NewBearerClient: 管理端(使用已有的 Bearer Token
// - NewUserTokenClient: 发送端(X-SMS-Token + 请求签名)
// - NewUserTokenClient: 发送端(X-SMS-Token + 请求签名,仅可调用发送接口
type Client struct {
baseURL string
mode authMode
@@ -73,9 +73,9 @@ func NewServiceClient(baseURL, serviceToken string, opts ...Option) (*Client, er
return c, nil
}
// NewBearerClient 创建使用已有 Bearer Token 的客户端。
// NewBearerClient 创建使用已有 Bearer Token 的管理端客户端。
//
// 适用于已通过其他方式获取 Bearer Token 的场景(如用户中心 Token
// 适用于已通过 service-token-login 等方式获取 Bearer Token 的场景。
func NewBearerClient(baseURL, bearerToken string, opts ...Option) *Client {
c := &Client{
baseURL: strings.TrimRight(baseURL, "/"),
@@ -92,7 +92,7 @@ func NewBearerClient(baseURL, bearerToken string, opts ...Option) *Client {
// NewUserTokenClient 创建发送端客户端。
//
// 使用 X-SMS-Token 头认证,POST/PUT 请求体会自动计算 sign 签名。
// 主要用于调用短信发送接口,也可管理当前用户的签名/模板/Token 等资源
// 仅可调用短信发送接口SendBatch/SendMulti/ListSendRecords/GetSendStatus
func NewUserTokenClient(baseURL, userToken string, opts ...Option) *Client {
c := &Client{
baseURL: strings.TrimRight(baseURL, "/"),
-21
View File
@@ -5,27 +5,6 @@ import (
"fmt"
)
// ──────────────────────────────────────────────
// 用户接口
// ──────────────────────────────────────────────
// ListQuotas 获取当前用户的额度列表(分页)。
// GET /api/sms/quota/list
func (c *Client) ListQuotas(ctx context.Context, q PaginationQuery) (PaginationResult[SmsQuota], error) {
params := paginationParams(q)
return get[PaginationResult[SmsQuota]](c, ctx, "/api/sms/quota/list", buildQuery(params))
}
// GetQuotaSummary 获取当前用户的额度汇总。
// GET /api/sms/quota/summary
func (c *Client) GetQuotaSummary(ctx context.Context) (QuotaSummary, error) {
return get[QuotaSummary](c, ctx, "/api/sms/quota/summary", nil)
}
// ──────────────────────────────────────────────
// 管理员接口
// ──────────────────────────────────────────────
// AdminListQuotas 管理员获取额度列表,可按 UserID 筛选。
// GET /api/sms/admin/quota/list
func (c *Client) AdminListQuotas(ctx context.Context, q QuotaListQuery) (PaginationResult[SmsQuota], error) {
-47
View File
@@ -5,53 +5,6 @@ import (
"fmt"
)
// ──────────────────────────────────────────────
// 用户接口
// ──────────────────────────────────────────────
// CreateSignature 创建短信签名。
// POST /api/sms/signature
func (c *Client) CreateSignature(ctx context.Context, req CreateSignatureReq) (SmsSignature, error) {
return post[SmsSignature](c, ctx, "/api/sms/signature", req)
}
// ListSignatures 获取当前用户的签名列表(分页)。
// GET /api/sms/signature/list
func (c *Client) ListSignatures(ctx context.Context, q PaginationQuery) (PaginationResult[SmsSignature], error) {
params := paginationParams(q)
return get[PaginationResult[SmsSignature]](c, ctx, "/api/sms/signature/list", buildQuery(params))
}
// GetSignature 获取指定签名详情。
// GET /api/sms/signature/:id
func (c *Client) GetSignature(ctx context.Context, id uint) (SmsSignature, error) {
return get[SmsSignature](c, ctx, fmt.Sprintf("/api/sms/signature/%d", id), nil)
}
// UpdateSignature 更新指定签名。
// PUT /api/sms/signature/:id
func (c *Client) UpdateSignature(ctx context.Context, id uint, req UpdateSignatureReq) (SmsSignature, error) {
return put[SmsSignature](c, ctx, fmt.Sprintf("/api/sms/signature/%d", id), req)
}
// DeleteSignature 删除指定签名。
// DELETE /api/sms/signature/:id
func (c *Client) DeleteSignature(ctx context.Context, id uint) error {
_, err := del[any](c, ctx, fmt.Sprintf("/api/sms/signature/%d", id))
return err
}
// SubmitSignature 提交签名进入审核。
// POST /api/sms/signature/:id/submit
func (c *Client) SubmitSignature(ctx context.Context, id uint) error {
_, err := post[any](c, ctx, fmt.Sprintf("/api/sms/signature/%d/submit", id), nil)
return err
}
// ──────────────────────────────────────────────
// 管理员接口
// ──────────────────────────────────────────────
// AdminListSignatures 管理员获取签名列表,可按 UserID、Status 筛选。
// GET /api/sms/admin/signature/list
func (c *Client) AdminListSignatures(ctx context.Context, q SignatureListQuery) (PaginationResult[SmsSignature], error) {
-54
View File
@@ -5,60 +5,6 @@ import (
"fmt"
)
// ──────────────────────────────────────────────
// 用户接口
// ──────────────────────────────────────────────
// CreateTemplate 创建短信模板。
// POST /api/sms/template
func (c *Client) CreateTemplate(ctx context.Context, req CreateTemplateReq) (SmsTemplate, error) {
return post[SmsTemplate](c, ctx, "/api/sms/template", req)
}
// ListTemplates 获取当前用户的模板列表(分页)。
// GET /api/sms/template/list
func (c *Client) ListTemplates(ctx context.Context, q PaginationQuery) (PaginationResult[SmsTemplate], error) {
params := paginationParams(q)
return get[PaginationResult[SmsTemplate]](c, ctx, "/api/sms/template/list", buildQuery(params))
}
// GetTemplate 获取指定模板详情。
// GET /api/sms/template/:id
func (c *Client) GetTemplate(ctx context.Context, id uint) (SmsTemplate, error) {
return get[SmsTemplate](c, ctx, fmt.Sprintf("/api/sms/template/%d", id), nil)
}
// UpdateTemplate 更新指定模板。
// PUT /api/sms/template/:id
func (c *Client) UpdateTemplate(ctx context.Context, id uint, req UpdateTemplateReq) (SmsTemplate, error) {
return put[SmsTemplate](c, ctx, fmt.Sprintf("/api/sms/template/%d", id), req)
}
// DeleteTemplate 删除指定模板。
// DELETE /api/sms/template/:id
func (c *Client) DeleteTemplate(ctx context.Context, id uint) error {
_, err := del[any](c, ctx, fmt.Sprintf("/api/sms/template/%d", id))
return err
}
// SubmitTemplate 提交模板进入审核。
// POST /api/sms/template/:id/submit
func (c *Client) SubmitTemplate(ctx context.Context, id uint) error {
_, err := post[any](c, ctx, fmt.Sprintf("/api/sms/template/%d/submit", id), nil)
return err
}
// ListRecommendedTemplates 获取推荐模板列表(分页)。
// GET /api/sms/template/recommended
func (c *Client) ListRecommendedTemplates(ctx context.Context, q PaginationQuery) (PaginationResult[SmsRecommendedTemplate], error) {
params := paginationParams(q)
return get[PaginationResult[SmsRecommendedTemplate]](c, ctx, "/api/sms/template/recommended", buildQuery(params))
}
// ──────────────────────────────────────────────
// 管理员接口
// ──────────────────────────────────────────────
// AdminListTemplates 管理员获取模板列表,可按 UserID、Status 筛选。
// GET /api/sms/admin/template/list
func (c *Client) AdminListTemplates(ctx context.Context, q TemplateListQuery) (PaginationResult[SmsTemplate], error) {
-47
View File
@@ -5,53 +5,6 @@ import (
"fmt"
)
// ──────────────────────────────────────────────
// 用户接口
// ──────────────────────────────────────────────
// CreateUserToken 创建用户令牌。
// POST /api/sms/token
func (c *Client) CreateUserToken(ctx context.Context, req CreateTokenReq) (SmsUserToken, error) {
return post[SmsUserToken](c, ctx, "/api/sms/token", req)
}
// ListUserTokens 获取当前用户的令牌列表(分页)。
// GET /api/sms/token/list
func (c *Client) ListUserTokens(ctx context.Context, q PaginationQuery) (PaginationResult[SmsUserToken], error) {
params := paginationParams(q)
return get[PaginationResult[SmsUserToken]](c, ctx, "/api/sms/token/list", buildQuery(params))
}
// GetUserToken 获取指定令牌详情。
// GET /api/sms/token/:id
func (c *Client) GetUserToken(ctx context.Context, id uint) (SmsUserToken, error) {
return get[SmsUserToken](c, ctx, fmt.Sprintf("/api/sms/token/%d", id), nil)
}
// UpdateUserToken 更新指定令牌。
// PUT /api/sms/token/:id
func (c *Client) UpdateUserToken(ctx context.Context, id uint, req UpdateTokenReq) (SmsUserToken, error) {
return put[SmsUserToken](c, ctx, fmt.Sprintf("/api/sms/token/%d", id), req)
}
// DeleteUserToken 删除指定令牌。
// DELETE /api/sms/token/:id
func (c *Client) DeleteUserToken(ctx context.Context, id uint) error {
_, err := del[any](c, ctx, fmt.Sprintf("/api/sms/token/%d", id))
return err
}
// ToggleUserToken 切换令牌的启用/禁用状态。
// POST /api/sms/token/:id/toggle
func (c *Client) ToggleUserToken(ctx context.Context, id uint) error {
_, err := post[any](c, ctx, fmt.Sprintf("/api/sms/token/%d/toggle", id), nil)
return err
}
// ──────────────────────────────────────────────
// 管理员接口
// ──────────────────────────────────────────────
// AdminListUserTokens 管理员获取令牌列表,可按 UserID、Status 筛选。
// GET /api/sms/admin/token/list
func (c *Client) AdminListUserTokens(ctx context.Context, q TokenListQuery) (PaginationResult[SmsUserToken], error) {
-36
View File
@@ -65,22 +65,6 @@ type SmsSignature struct {
ReviewedAt *time.Time `json:"reviewed_at"`
}
type CreateSignatureReq struct {
Title string `json:"title"`
ApplicantName string `json:"applicant_name"`
ApplicantIDCard string `json:"applicant_id_card,omitempty"`
ApplicantCompany string `json:"applicant_company,omitempty"`
LicenseURL string `json:"license_url,omitempty"`
}
type UpdateSignatureReq struct {
Title string `json:"title,omitempty"`
ApplicantName string `json:"applicant_name,omitempty"`
ApplicantIDCard string `json:"applicant_id_card,omitempty"`
ApplicantCompany string `json:"applicant_company,omitempty"`
LicenseURL string `json:"license_url,omitempty"`
}
type AdminCreateSignatureReq struct {
UserID uint `json:"user_id"`
Title string `json:"title"`
@@ -130,19 +114,6 @@ type SmsTemplate struct {
ReviewedAt *time.Time `json:"reviewed_at"`
}
type CreateTemplateReq struct {
Name string `json:"name"`
Content string `json:"content"`
Params []TemplateParam `json:"params,omitempty"`
RecommendedID *uint `json:"recommended_id,omitempty"`
}
type UpdateTemplateReq struct {
Name string `json:"name,omitempty"`
Content string `json:"content,omitempty"`
Params []TemplateParam `json:"params,omitempty"`
}
type AdminCreateTemplateReq struct {
UserID uint `json:"user_id"`
Name string `json:"name"`
@@ -203,13 +174,6 @@ type SmsUserToken struct {
LastUsedIP string `json:"last_used_ip"`
}
type CreateTokenReq struct {
Name string `json:"name,omitempty"`
QuotaLimit *int `json:"quota_limit,omitempty"`
TemplateIDs []uint `json:"template_ids,omitempty"`
ExpireAt string `json:"expire_at,omitempty"`
}
type UpdateTokenReq struct {
Name string `json:"name,omitempty"`
QuotaLimit *int `json:"quota_limit,omitempty"`