This commit is contained in:
parent
9da452c2f0
commit
a40eb878be
|
@ -1,4 +1,5 @@
|
||||||
import time
|
import time
|
||||||
|
import asyncio
|
||||||
|
|
||||||
from sqlalchemy import JSON, Boolean, Column, ForeignKey, Integer, String
|
from sqlalchemy import JSON, Boolean, Column, ForeignKey, Integer, String
|
||||||
from sqlalchemy import event, select
|
from sqlalchemy import event, select
|
||||||
|
@ -46,9 +47,9 @@ class Author(Base):
|
||||||
|
|
||||||
@event.listens_for(Author, "after_insert")
|
@event.listens_for(Author, "after_insert")
|
||||||
@event.listens_for(Author, "after_update")
|
@event.listens_for(Author, "after_update")
|
||||||
async def after_author_update(mapper, connection, target):
|
def after_author_update(mapper, connection, target):
|
||||||
redis_key = f"user:{target.user}:author"
|
redis_key = f"user:{target.user}:author"
|
||||||
await redis.execute("HSET", redis_key, **vars(target))
|
asyncio.create_task(redis.execute("HSET", redis_key, **vars(target)))
|
||||||
|
|
||||||
|
|
||||||
async def update_follows_for_user(connection, user_id, entity_type, entity, is_insert):
|
async def update_follows_for_user(connection, user_id, entity_type, entity, is_insert):
|
||||||
|
@ -74,10 +75,9 @@ async def update_follows_for_user(connection, user_id, entity_type, entity, is_i
|
||||||
|
|
||||||
|
|
||||||
async def handle_author_follower_change(connection, author_id, follower_id, is_insert):
|
async def handle_author_follower_change(connection, author_id, follower_id, is_insert):
|
||||||
author = connection.execute(select(Author).filter(Author.id == author_id)).first()
|
async with connection.begin() as conn:
|
||||||
follower = connection.execute(
|
author = await conn.execute(select(Author).filter(Author.id == author_id)).first()
|
||||||
select(Author).filter(Author.id == follower_id)
|
follower = await conn.execute(select(Author).filter(Author.id == follower_id)).first()
|
||||||
).first()
|
|
||||||
if follower and author:
|
if follower and author:
|
||||||
await update_follows_for_user(
|
await update_follows_for_user(
|
||||||
connection, follower.user, "author", author, is_insert
|
connection, follower.user, "author", author, is_insert
|
||||||
|
@ -96,24 +96,24 @@ async def handle_topic_follower_change(connection, topic_id, follower_id, is_ins
|
||||||
|
|
||||||
|
|
||||||
@event.listens_for(TopicFollower, "after_insert")
|
@event.listens_for(TopicFollower, "after_insert")
|
||||||
async def after_topic_follower_insert(mapper, connection, target):
|
def after_topic_follower_insert(mapper, connection, target):
|
||||||
await handle_topic_follower_change(connection, target.topic, target.follower, True)
|
asyncio.create_task(handle_topic_follower_change(connection, target.topic, target.follower, True))
|
||||||
|
|
||||||
|
|
||||||
@event.listens_for(TopicFollower, "after_delete")
|
@event.listens_for(TopicFollower, "after_delete")
|
||||||
async def after_topic_follower_delete(mapper, connection, target):
|
def after_topic_follower_delete(mapper, connection, target):
|
||||||
await handle_topic_follower_change(connection, target.topic, target.follower, False)
|
asyncio.create_task(handle_topic_follower_change(connection, target.topic, target.follower, False))
|
||||||
|
|
||||||
|
|
||||||
@event.listens_for(AuthorFollower, "after_insert")
|
@event.listens_for(AuthorFollower, "after_insert")
|
||||||
async def after_author_follower_insert(mapper, connection, target):
|
def after_author_follower_insert(mapper, connection, target):
|
||||||
await handle_author_follower_change(
|
asyncio.create_task(handle_author_follower_change(
|
||||||
connection, target.author, target.follower, True
|
connection, target.author, target.follower, True
|
||||||
)
|
))
|
||||||
|
|
||||||
|
|
||||||
@event.listens_for(AuthorFollower, "after_delete")
|
@event.listens_for(AuthorFollower, "after_delete")
|
||||||
async def after_author_follower_delete(mapper, connection, target):
|
def after_author_follower_delete(mapper, connection, target):
|
||||||
await handle_author_follower_change(
|
asyncio.create_task(handle_author_follower_change(
|
||||||
connection, target.author, target.follower, False
|
connection, target.author, target.follower, False
|
||||||
)
|
))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user