Source code for minos.aggregate.events.repositories.database.factories

from abc import (
    ABC,
    abstractmethod,
)
from collections.abc import (
    Iterable,
)
from datetime import (
    datetime,
)
from typing import (
    Optional,
)
from uuid import (
    UUID,
)

from minos.common import (
    DatabaseOperation,
    DatabaseOperationFactory,
)

from ....actions import (
    Action,
)


[docs]class EventDatabaseOperationFactory(DatabaseOperationFactory, ABC): """Event Database Operation Factory base class."""
[docs] @abstractmethod def build_create(self) -> DatabaseOperation: """Build the database operation to create the event table. :return: A ``DatabaseOperation`` instance.s """
[docs] @abstractmethod def build_submit( self, transaction_uuids: Iterable[UUID], uuid: UUID, action: Action, name: str, version: int, data: bytes, created_at: datetime, transaction_uuid: UUID, lock: Optional[int], **kwargs, ) -> DatabaseOperation: """Build the database operation to submit a row into the event table. :param transaction_uuids: The sequence of nested transaction in on top of the current event's transaction. :param uuid: The identifier of the entity. :param action: The action of the event. :param name: The name of the entity. :param version: The version of the entity :param data: The data of the event. :param created_at: The creation datetime. :param transaction_uuid: The identifier of the transaction. :param lock: The lock identifier. :param kwargs: Additional named arguments. :return: A ``DatabaseOperation`` instance. """
# noinspection PyShadowingBuiltins
[docs] @abstractmethod def build_query( self, uuid: Optional[UUID] = None, name: Optional[str] = None, version: Optional[int] = None, version_lt: Optional[int] = None, version_gt: Optional[int] = None, version_le: Optional[int] = None, version_ge: Optional[int] = None, id: Optional[int] = None, id_lt: Optional[int] = None, id_gt: Optional[int] = None, id_le: Optional[int] = None, id_ge: Optional[int] = None, transaction_uuid: Optional[UUID] = None, transaction_uuid_ne: Optional[UUID] = None, transaction_uuid_in: Optional[tuple[UUID, ...]] = None, **kwargs, ) -> DatabaseOperation: """Build the database operation to select rows. :param uuid: The identifier must be equal to the given value. :param name: The classname must be equal to the given value. :param version: The version must be equal to the given value. :param version_lt: The version must be lower than the given value. :param version_gt: The version must be greater than the given value. :param version_le: The version must be lower or equal to the given value. :param version_ge: The version must be greater or equal to the given value. :param id: The entry identifier must be equal to the given value. :param id_lt: The entry identifier must be lower than the given value. :param id_gt: The entry identifier must be greater than the given value. :param id_le: The entry identifier must be lower or equal to the given value. :param id_ge: The entry identifier must be greater or equal to the given value. :param transaction_uuid: The transaction identifier must be equal to the given value. :param transaction_uuid_ne: The transaction identifier must be distinct of the given value. :param transaction_uuid_in: The destination transaction identifier must be equal to one of the given values. :return: A ``DatabaseOperation`` instance. """
[docs] @abstractmethod def build_query_offset(self) -> DatabaseOperation: """Build the database operation to get the maximum identifier. :return: A ``DatabaseOperation`` instance. """