From b1a82243d3b201c3634cee2b9e95e4ec48bfc6af Mon Sep 17 00:00:00 2001 From: arkohut <39525455+arkohut@users.noreply.github.com> Date: Fri, 4 Oct 2024 17:25:38 +0800 Subject: [PATCH] feat(index): update last scan at when tags or metadata updated --- memos/models.py | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/memos/models.py b/memos/models.py index 72bc91c..7f700f6 100644 --- a/memos/models.py +++ b/memos/models.py @@ -8,9 +8,10 @@ from sqlalchemy import ( ForeignKey, func, Index, + event, ) from datetime import datetime -from sqlalchemy.orm import relationship, DeclarativeBase, Mapped, mapped_column +from sqlalchemy.orm import relationship, DeclarativeBase, Mapped, mapped_column, Session from typing import List from .schemas import MetadataSource, MetadataType from sqlalchemy.exc import OperationalError @@ -94,6 +95,11 @@ class EntityModel(Base): Index("idx_folder_id", "folder_id"), ) + @classmethod + def update_last_scan_at(cls, session: Session, entity: "EntityModel"): + entity.last_scan_at = func.now() + session.add(entity) + class TagModel(Base): __tablename__ = "tags" @@ -216,3 +222,24 @@ def init_default_libraries(session, default_plugins): session.add(library_plugin) session.commit() + + +@event.listens_for(EntityTagModel, "after_insert") +@event.listens_for(EntityTagModel, "after_delete") +def update_entity_last_scan_at_for_tags(mapper, connection, target): + session = Session(bind=connection) + entity = session.query(EntityModel).get(target.entity_id) + if entity: + EntityModel.update_last_scan_at(session, entity) + session.commit() + + +@event.listens_for(EntityMetadataModel, "after_insert") +@event.listens_for(EntityMetadataModel, "after_update") +@event.listens_for(EntityMetadataModel, "after_delete") +def update_entity_last_scan_at_for_metadata(mapper, connection, target): + session = Session(bind=connection) + entity = session.query(EntityModel).get(target.entity_id) + if entity: + EntityModel.update_last_scan_at(session, entity) + session.commit()