-- Миграция для создания таблицы processed_tokens
-- Версия: 001
-- Дата: 2026-01-07
-- Описание: Таблица для кэширования обработанных токенов, чтобы избежать повторных запросов к RPC/Explorer API

-- Создание таблицы
CREATE TABLE IF NOT EXISTS processed_tokens (
    -- Автоинкремент ID
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    
    -- Unix timestamp в секундах (дата обработки токена)
    timestamp BIGINT NOT NULL,
    
    -- Адрес контракта токена (lowercase, с 0x префиксом)
    address VARCHAR(42) NOT NULL,
    
    -- Название сети (base, ethereum, arbitrum и т.д.)
    network VARCHAR(50) NOT NULL,
    
    -- Chain ID для дополнительной проверки
    chain_id BIGINT NOT NULL,
    
    -- Был ли токен новым при первой проверке
    is_new BOOLEAN NOT NULL DEFAULT FALSE,
    
    -- Количество транзакций на момент проверки
    total_txs INT NOT NULL DEFAULT 0,
    
    -- Количество добавлений ликвидности
    liquidity_additions INT NOT NULL DEFAULT 0,
    
    -- Источник данных: "rpc", "explorer" или "database"
    data_source VARCHAR(20) NOT NULL DEFAULT 'unknown',
    
    -- Хеш первой обработанной транзакции (с 0x префиксом)
    first_tx_hash VARCHAR(66) NOT NULL,
    
    -- Дата создания записи (автоматически)
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    -- Индекс для быстрого поиска по адресу и сети
    INDEX idx_address_network (address, network),
    
    -- Индекс для быстрого поиска по адресу и chain_id (основной поиск)
    INDEX idx_address_chain_id (address, chain_id),
    
    -- Индекс для фильтрации по времени
    INDEX idx_timestamp (timestamp),
    
    -- Индекс для поиска новых токенов
    INDEX idx_is_new (is_new),
    
    -- Уникальный ключ: один токен + chain_id + первая транзакция
    -- Это предотвращает дублирование записей
    UNIQUE KEY unique_token (address, chain_id, first_tx_hash)
    
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='Кэш обработанных токенов для оптимизации RPC/Explorer запросов';

-- Создание индексов для статистики
CREATE INDEX idx_created_at ON processed_tokens(created_at);
CREATE INDEX idx_network_is_new ON processed_tokens(network, is_new);
CREATE INDEX idx_chain_id_is_new ON processed_tokens(chain_id, is_new);

-- Пример запросов для использования таблицы:

-- 1. Проверка, был ли токен обработан ранее
-- SELECT * FROM processed_tokens 
-- WHERE address = '0x...' AND chain_id = 8453 
-- ORDER BY timestamp ASC LIMIT 1;

-- 2. Статистика по сети
-- SELECT 
--     COUNT(*) as total_tokens,
--     SUM(CASE WHEN is_new = TRUE THEN 1 ELSE 0 END) as new_tokens
-- FROM processed_tokens 
-- WHERE chain_id = 8453;

-- 3. Новые токены за последние 24 часа
-- SELECT * FROM processed_tokens 
-- WHERE chain_id = 8453 
--   AND is_new = TRUE 
--   AND timestamp >= UNIX_TIMESTAMP(NOW() - INTERVAL 24 HOUR)
-- ORDER BY timestamp DESC;

-- 4. Очистка старых записей (например, старше 90 дней)
-- DELETE FROM processed_tokens 
-- WHERE timestamp < UNIX_TIMESTAMP(NOW() - INTERVAL 90 DAY);

-- 5. Топ-10 самых активных токенов (по количеству транзакций)
-- SELECT address, network, total_txs, liquidity_additions 
-- FROM processed_tokens 
-- WHERE chain_id = 8453
-- ORDER BY total_txs DESC 
-- LIMIT 10;

