From 21f29a68b55b32953d984c20ffdad1755ffce009 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Fri, 8 May 2026 07:20:19 +0800 Subject: [PATCH] feat(mcp): repository List + UpdateLastUsed + Revoke + DeleteByID --- internal/mcp/repository.go | 43 +++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/internal/mcp/repository.go b/internal/mcp/repository.go index 793c30f..055d883 100644 --- a/internal/mcp/repository.go +++ b/internal/mcp/repository.go @@ -173,16 +173,40 @@ func (r *pgRepo) GetByID(ctx context.Context, id uuid.UUID) (*MCPToken, error) { // ===== Stub methods (implemented in subsequent tasks) ===== -func (r *pgRepo) List(_ context.Context, _ *uuid.UUID, _ bool) ([]*MCPToken, error) { - panic("not implemented: List") +func (r *pgRepo) List(ctx context.Context, callerUserID *uuid.UUID, activeOnly bool) ([]*MCPToken, error) { + rows, err := r.q.ListMcpTokens(ctx, mcpsqlc.ListMcpTokensParams{ + CallerUserID: toPgUUIDPtr(callerUserID), + ActiveOnly: activeOnly, + }) + if err != nil { + return nil, errs.Wrap(err, errs.CodeInternal, "list mcp_tokens") + } + out := make([]*MCPToken, 0, len(rows)) + for _, row := range rows { + t, err := rowToMCPToken(row) + if err != nil { + return nil, err + } + out = append(out, t) + } + return out, nil } -func (r *pgRepo) UpdateLastUsed(_ context.Context, _ uuid.UUID) error { - panic("not implemented: UpdateLastUsed") +func (r *pgRepo) UpdateLastUsed(ctx context.Context, id uuid.UUID) error { + if err := r.q.UpdateMcpTokenLastUsed(ctx, toPgUUID(id)); err != nil { + return errs.Wrap(err, errs.CodeInternal, "update mcp_token last_used_at") + } + return nil } -func (r *pgRepo) Revoke(_ context.Context, _ uuid.UUID) (uuid.UUID, error) { - panic("not implemented: Revoke") +func (r *pgRepo) Revoke(ctx context.Context, id uuid.UUID) (uuid.UUID, error) { + row, err := r.q.RevokeMcpToken(ctx, toPgUUID(id)) + if err != nil { + // pgx.ErrNoRows = 已撤销 / 不存在;统一返 NotFound 让上层细分 + return uuid.Nil, pgxNoRowsToErrNotFound(err, errs.CodeMcpTokenNotFound, + "mcp token not found or already revoked") + } + return fromPgUUID(row), nil } func (r *pgRepo) RevokeBySession(_ context.Context, _ uuid.UUID) ([]uuid.UUID, error) { @@ -197,6 +221,9 @@ func (r *pgRepo) PurgeExpired(_ context.Context, _ time.Time) (int64, error) { panic("not implemented: PurgeExpired") } -func (r *pgRepo) DeleteByID(_ context.Context, _ uuid.UUID) error { - panic("not implemented: DeleteByID") +func (r *pgRepo) DeleteByID(ctx context.Context, id uuid.UUID) error { + if err := r.q.DeleteMcpTokenByID(ctx, toPgUUID(id)); err != nil { + return errs.Wrap(err, errs.CodeInternal, "delete mcp_token") + } + return nil }