🗃️ add user_target column

This commit is contained in:
felinae98
2023-03-20 02:07:57 +08:00
parent e8d83c5255
commit d535f5212d
5 changed files with 902 additions and 737 deletions
+3
View File
@@ -1,7 +1,9 @@
import datetime
from pathlib import Path
from typing import Optional
from nonebot_plugin_datastore import get_plugin_data
from nonebot_plugin_saa.utils import PlatformTarget
from sqlalchemy import JSON, ForeignKey, String, UniqueConstraint
from sqlalchemy.orm import Mapped, mapped_column, relationship
@@ -17,6 +19,7 @@ class User(Model):
id: Mapped[int] = mapped_column(primary_key=True)
type: Mapped[str] = mapped_column(String(20))
uid: Mapped[int]
user_target: Mapped[Optional[dict]] = mapped_column(JSON, nullable=True)
subscribes: Mapped[list["Subscribe"]] = relationship(back_populates="user")
@@ -0,0 +1,31 @@
"""add user_target
Revision ID: 632b8086bc2b
Revises: aceef470d69c
Create Date: 2023-03-20 00:39:30.199915
"""
import sqlalchemy as sa
from alembic import op
# revision identifiers, used by Alembic.
revision = "632b8086bc2b"
down_revision = "aceef470d69c"
branch_labels = None
depends_on = None
def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table("nonebot_bison_user", schema=None) as batch_op:
batch_op.add_column(sa.Column("user_target", sa.JSON(), nullable=True))
# ### end Alembic commands ###
def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table("nonebot_bison_user", schema=None) as batch_op:
batch_op.drop_column("user_target")
# ### end Alembic commands ###
@@ -0,0 +1,51 @@
"""map user
Revision ID: a5466912fad0
Revises: 632b8086bc2b
Create Date: 2023-03-20 01:14:42.623789
"""
import sqlalchemy as sa
from alembic import op
from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import Session
# revision identifiers, used by Alembic.
revision = "a5466912fad0"
down_revision = "632b8086bc2b"
branch_labels = None
depends_on = None
def upgrade() -> None:
Base = automap_base()
Base.prepare(op.get_bind())
User = Base.classes.nonebot_bison_user
with Session(op.get_bind()) as sess:
users = sess.scalars(sa.select(User)).all()
for user in users:
if user.type == "group":
user.user_target = {"platform_type": "QQ Group", "group_id": user.uid}
elif user.type == "private":
user.user_target = {"platform_type": "QQ Private", "user_id": user.uid}
else:
sess.delete(user)
sess.add_all(users)
sess.commit()
def downgrade() -> None:
Base = automap_base()
Base.prepare(op.get_bind())
User = Base.classes.nonebot_bison_user
with Session(op.get_bind()) as sess:
users = sess.scalars(sa.select(User)).all()
for user in users:
if user.user_target["platform_type"] == "QQ Group":
user.uid = user.user_target["group_id"]
user.type = "group"
else:
user.uid = user.user_target["user_id"]
user.type = "private"
sess.add_all(users)
sess.commit()