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

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)