-- Миграция для создания таблицы purchased_tokens
-- Версия: 002
-- Дата: 2026-01-07
-- Описание: Таблица для хранения информации о покупках и продажах токенов

-- Создание таблицы
CREATE TABLE IF NOT EXISTS purchased_tokens (
    -- Автоинкремент ID
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    
    -- Дата и время покупки/продажи
    date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    
    -- Количество купленных токенов (в наименьших единицах с учетом decimals)
    -- Используем VARCHAR для очень больших чисел, так как MySQL DECIMAL ограничен 65 цифрами
    number_tokens VARCHAR(78) NOT NULL DEFAULT '0',
    
    -- Адрес контракта купленного токена (lowercase, с 0x префиксом)
    purchase_token VARCHAR(42) NOT NULL,
    
    -- Аббревиатура купленного токена (например, USDC, ETH, PEPE)
    token_abbreviation VARCHAR(20) NOT NULL DEFAULT '',
    
    -- Адрес контракта проданного токена (если нативный, то тикет, например ETH, BNB, MATIC)
    sale_token VARCHAR(42) NOT NULL DEFAULT '',
    
    -- Адрес пула (pair) для торговли
    pool VARCHAR(42) NOT NULL DEFAULT '',
    
    -- Цена покупки за 1 токен (в нативной валюте или стейблкоине)
    -- Используем DECIMAL(65,18) - максимальная precision в MySQL
    purchase_price DECIMAL(65, 18) NOT NULL DEFAULT 0,
    
    -- Цена продажи за 1 токен (в нативной валюте или стейблкоине, NULL если еще не продано)
    sale_price DECIMAL(65, 18) DEFAULT NULL,
    
    -- Текущая цена за 1 токен (обновляется отдельным скриптом мониторинга)
    current_price DECIMAL(65, 18) DEFAULT NULL,
    
    -- Потрачено на покупку (в нативной валюте или стейблкоине)
    spent_purchase DECIMAL(65, 18) NOT NULL DEFAULT 0,
    
    -- Заработано при продаже (в нативной валюте или стейблкоине, NULL если еще не продано)
    earned DECIMAL(65, 18) DEFAULT NULL,
    
    -- Статус: 'Куплен' или 'Продан'
    status VARCHAR(20) NOT NULL DEFAULT 'Куплен',
    
    -- Блокчейн сеть (base, ethereum, arbitrum и т.д.)
    network VARCHAR(50) NOT NULL,
    
    -- Дата создания записи (автоматически)
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    -- Дата последнего обновления (автоматически)
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    -- Индекс для быстрого поиска по адресу токена
    INDEX idx_purchase_token (purchase_token),
    
    -- Индекс для поиска по статусу
    INDEX idx_status (status),
    
    -- Индекс для поиска по сети
    INDEX idx_network (network),
    
    -- Индекс для поиска по дате
    INDEX idx_date (date),
    
    -- Индекс для поиска активных позиций (куплено, но не продано)
    INDEX idx_network_status (network, status),
    
    -- Индекс для поиска по пулу
    INDEX idx_pool (pool)
    
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='История покупок и продаж токенов для мониторинга портфеля';

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

-- 1. Все активные позиции (куплено, но не продано)
-- SELECT * FROM purchased_tokens 
-- WHERE status = 'Куплен' AND network = 'base'
-- ORDER BY date DESC;

-- 2. История всех покупок и продаж
-- SELECT * FROM purchased_tokens 
-- WHERE network = 'base'
-- ORDER BY date DESC;

-- 3. Статистика по прибыли/убыткам
-- SELECT 
--     COUNT(*) as total_trades,
--     SUM(spent_purchase) as total_spent,
--     SUM(earned) as total_earned,
--     SUM(earned) - SUM(spent_purchase) as profit_loss
-- FROM purchased_tokens 
-- WHERE network = 'base' AND status = 'Продан';

-- 4. Токены с наибольшей прибылью
-- SELECT 
--     purchase_token,
--     token_abbreviation,
--     SUM(earned - spent_purchase) as profit
-- FROM purchased_tokens 
-- WHERE network = 'base' AND status = 'Продан'
-- GROUP BY purchase_token, token_abbreviation
-- ORDER BY profit DESC
-- LIMIT 10;

-- 5. Обновление текущей цены (для скрипта мониторинга)
-- UPDATE purchased_tokens 
-- SET current_price = ? 
-- WHERE id = ?;

-- 6. Отметить токен как проданный
-- UPDATE purchased_tokens 
-- SET status = 'Продан', 
--     sale_price = ?,
--     earned = ?,
--     updated_at = CURRENT_TIMESTAMP
-- WHERE id = ?;

