Files
gochat/docs/requirements/M02-codegraph-context.md
T
rogee 0dabb8cfa5 docs: 整理文档目录结构 — 清理过时文档、归集功能子目录、统一命名规范
清理:
- 删除 34 份过时文档(gap reports/QA临时报告/验收报告/阶段性文档)
- 删除 docs/.hermes/skills 第三方 skills 副本(16 文件)
- 删除 skills-lock.json

目录归集:
- 根目录仅保留 README.md 索引
- product/ — 产品与架构设计(PRD + ARCHITECTURE + P2设计文档 + AI/企业路线图)
- tracking/ — Chatwoot parity 开发跟踪
- requirements/ — M01-M12 模块需求
- plans/ — 历史实现计划
- parity/ — 路由 parity 与前端契约
- qa/ — QA 报告与测试计划
- ops/ — 运维部署

命名规范:
- 全小写 kebab-case,禁止全大写文件名
- product/tracking/ops 用 NN- 序号前缀
- requirements 用 MNN- 两位零填充模块号
- plans/qa 用 YYYY-MM-DD- 日期前缀
- requirements M1-M9 零填充为 M01-M09(修复字典序)

同步更新:
- backend/cmd/route_parity/main.go 路径默认值
- backend/scripts/parity_frontend_smoke.sh 报告路径
- 所有 docs 内部交叉引用
- .gitignore 排除编译产物 (backend/gochat, backend/route_parity)
- 新增迁移 000052/000053
- 前端 WS 相关修改
2026-07-09 14:53:27 +08:00

130 lines
3.3 KiB
Markdown

## Code Context
**Query:** inbox management, channel provider, web widget, telegram channel, facebook channel, whatsapp channel, email channel, channelable concern, inbox member, inbox assignment
### Entry Points
- **AddChannelWebWidgetToPortals** (class) - db/migrate/20240415210313_add_channel_web_widget_to_portals.rb:1
- **RemoveImapInboxSynedAtFromChannelEmail** (class) - db/migrate/20240131040316_remove_imap_inbox_syned_at_from_channel_email.rb:1
- **Telegram** (component) - app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Telegram.vue:1
### Related Symbols
- db/migrate/20240415210313_add_channel_web_widget_to_portals.rb: change:2
- db/migrate/20240131040316_remove_imap_inbox_syned_at_from_channel_email.rb: change:2
### Code
#### AddChannelWebWidgetToPortals (db/migrate/20240415210313_add_channel_web_widget_to_portals.rb:1)
```ruby
class AddChannelWebWidgetToPortals < ActiveRecord::Migration[7.0]
def change
add_column :portals, :channel_web_widget_id, :bigint
add_index :portals, :channel_web_widget_id
end
end
```
#### RemoveImapInboxSynedAtFromChannelEmail (db/migrate/20240131040316_remove_imap_inbox_syned_at_from_channel_email.rb:1)
```ruby
class RemoveImapInboxSynedAtFromChannelEmail < ActiveRecord::Migration[7.0]
def change
remove_column :channel_email, :imap_inbox_synced_at, :datetime
end
end
```
#### Telegram (app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Telegram.vue:1)
```vue
<script>
import { mapGetters } from 'vuex';
import { useVuelidate } from '@vuelidate/core';
import { useAlert } from 'dashboard/composables';
import { required } from '@vuelidate/validators';
import router from '../../../../index';
import PageHeader from '../../SettingsSubPageHeader.vue';
import NextButton from 'dashboard/components-next/button/Button.vue';
export default {
components: {
PageHeader,
NextButton,
},
setup() {
return { v$: useVuelidate() };
},
data() {
return {
botToken: '',
};
},
computed: {
...mapGetters({
uiFlags: 'inboxes/getUIFlags',
}),
},
validations: {
botToken: { required },
},
methods: {
async createChannel() {
this.v$.$touch();
if (this.v$.$invalid) {
return;
}
try {
const telegramChannel = await this.$store.dispatch(
'inboxes/createChannel',
{
channel: {
type: 'telegram',
bot_token: this.botToken,
},
}
);
router.replace({
name: 'settings_inboxes_add_agents',
params: {
page: 'new',
inbox_id: telegramChannel.id,
},
});
} catch (error) {
useAlert(
error.message ||
this.$t('INBOX_MGMT.ADD.TELEGRAM_CHANNEL.API.ERROR_MESSAGE')
);
}
},
},
};
</script>
<template>
<div class="h-full w-full p-6 col-span-6">
<PageHeader
:head
// ... truncated ...
```
#### change (db/migrate/20240415210313_add_channel_web_widget_to_portals.rb:2)
```ruby
def change
add_column :portals, :channel_web_widget_id, :bigint
add_index :portals, :channel_web_widget_id
end
```
#### change (db/migrate/20240131040316_remove_imap_inbox_syned_at_from_channel_email.rb:2)
```ruby
def change
remove_column :channel_email, :imap_inbox_synced_at, :datetime
end
```