docs: def read(cls, *criteria, **kwargs):
          """
          filter query helper that handles soft delete logic. If your query conditions do not require expressions,
          consider using read_by.
  
          :param criteria: where clause conditions
          :param kwargs: set removed=True if you want soft-deleted rows
          :return: row object generator
          """
          if not kwargs.get('removed', False):
              return cls.query.filter(cls.time_removed == 0, *criteria)
          return cls.query.filter(*criteria)