migrate user rating; remove unused user column

This commit is contained in:
knst-kotov 2021-12-08 13:29:04 +03:00
parent 1c38d51113
commit 8092d8a262
4 changed files with 29 additions and 28 deletions

View File

@ -5,6 +5,7 @@ import base64
import re
import frontmatter
from migration.tables.users import migrate as migrateUser
from migration.tables.users import migrate_2stage as migrateUser_2stage
from migration.tables.content_items import get_metadata, migrate as migrateShout
from migration.tables.content_item_categories import migrate as migrateCategory
from migration.tables.tags import migrate as migrateTag
@ -48,6 +49,7 @@ def users(users_by_oid, users_by_slug, users_data):
if len(sys.argv) > 2: limit = int(sys.argv[2])
print('migrating %d users...' % limit)
counter = 0
id_map = {}
for entry in users_data:
oid = entry['_id']
user = migrateUser(entry)
@ -59,8 +61,10 @@ def users(users_by_oid, users_by_slug, users_data):
del user['username']
del user['email']
users_by_slug[user['slug']] = user # public
id_map[user['old_id']] = user['id']
counter += 1
export_authors = dict(sorted(users_by_slug.items(), key=lambda item: item[1]['rating'])[-10:])
for entry in users_data:
migrateUser_2stage(entry, id_map)
try:
open('migration/data/users.old_id.json', 'w').write(json.dumps(users_by_oid, cls=DateTimeEncoder)) # NOTE: by old_id
open('migration/data/users.slug.json', 'w').write(json.dumps(users_by_slug, cls=DateTimeEncoder)) # NOTE: by slug

View File

@ -4,9 +4,7 @@ from dateutil.parser import parse
from migration.html2text import html2text
from orm.base import local_session
counter = 0
def migrate(entry, limit=668):
def migrate(entry):
'''
type User {
@ -21,7 +19,6 @@ def migrate(entry, limit=668):
emailConfirmed: Boolean # should contain all emails too
id: Int!
muted: Boolean
rating: Int
roles: [Role]
updatedAt: DateTime
wasOnlineAt: DateTime
@ -40,7 +37,6 @@ def migrate(entry, limit=668):
res['wasOnlineAt'] = parse(entry.get('loggedInAt', entry['createdAt']))
res['emailConfirmed'] = entry['emails'][0]['verified']
res['createdAt'] = parse(entry['createdAt'])
res['rating'] = entry['rating'] # number
res['roles'] = [] # entry['roles'] # roles by community
res['ratings'] = [] # entry['ratings']
res['notifications'] = []
@ -89,22 +85,23 @@ def migrate(entry, limit=668):
old = res['old_id']
user = User.create(**res.copy())
res['id'] = user.id
res['ratings'] = []
for user_rating_old in entry.get('ratings',[]):
with local_session() as session:
rater = session.query(User).filter(old == user_rating_old['createdBy']).first()
if rater:
user_rating_dict = {
'value': user_rating_old['value'],
'rater_id': rater.id,
'user_id': user.id
}
cts = user_rating_old.get('createdAt')
if cts: user_rating_dict['createdAt'] = date_parse(cts)
try:
user_rating = UserRating.create(**user_rating_dict)
res['ratings'].append(user_rating_dict)
except Exception as e:
print(comment_rating_dict)
raise e
return res
def migrate_2stage(entry, id_map):
for rating_entry in entry.get('ratings',[]):
rater_old_id = rating_entry['createdBy']
rater_id = id_map.get(rater_old_id)
if not rater_id:
continue
old_id = entry['_id']
user_rating_dict = {
'value': rating_entry['value'],
'rater_id': rater_id,
'user_id': id_map.get(old_id)
}
with local_session() as session:
try:
user_rating = UserRating.create(**user_rating_dict)
except Exception as e:
print(e)

View File

@ -49,12 +49,12 @@ class User(Base):
bio: str = Column(String, nullable=True, comment="Bio")
userpic: str = Column(String, nullable=True, comment="Userpic")
name: str = Column(String, nullable=True, comment="Display name")
rating: int = Column(Integer, nullable=True, comment="Rating")
slug: str = Column(String, unique=True, comment="User's slug")
muted: bool = Column(Boolean, default=False)
emailConfirmed: bool = Column(Boolean, default=False)
createdAt: DateTime = Column(DateTime, nullable=False, default = datetime.now, comment="Created at")
wasOnlineAt: DateTime = Column(DateTime, nullable=False, default = datetime.now, comment="Was online at")
deletedAt: DateTime = Column(DateTime, nullable=True, comment="Deleted at")
links: JSONType = Column(JSONType, nullable=True, comment="Links")
oauth: str = Column(String, nullable=True)
notifications = relationship(lambda: UserNotifications)

View File

@ -8,7 +8,7 @@ from auth.authorize import Authorize
from auth.identity import Identity
from auth.password import Password
from auth.email import send_confirm_email, send_auth_email
from orm import User
from orm import User, UserStorage
from orm.base import local_session
from resolvers.base import mutation, query
from exceptions import InvalidPassword
@ -40,13 +40,13 @@ async def register(*_, email: str, password: str = ""):
if not password:
user = User.create(**user_dict)
await send_confirm_email(user)
UserStorage.add_user(user)
await UserStorage.add_user(user)
return { "user": user }
user_dict["password"] = Password.encode(password)
user = User.create(**user_dict)
token = await Authorize.authorize(user)
UserStorage.add_user(user)
await UserStorage.add_user(user)
return {"user": user, "token": token }