"""Repository mixins and base classes for v2."""

from notora.v2.repositories.base import (
    Repository,
    RepositoryProtocol,
    SoftDeleteRepository,
    SoftDeleteRepositoryProtocol,
)
from notora.v2.repositories.config import RepoConfig
from notora.v2.repositories.factory import build_repository
from notora.v2.repositories.mixins import (
    CountableMixin,
    CreateMixin,
    CreateOrSkipMixin,
    DeleteMixin,
    FilterableMixin,
    ListableMixin,
    LoadOptionsMixin,
    OrderableMixin,
    PrimaryKeyMixin,
    RetrievableMixin,
    SelectableMixin,
    SoftDeleteMixin,
    UpdateMixin,
    UpsertMixin,
)
from notora.v2.repositories.params import PaginationParams, QueryParams
from notora.v2.repositories.query_dsl import (
    FilterField,
    FilterOperator,
    QueryInput,
    SortDirection,
    SortField,
    build_query_params,
    make_query_params_dependency,
)
from notora.v2.repositories.types import (
    DEFAULT_LIMIT,
    DefaultLimit,
    FilterClause,
    FilterFactory,
    FilterSpec,
    OptionFactory,
    OptionSpec,
    OrderClause,
    OrderFactory,
    OrderSpec,
    SupportsOptions,
    SupportsWhere,
)

__all__ = [
    'DEFAULT_LIMIT',
    'CountableMixin',
    'CreateMixin',
    'CreateOrSkipMixin',
    'DefaultLimit',
    'DeleteMixin',
    'FilterClause',
    'FilterFactory',
    'FilterField',
    'FilterOperator',
    'FilterSpec',
    'FilterableMixin',
    'ListableMixin',
    'LoadOptionsMixin',
    'OptionFactory',
    'OptionSpec',
    'OrderClause',
    'OrderFactory',
    'OrderSpec',
    'OrderableMixin',
    'PaginationParams',
    'PrimaryKeyMixin',
    'QueryInput',
    'QueryParams',
    'RepoConfig',
    'Repository',
    'RepositoryProtocol',
    'RetrievableMixin',
    'SelectableMixin',
    'SoftDeleteMixin',
    'SoftDeleteRepository',
    'SoftDeleteRepositoryProtocol',
    'SortDirection',
    'SortField',
    'SupportsOptions',
    'SupportsWhere',
    'UpdateMixin',
    'UpsertMixin',
    'build_query_params',
    'build_repository',
    'make_query_params_dependency',
]
