Skip to content

Commit 41e2218

Browse files
committed
update docs
1 parent a33ec5c commit 41e2218

File tree

5 files changed

+26
-20
lines changed

5 files changed

+26
-20
lines changed

docs/.vuepress/sidebar.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,6 @@ export const mySidebar: ThemeSidebarMulti = {
110110
{ text: 'Skills', link: 'skills' },
111111
{ text: 'MCP', link: 'mcp' },
112112
{ text: 'Prompt', link: 'prompt' },
113-
{ text: 'Nothing', link: 'nothing' },
114113
]
115114
},
116115
]

docs/.vuepress/theme.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,6 @@ export const myTheme: Theme = plumeTheme({
5353
contributors: false,
5454
//watermark: true,
5555
markdown: {
56-
abbr: true,
57-
annotation: true,
5856
chat: true,
5957
mermaid: true,
6058
bilibili: true,
@@ -77,9 +75,4 @@ export const myTheme: Theme = plumeTheme({
7775
llmstxt: {
7876
locale: 'all'
7977
},
80-
encrypt: {
81-
rules: {
82-
'/ai/nothing.html': '123456',
83-
},
84-
},
8578
})

docs/ai/nothing.md

Lines changed: 0 additions & 3 deletions
This file was deleted.

docs/backend/reference/model.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ id_key = Annotated[
4343
::: warning
4444
在 fba 中,并没有默认集成操作人员信息到各个数据库表,但是我们提供了非常简易的集成方式
4545

46-
[**操作人**博客](../../blog/operator.md){.read-more}
46+
[**操作人博客**](../../blog/operator.md){.read-more}
4747
:::
4848

4949
### 日期时间

docs/blog/operator.md

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,30 +35,47 @@ fba 通过 JWT 中间件将用户信息存储到了每个请求的上下文中
3535

3636
### 手动
3737

38-
首先,在接口函数中,像 Django/Flask 一样,传入一个 `request` 参数,最好,我们加上参数类型:`request: Request`
39-
,然后我们可以在接口函数中通过 `request.user.id` 获取当前操作人员 id ,这样,在存储的时候,就可以传递此 id 进行存储
38+
首先,在接口函数中,传入一个 `request` 参数,最好,我们加上参数类型:`request: Request`,然后我们可以在接口函数中通过
39+
`request.user.id` 获取当前操作人员 id ,然后传递此 id 进行存储
4040

41-
除此之外,我们还可以通过 `ctx.user_id` 更便捷的获取操作人员 id,尽情享受吧
41+
除此之外,为了简化代码,我们还可以通过 `ctx.user_id` 直接获取操作人员 id 进行存储
4242

4343
### 自动
4444

4545
利用 SQLAlchemy 的事件监听,我们可以轻松做到这一点
4646

47+
首先,我们需要对 UserMixin 做些调整:
48+
49+
```python{4}
50+
class UserMixin(MappedAsDataclass):
51+
"""用户 Mixin 数据类"""
52+
53+
created_by: Mapped[int] = mapped_column(init=False, sort_order=998, comment='创建者')
54+
updated_by: Mapped[int | None] = mapped_column(init=False, default=None, sort_order=998, comment='修改者')
55+
```
56+
57+
然后在 `backend/common/model.py` 底部添加添加以下监听事件:
58+
4759
```python
4860
@event.listens_for(UserMixin, 'before_insert', propagate=True)
4961
def set_created_by(mapper, connection, target) -> None: # noqa: ANN001
5062
if hasattr(target, 'created_by'):
5163
target.created_by = ctx.user_id
5264

5365

54-
@event.listens_for(UserMixin, 'before_update', propagate=True)
55-
def set_updated_by(mapper, connection, target) -> None: # noqa: ANN001
56-
if hasattr(target, 'updated_by'):
57-
target.created_by = ctx.user_id
66+
@event.listens_for(Session, 'do_orm_execute', propagate=True)
67+
def set_updated_by(orm_statement: ORMExecuteState) -> None:
68+
if (
69+
orm_statement.is_update
70+
and orm_statement.is_orm_statement
71+
and orm_statement.statement.is_update
72+
and orm_statement.bind_mapper.c.get('updated_by') is not None
73+
):
74+
orm_statement.statement = orm_statement.statement.values(updated_by=ctx.user_id)
5875
```
5976

6077
::: warning
61-
只有特定方法才会进行监听,详情请查看[sqlalchemy#12724](https://github.com/sqlalchemy/sqlalchemy/discussions/12724)
78+
事件监听条件要求严格,如果监听事件未按预期执行,参考[sqlalchemy#12724](https://github.com/sqlalchemy/sqlalchemy/discussions/12724)
6279
:::
6380

6481
## 如何展示?

0 commit comments

Comments
 (0)