split old and ackee

This commit is contained in:
Alexey Kulikov 2023-08-04 00:31:55 +01:00
parent 41055d8501
commit c717f387ea
3 changed files with 21 additions and 5 deletions

View File

@ -193,7 +193,7 @@ async def migrate(entry, storage):
await content_ratings_to_reactions(entry, shout_dict["slug"]) await content_ratings_to_reactions(entry, shout_dict["slug"])
# shout views # shout views
await ViewedStorage.increment(shout_dict["slug"], amount=entry.get("views", 1)) await ViewedStorage.increment(shout_dict["slug"], amount=entry.get("views", 1), viewer='old-discours')
# del shout_dict['ratings'] # del shout_dict['ratings']
storage["shouts"]["by_oid"][entry["_id"]] = shout_dict storage["shouts"]["by_oid"][entry["_id"]] = shout_dict

View File

@ -1,7 +1,7 @@
from datetime import datetime from datetime import datetime
from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Integer, String, JSON from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Integer, String, JSON
from sqlalchemy.orm import relationship from sqlalchemy.orm import column_property, relationship
from base.orm import Base, local_session from base.orm import Base, local_session
from orm.reaction import Reaction from orm.reaction import Reaction
@ -61,7 +61,11 @@ class Shout(Base):
authors = relationship(lambda: User, secondary=ShoutAuthor.__tablename__) authors = relationship(lambda: User, secondary=ShoutAuthor.__tablename__)
topics = relationship(lambda: Topic, secondary=ShoutTopic.__tablename__) topics = relationship(lambda: Topic, secondary=ShoutTopic.__tablename__)
views = Column(Integer, default=0) # views from the old Discours website
viewsOld = Column(Integer, default=0)
# views from Ackee tracker on the new Discours website
viewsAckee = Column(Integer, default=0)
views = column_property(viewsOld + viewsAckee)
reactions = relationship(lambda: Reaction) reactions = relationship(lambda: Reaction)
# TODO: these field should be used or modified # TODO: these field should be used or modified

View File

@ -156,14 +156,26 @@ class ViewedStorage:
self.by_topics[topic.slug][shout_slug] = self.by_shouts[shout_slug] self.by_topics[topic.slug][shout_slug] = self.by_shouts[shout_slug]
@staticmethod @staticmethod
async def increment(shout_slug, amount=1): async def increment(shout_slug, amount=1, viewer='ackee'):
""" the only way to change views counter """ """ the only way to change views counter """
self = ViewedStorage self = ViewedStorage
async with self.lock: async with self.lock:
# TODO optimize, currenty we execute 1 DB transaction per shout # TODO optimize, currenty we execute 1 DB transaction per shout
with local_session() as session: with local_session() as session:
shout = session.query(Shout).where(Shout.slug == shout_slug).one() shout = session.query(Shout).where(Shout.slug == shout_slug).one()
shout.views += amount if viewer == 'old-discours':
if shout.viewsOld == amount:
print(f"amount: {amount}")
else:
print(f"amount changed: {shout.viewsOld} --> {amount}")
shout.viewsOld = amount
else:
if shout.viewsAckee == amount:
print(f"amount: {amount}")
else:
print(f"amount changed: {shout.viewsAckee} --> {amount}")
shout.viewsAckee = amount
session.commit() session.commit()
# this part is currently unused # this part is currently unused