mirror of
https://github.com/suyiiyii/nonebot-bison.git
synced 2025-06-07 12:23:00 +08:00
data migration
This commit is contained in:
parent
06e4c9ec1b
commit
e202b4bd7a
@ -48,7 +48,7 @@ class SubscribeContent(TypedDict):
|
|||||||
|
|
||||||
|
|
||||||
class ConfigContent(TypedDict):
|
class ConfigContent(TypedDict):
|
||||||
user: str
|
user: int
|
||||||
user_type: Literal["group", "private"]
|
user_type: Literal["group", "private"]
|
||||||
subs: list[SubscribeContent]
|
subs: list[SubscribeContent]
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import json
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
import nonebot
|
import nonebot
|
||||||
@ -9,7 +10,7 @@ from nonebot_plugin_datastore import PluginData, create_session, db
|
|||||||
from sqlalchemy.engine.base import Connection
|
from sqlalchemy.engine.base import Connection
|
||||||
|
|
||||||
from .config_legacy import ConfigContent, config
|
from .config_legacy import ConfigContent, config
|
||||||
from .db_model import Base
|
from .db_model import Base, Subscribe, Target, User
|
||||||
|
|
||||||
DATA = PluginData("bison")
|
DATA = PluginData("bison")
|
||||||
|
|
||||||
@ -20,6 +21,53 @@ async def data_migrate():
|
|||||||
all_subs: list[ConfigContent] = list(
|
all_subs: list[ConfigContent] = list(
|
||||||
map(lambda item: ConfigContent(**item), config.get_all_subscribe().all())
|
map(lambda item: ConfigContent(**item), config.get_all_subscribe().all())
|
||||||
)
|
)
|
||||||
|
print(all_subs)
|
||||||
|
sess = create_session()
|
||||||
|
user_to_create = []
|
||||||
|
subscribe_to_create = []
|
||||||
|
platform_target_map: dict[str, tuple[Target, str, int]] = {}
|
||||||
|
for user in all_subs:
|
||||||
|
db_user = User(uid=user["user"], type=user["user_type"])
|
||||||
|
user_to_create.append(db_user)
|
||||||
|
for sub in user["subs"]:
|
||||||
|
target = sub["target"]
|
||||||
|
platform_name = sub["target_type"]
|
||||||
|
target_name = sub["target_name"]
|
||||||
|
key = f"{target}-{platform_name}"
|
||||||
|
if key in platform_target_map.keys():
|
||||||
|
target_obj, ext_user_type, ext_user = platform_target_map[key]
|
||||||
|
if target_obj.target_name != target_name:
|
||||||
|
# GG
|
||||||
|
logger.error(
|
||||||
|
f"你的旧版本数据库中存在数据不一致问题,请完成迁移后执行重新添加{platform_name}平台的{target}"
|
||||||
|
f"它的名字可能为{target_obj.target_name}或{target_name}"
|
||||||
|
)
|
||||||
|
|
||||||
|
else:
|
||||||
|
target_obj = Target(
|
||||||
|
platform_name=platform_name,
|
||||||
|
target_name=target_name,
|
||||||
|
target=target,
|
||||||
|
)
|
||||||
|
platform_target_map[key] = (
|
||||||
|
target_obj,
|
||||||
|
user["user_type"],
|
||||||
|
user["user"],
|
||||||
|
)
|
||||||
|
subscribe_obj = Subscribe(
|
||||||
|
user=db_user,
|
||||||
|
target=target_obj,
|
||||||
|
categories=json.dumps(sub["cats"]),
|
||||||
|
tags=json.dumps(sub["tags"]),
|
||||||
|
)
|
||||||
|
subscribe_to_create.append(subscribe_obj)
|
||||||
|
sess.add_all(
|
||||||
|
user_to_create
|
||||||
|
+ list(map(lambda x: x[0], platform_target_map.values()))
|
||||||
|
+ subscribe_to_create
|
||||||
|
)
|
||||||
|
await sess.commit()
|
||||||
|
logger.info("migrate success")
|
||||||
|
|
||||||
|
|
||||||
@nonebot.get_driver().on_startup
|
@nonebot.get_driver().on_startup
|
||||||
|
@ -14,6 +14,13 @@ class User:
|
|||||||
user_type: Literal["group", "private"]
|
user_type: Literal["group", "private"]
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass(eq=True, frozen=True)
|
||||||
|
class PlatformTarget:
|
||||||
|
target: str
|
||||||
|
platform_name: str
|
||||||
|
target_name: str
|
||||||
|
|
||||||
|
|
||||||
class UserSubInfo(NamedTuple):
|
class UserSubInfo(NamedTuple):
|
||||||
user: User
|
user: User
|
||||||
category_getter: Callable[[Target], list[Category]]
|
category_getter: Callable[[Target], list[Category]]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user