* SPDX-License-Identifier: AGPL-3.0-or-later */ namespace KTXF\Mail\Service; use KTXF\Mail\Entity\EntityBaseInterface; use KTXF\Mail\Entity\EntityMutableInterface; use KTXF\Resource\Identifier\CollectionIdentifier; use KTXF\Resource\Identifier\EntityIdentifier; /** * Mail Service Entity Mutable Interface * * Optional interface for services that support entity CRUD operations. * Provides entity creation, modification, deletion, copying, moving, and flag management. * * @since 2025.05.01 */ interface ServiceEntityMutableInterface extends ServiceBaseInterface { public const CAPABILITY_ENTITY_CREATE = 'EntityCreate'; public const CAPABILITY_ENTITY_MODIFY = 'EntityModify'; public const CAPABILITY_ENTITY_DELETE = 'EntityDelete'; public const CAPABILITY_ENTITY_COPY = 'EntityCopy'; public const CAPABILITY_ENTITY_MOVE = 'EntityMove'; /** * Creates a fresh entity instance for composition * * @since 2025.05.01 * * @return EntityMutableInterface Fresh entity object */ public function entityFresh(): EntityMutableInterface; /** * Creates/imports an entity into a collection * * @since 2025.05.01 * * @param string|int $collection collection identifier * @param EntityMutableInterface $entity Entity data * @param array $options additional options * * @return EntityBaseInterface Created entity */ public function entityCreate(string|int $collection, EntityMutableInterface $entity, array $options = []): EntityBaseInterface; /** * Modifies an existing entity * * @since 2025.05.01 * * @param string|int $collection Collection identifier * @param string|int $identifier Entity identifier * @param EntityMutableInterface $entity Entity data * * @return EntityBaseInterface Modified entity */ public function entityModify(string|int $collection, string|int $identifier, EntityMutableInterface $entity): EntityBaseInterface; /** * Deletes entities * * @since 2026.04.01 * * @param EntityIdentifier ...$identifiers Source entities to delete * * @return array Results keyed by source entity identifier */ public function entityDelete(EntityIdentifier ...$identifiers): array; /** * Copies entities to another collection * * @since 2025.05.01 * * @param CollectionIdentifier $target Target collection identifier * @param EntityIdentifier ...$identifiers Source entities to copy * * @return array Results keyed by source entity identifier */ public function entityCopy(CollectionIdentifier $target, EntityIdentifier ...$identifiers): array; /** * Moves entities to another collection * * @since 2025.05.01 * * @param CollectionIdentifier $target Target collection identifier * @param EntityIdentifier ...$identifiers Source entities to move * * @return array Results keyed by source entity identifier */ public function entityMove(CollectionIdentifier $target, EntityIdentifier ...$identifiers): array; }