Newer
Older
book-metadata-service / src / main / java / ru / mcs / metadatabook / service / ApiKeyService.java
package ru.mcs.metadatabook.service;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import ru.mcs.metadatabook.entity.ApiKey;
import ru.mcs.metadatabook.repository.ApiKeyRepository;

/**
 * Проверка API-ключа для публичного /api/v1/books. Минимальная реализация:
 * ключ хранится в таблице api_keys (см. V4 миграцию), без хеширования и rate-limit.
 * Ужесточить перед реальным внешним использованием.
 */
@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class ApiKeyService {

    private final ApiKeyRepository apiKeyRepository;

    public Integer resolveOrgIdOrThrow(String apiKey) {
        if (apiKey == null || apiKey.isBlank()) {
            throw new SecurityException("apiKey is required");
        }
        ApiKey key = apiKeyRepository.findByKeyValueAndIsActiveTrue(apiKey)
                .orElseThrow(() -> new SecurityException("Invalid or inactive apiKey"));
        return key.getOrgId();
    }
}