Skip to content

Commit 3323a10

Browse files
committed
refactor: migrate to Lagrange.Milky
1 parent 67bcbbe commit 3323a10

19 files changed

+1112
-839
lines changed
Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
"""uninfo
2+
3+
迁移 ID: b49551286716
4+
父迁移:
5+
创建时间: 2025-07-12 15:39:36.388729
6+
7+
"""
8+
9+
from __future__ import annotations
10+
11+
from collections.abc import Sequence
12+
13+
import sqlalchemy as sa
14+
from alembic import op
15+
16+
revision: str = "b49551286716"
17+
down_revision: str | Sequence[str] | None = None
18+
branch_labels: str | Sequence[str] | None = None
19+
depends_on: str | Sequence[str] | None = "2e0c173949d3", "7d23eb54c6be"
20+
21+
22+
session_columns = [
23+
"bot_id",
24+
"bot_type",
25+
"platform",
26+
"level",
27+
"id1",
28+
"id2",
29+
"id3",
30+
]
31+
Session = sa.table( # nonebot_plugin_session_orm.SessionModel
32+
"nonebot_plugin_session_orm_sessionmodel",
33+
sa.column("id"),
34+
*map(sa.column, session_columns),
35+
)
36+
session_level_case = lambda private, group: sa.case(
37+
{
38+
1: private, # nonebot_plugin_session.SessionLevel.LEVEL1
39+
2: group, # nonebot_plugin_session.SessionLevel.LEVEL2
40+
},
41+
value=Session.c.level,
42+
)
43+
44+
botmodel_columns = ["self_id", "adapter", "scope"]
45+
BotModel = sa.table( # nonebot_plugin_uninfo.orm.BotModel
46+
"nonebot_plugin_uninfo_botmodel", sa.column("id"), *map(sa.column, botmodel_columns)
47+
)
48+
bot_persist_id = (
49+
sa.select(BotModel.c.id).filter_by(self_id=Session.c.bot_id).scalar_subquery()
50+
)
51+
52+
scenemodel_columns = ["bot_persist_id", "scene_id", "scene_type", "scene_data"]
53+
SceneModel = sa.table( # nonebot_plugin_uninfo.orm.SceneModel
54+
"nonebot_plugin_uninfo_scenemodel",
55+
sa.column("id"),
56+
*map(sa.column, scenemodel_columns),
57+
)
58+
scene_id = session_level_case(Session.c.id1, Session.c.id2)
59+
scene_type = session_level_case(
60+
sa.literal(0), # nonebot_plugin_uninfo.SceneType.PRIVATE
61+
sa.literal(1), # nonebot_plugin_uninfo.SceneType.GROUP
62+
)
63+
scene_persist_id = (
64+
sa.select(SceneModel.c.id)
65+
.filter_by(bot_persist_id=bot_persist_id, scene_id=scene_id, scene_type=scene_type)
66+
.scalar_subquery()
67+
)
68+
scene_type_case = lambda private, group: sa.case(
69+
{
70+
0: private, # nonebot_plugin_uninfo.SceneType.PRIVATE
71+
1: group, # nonebot_plugin_uninfo.SceneType.GROUP
72+
},
73+
value=SceneModel.c.scene_type,
74+
)
75+
76+
session_level = scene_type_case(
77+
sa.literal(1), # nonebot_plugin_session.SessionLevel.PRIVATE
78+
sa.literal(2), # nonebot_plugin_session.SessionLevel.GROUP
79+
)
80+
session_id2 = scene_type_case(sa.literal(None), SceneModel.c.scene_id)
81+
82+
usermodel_columns = ["bot_persist_id", "user_id", "user_data"]
83+
UserModel = sa.table( # nonebot_plugin_uninfo.orm.UserModel
84+
"nonebot_plugin_uninfo_usermodel",
85+
sa.column("id"),
86+
*map(sa.column, usermodel_columns),
87+
)
88+
user_persist_id = (
89+
sa.select(UserModel.c.id)
90+
.filter_by(bot_persist_id=bot_persist_id, user_id=Session.c.id1)
91+
.scalar_subquery()
92+
)
93+
94+
sessionmodel_columns = ["bot_persist_id", "scene_persist_id", "user_persist_id"]
95+
SessionModel = sa.table( # nonebot_plugin_uninfo.orm.SessionModel
96+
"nonebot_plugin_uninfo_sessionmodel",
97+
sa.column("id"),
98+
*map(sa.column, sessionmodel_columns),
99+
)
100+
101+
102+
def upgrade(name: str = "") -> None:
103+
if name:
104+
return
105+
# ### commands auto generated by Alembic - please adjust! ###
106+
op.execute(
107+
sa.insert(BotModel).from_select(
108+
botmodel_columns,
109+
sa.select(
110+
Session.c.bot_id,
111+
sa.literal("Milky"), # nonebot_plugin_uninfo.SupportAdapter.milky
112+
sa.literal("QQClient"), # nonebot_plugin_uninfo.SupportScope.qq_client
113+
).distinct(),
114+
)
115+
)
116+
op.execute(
117+
sa.insert(SceneModel).from_select(
118+
scenemodel_columns,
119+
sa.select(
120+
bot_persist_id,
121+
scene_id,
122+
scene_type,
123+
sa.text("'{}'"),
124+
).distinct(),
125+
)
126+
)
127+
op.execute(
128+
sa.insert(UserModel).from_select(
129+
usermodel_columns,
130+
sa.select(
131+
bot_persist_id,
132+
Session.c.id1,
133+
sa.text("'{}'"),
134+
).distinct(),
135+
)
136+
)
137+
op.execute(
138+
sa.insert(SessionModel).from_select(
139+
sessionmodel_columns,
140+
sa.select(
141+
bot_persist_id,
142+
scene_persist_id,
143+
user_persist_id,
144+
).select_from(Session),
145+
)
146+
)
147+
# ### end Alembic commands ###
148+
149+
150+
def downgrade(name: str = "") -> None:
151+
if name:
152+
return
153+
# ### commands auto generated by Alembic - please adjust! ###
154+
op.execute(
155+
sa.insert(Session).from_select(
156+
session_columns,
157+
sa.select(
158+
BotModel.c.self_id,
159+
sa.literal("OneBot V11"),
160+
sa.literal("qq"),
161+
session_level,
162+
UserModel.c.user_id,
163+
session_id2,
164+
sa.literal(""),
165+
).select_from(
166+
SessionModel.join(
167+
BotModel, SessionModel.c.bot_persist_id == BotModel.c.id
168+
)
169+
.join(SceneModel, SessionModel.c.scene_persist_id == SceneModel.c.id)
170+
.join(UserModel, SessionModel.c.user_persist_id == UserModel.c.id)
171+
),
172+
)
173+
)
174+
# ### end Alembic commands ###
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
"""uninfo
2+
3+
迁移 ID: 97b890d49c65
4+
父迁移: 9a8b6ae112db
5+
创建时间: 2025-07-14 01:23:53.535951
6+
7+
"""
8+
9+
from __future__ import annotations
10+
11+
from collections.abc import Sequence
12+
13+
import sqlalchemy as sa
14+
from alembic import op
15+
16+
from migrations.versions.b49551286716_uninfo import (
17+
SceneModel,
18+
Session,
19+
bot_persist_id,
20+
scene_id,
21+
scene_type,
22+
)
23+
24+
revision: str = "97b890d49c65"
25+
down_revision: str | Sequence[str] | None = "9a8b6ae112db"
26+
branch_labels: str | Sequence[str] | None = None
27+
depends_on: str | Sequence[str] | None = "b49551286716"
28+
29+
30+
Subscription = sa.table(
31+
"dynamic_subscription",
32+
sa.column("uid"),
33+
sa.column("scene_id"),
34+
sa.column("session_id"),
35+
)
36+
37+
38+
def upgrade(name: str = "") -> None:
39+
if name:
40+
return
41+
# ### commands auto generated by Alembic - please adjust! ###
42+
with op.batch_alter_table("dynamic_subscription", schema=None) as batch_op:
43+
batch_op.add_column(sa.Column("scene_id", sa.Integer(), nullable=True))
44+
batch_op.create_foreign_key(
45+
batch_op.f(
46+
"fk_dynamic_subscription_scene_id_nonebot_plugin_uninfo_scenemodel"
47+
),
48+
"nonebot_plugin_uninfo_scenemodel",
49+
["scene_id"],
50+
["id"],
51+
)
52+
53+
op.execute(
54+
sa.update(Subscription).values(
55+
scene_id=sa.select(SceneModel.c.id)
56+
.where(Subscription.c.session_id == Session.c.id)
57+
.filter_by(
58+
bot_persist_id=bot_persist_id,
59+
scene_id=scene_id,
60+
scene_type=scene_type,
61+
)
62+
.correlate(Subscription)
63+
.scalar_subquery()
64+
)
65+
)
66+
67+
with op.batch_alter_table("dynamic_subscription", schema=None) as batch_op:
68+
batch_op.drop_constraint("pk_dynamic_subscription", type_="primary")
69+
batch_op.drop_constraint(
70+
batch_op.f(
71+
"fk_dynamic_subscription_session_id_nonebot_plugin_session_orm_sessionmodel"
72+
),
73+
type_="foreignkey",
74+
)
75+
batch_op.drop_column("session_id")
76+
77+
batch_op.alter_column("scene_id", existing_type=sa.INTEGER(), nullable=False)
78+
batch_op.create_primary_key("pk_dynamic_subscription", ["uid", "scene_id"])
79+
# ### end Alembic commands ###
80+
81+
82+
def downgrade(name: str = "") -> None:
83+
if name:
84+
return
85+
# ### commands auto generated by Alembic - please adjust! ###
86+
with op.batch_alter_table("dynamic_subscription", schema=None) as batch_op:
87+
batch_op.drop_constraint("pk_dynamic_subscription", type_="primary")
88+
batch_op.drop_constraint(
89+
batch_op.f(
90+
"fk_dynamic_subscription_scene_id_nonebot_plugin_uninfo_scenemodel"
91+
),
92+
type_="foreignkey",
93+
)
94+
batch_op.drop_column("scene_id")
95+
96+
batch_op.add_column(sa.Column("session_id", sa.Integer(), nullable=False))
97+
batch_op.create_foreign_key(
98+
batch_op.f(
99+
"fk_dynamic_subscription_session_id_nonebot_plugin_session_orm_sessionmodel"
100+
),
101+
"nonebot_plugin_session_orm_sessionmodel",
102+
["session_id"],
103+
["id"],
104+
)
105+
batch_op.create_primary_key("pk_dynamic_subscription", ["uid", "session_id"])
106+
# ### end Alembic commands ###

migrations/versions/bilibili/dynamic/9a8b6ae112db_initial_revision.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"""initial revision
22
33
迁移 ID: 9a8b6ae112db
4-
父迁移:
4+
父迁移:
55
创建时间: 2023-12-23 16:39:26.978084
66
77
"""
@@ -15,8 +15,8 @@
1515

1616
revision: str = "9a8b6ae112db"
1717
down_revision: str | Sequence[str] | None = None
18-
branch_labels: str | Sequence[str] | None = ("dynamic",)
19-
depends_on: str | Sequence[str] | None = None
18+
branch_labels: str | Sequence[str] | None = "dynamic"
19+
depends_on: str | Sequence[str] | None = "2e0c173949d3"
2020

2121

2222
def upgrade(name: str = "") -> None:

0 commit comments

Comments
 (0)