OwnershipVerifier.java

package com.yumu.noveltranslator.util;

import org.springframework.stereotype.Service;

import java.util.Optional;
import java.util.function.Function;

/**
 * Verifies entity ownership by userId.
 */
@Service
public class OwnershipVerifier {

    /**
     * Verify that an entity belongs to the given user.
     * Returns the entity if verified, empty otherwise.
     *
     * @param entityId    the entity ID to look up
     * @param userId      the expected owner user ID
     * @param loader      function to load the entity by ID
     * @param userIdExtractor function to extract userId from the entity
     * @return Optional containing the entity if owned by user, empty otherwise
     */
    public <T> Optional<T> verifyAndGet(Long entityId, Long userId,
                                          Function<Long, T> loader,
                                          Function<T, Long> userIdExtractor) {
        T entity = loader.apply(entityId);
        if (entity == null) {
            return Optional.empty();
        }
        Long entityUserId = userIdExtractor.apply(entity);
        if (!userId.equals(entityUserId)) {
            return Optional.empty();
        }
        return Optional.of(entity);
    }
}