feat(bitable): add Bitable (Base) support#47
Conversation
Add full CRUD support for Feishu Bitable (multi-dimensional tables), including app management, table/field/record/view operations. New files: - internal/client/bitable.go: API client with 24 public functions - cmd/bitable*.go: 19 subcommands (create, tables, fields, records, views, etc.) - skills/feishu-cli-bitable/SKILL.md: Claude Code skill with pitfall guide Key features: - Create/get bitable apps - Table CRUD (create, delete, rename) - Field CRUD with type mapping (text, number, select, date, etc.) - Record operations: single/batch create, update, delete, search with filter/sort - View management (grid, kanban, gallery, gantt, form) - Alias support: `feishu-cli base` = `feishu-cli bitable` The skill includes practical pitfalls from production usage: - PUT fields on SingleSelect clears options without full property - New bases have ~10 empty default rows to clean up - API-created bases are invisible until permissions are added - Primary index field rename requires type parameter Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix BitableFieldDesc to handle both string and object formats from API - Add owner_email and transfer_ownership config options - Add `config get` command for reading config values (with secret masking) - Update CLAUDE.md and bitable skill with ownership transfer workflow Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
riba2534
left a comment
There was a problem hiding this comment.
Review: 功能完整且质量不错,修复几个问题后可合并
非常好的 PR!多维表格的 19 个子命令覆盖了核心 CRUD 场景,SKILL.md 的踩坑指南也很实用。以下几个问题修复后即可合并:
Warning(需修复)
-
分页未处理 —
ListBitableTables和ListBitableFields(internal/client/bitable.go:170)只请求一次 API,不处理has_more/page_token。当多维表格有大量数据表或字段时结果会被截断。对比同文件SearchBitableRecords和ListBitableViews都已正确处理分页。建议至少暴露pageSize/pageToken参数,或自动循环获取所有页。 -
必填参数未校验 —
add-record的--fields和create-field的--field未标记必填(cmd/bitable_record.go:155)。用户不提供时json.Unmarshal("")报错为unexpected end of JSON input,不如直接提示缺少参数。建议添加mustMarkFlagRequired或在RunE开头检查空值。 -
config get 报错 —
owner_email和transfer_ownership没有调用viper.SetDefault(),执行config get owner_email时viper.IsSet()返回 false,导致报"未知的配置项"。请在config/config.go的Init函数中补充默认值。 -
死代码 —
BatchUpdateBitableRecords(internal/client/bitable.go:458)已实现但无对应 CLI 命令。建议二选一:- 补充
bitable update-records命令(与add-records/delete-records对称) - 移除该函数,后续需要时再添加
- 补充
Suggestion(可选优化)
-
所有 20+ 个函数中 tokenType/opts 初始化代码重复(约 5 行/函数),建议抽取辅助函数
resolveTokenOpts()减少约 100 行重复。 -
views命令丢弃了分页 token(cmd/bitable_view.go:52),对比records命令已支持--page-size/--page-token,建议保持一致。
整体质量很好,修复以上 4 个 warning 后即可合并。
|
已按 review 完成修复,最新提交: 本次处理内容:
验证情况:
请继续审查。 |
… bitable feature Remove non-bitable changes from PR #47: - Delete cmd/config_get.go (config get subcommand) - Remove OwnerEmail and TransferOwnership fields from Config struct - Remove related viper defaults, env bindings, and config template entries - Remove TestInit_ConfigDefaultsExposedToViper test - Revert CLAUDE.md permission section to main branch version - Clean owner_email/transfer_ownership references from bitable SKILL.md
Summary
internal/client/bitable.go) with 24 public functions covering app/table/field/record/view operationsskills/feishu-cli-bitable/) with practical pitfall guide from production usageCommands added
bitable create,bitable gettables,create-table,delete-table,rename-tablefields,create-field,update-field,delete-fieldrecords,get-record,add-record,add-records,update-record,delete-recordsviews,create-view,delete-viewAlias:
feishu-cli base=feishu-cli bitablePitfalls documented in skill
Test plan
go buildandgo vetpass (verified locally)feishu-cli bitable --helpshows all subcommandsfeishu-cli perm add <token> --doc-type bitable🤖 Generated with Claude Code