# 📋 История версий профиля — v1.10

**Версия:** v1.10
**Дата:** 26 февраля 2026 г.
**Статус:** ✅ Реализовано

---

## 📋 Описание

Система логирования изменений профиля пользователя. Бот автоматически отслеживает изменения никнейма, имени, фамилии, квартиры, телефона. Админ может посмотреть полную историю изменений любого пользователя.

---

## 🎯 Возможности

- ✅ Авто-логирование изменений профиля
- ✅ Отслеживаемые поля: username, first_name, last_name, apartment, phone
- ✅ История изменений с датами
- ✅ Просмотр истории конкретного пользователя
- ✅ Просмотр всех изменений за период
- ✅ История по конкретному полю
- ✅ Статистика изменений

---

## 📱 Команды

### Для администраторов:

| Команда | Описание | Пример |
|---------|----------|--------|
| `/history <user_id> [лимит]` | История профиля пользователя | `/history 123456789 20` |
| `/all_history [дни] [лимит]` | Все изменения за период | `/all_history 7 50` |
| `/field_history <поле> [дни]` | История конкретного поля | `/field_history apartment 7` |
| `/history_stats` | Статистика изменений | `/history_stats` |

---

## 🎯 Отслеживаемые поля

| Поле | Описание | Когда меняется |
|------|----------|----------------|
| **username** | Никнейм (@user) | Пользователь сменил ник |
| **first_name** | Имя | Пользователь сменил имя |
| **last_name** | Фамилия | Пользователь сменил фамилию |
| **apartment** | Квартира | Админ сменил квартиру |
| **phone** | Телефон | Админ сменил телефон |

---

## 🎯 Сценарии использования

### Сценарий 1: История пользователя

**Админ:**
```
/history 123456789
```

**Бот:**
```
📋 История профиля: Иван Иванов (кв. 45)

Показано последних: 5 из 20

1. Никнейм (26.02.2026 15:30)
   ├─ Было: @ivanov_old
   └─ Стало: @ivanov_new

2. Имя (25.02.2026 10:00)
   ├─ Было: Иван
   └─ Стало: Иоанн

3. Квартира (20.02.2026 14:00)
   ├─ Было: 42
   └─ Стало: 45

4. Никнейм (15.02.2026 09:00)
   ├─ Было: пусто
   └─ Стало: @ivanov_old

5. Телефон (10.02.2026 12:00)
   ├─ Было: пусто
   └─ Стало: +7 (999) 123-45-67
```

---

### Сценарий 2: Все изменения за период

**Админ:**
```
/all_history 7 50
```

**Бот:**
```
📋 Все изменения за 7 дн.

Показано: 25 из 50

👤 Иван Иванов (кв. 45) — 3 изм.
   └─ Никнейм: @ivanov_old → @ivanov_new
   └─ Имя: Иван → Иоанн
   └─ Квартира: 42 → 45

👤 Петр Петров (кв. 88) — 2 изм.
   └─ Телефон: пусто → +7 (999) 000-00-00
   └─ Фамилия: Петров → Петров-Водкин

...
```

---

### Сценарий 3: История квартиры

**Админ:**
```
/field_history apartment 30
```

**Бот:**
```
📋 История поля: Квартира

За 30 дн. (15 изм.)

1. Иван Иванов (кв. 45) — 26.02.2026 14:00
   └─ 42 → 45

2. Петр Петров (кв. 88) — 25.02.2026 10:00
   └─ пусто → 88

3. Анна Сидорова (кв. 12) — 20.02.2026 15:00
   └─ 10 → 12
```

---

### Сценарий 4: Статистика

**Админ:**
```
/history_stats
```

**Бот:**
```
📊 Статистика истории профиля

Всего записей: 500
За последние 7 дней: 50

📁 По полям:

• Никнейм: 200
• Имя: 150
• Фамилия: 80
• Квартира: 50
• Телефон: 20
```

---

### Сценарий 5: Детект шпиона по истории

**Админ видит подозрительную активность:**

1. **Проверяет историю:**
   ```
   /history 123456789
   ```

2. **Видит что пользователь сменил:**
   - Никнейм 5 раз за неделю
   - Имя 3 раза
   - Квартиру 2 раза

3. **Делает вывод:**
   - Подозрительная активность
   - Возможно шпион меняет данные чтобы скрыться
   - Проверяет через `/spies`

---

## 🗄️ База данных

### Таблица `profile_history`:
```sql
CREATE TABLE profile_history (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    user_id BIGINT NOT NULL,
    field_name TEXT NOT NULL,      -- username, first_name, last_name...
    old_value TEXT,                -- Старое значение
    new_value TEXT,                -- Новое значение
    changed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(user_id)
)
```

### Индексы:
- `ix_profile_history_user` — по пользователю
- `ix_profile_history_field` — по полю
- `ix_profile_history_time` — по времени

---

## 🧪 Тестирование

### Чек-лист проверки:

#### 1. История пользователя
```bash
# Админ:
/history 123456789
```
- [ ] История отображается
- [ ] Даты верные
- [ ] Старые/новые значения показаны

#### 2. Все изменения
```bash
/all_history 7 50
```
- [ ] Изменения за период показаны
- [ ] Группировка по пользователям

#### 3. История поля
```bash
/field_history apartment 7
```
- [ ] Только изменения квартиры
- [ ] За 7 дней

#### 4. Статистика
```bash
/history_stats
```
- [ ] Общее количество
- [ ] По полям распределено

#### 5. Авто-логирование
```bash
# Пользователь меняет ник
# Бот должен записать в историю
```
- [ ] Изменение записано
- [ ] В логах есть запись

---

## 📁 Изменённые файлы

| Файл | Изменения |
|------|-----------|
| `database/models.py` | Модель ProfileHistory |
| `database/migrate_add_profile_history.py` | Миграция БД |
| `handlers/profile_history.py` | Хендлеры истории |
| `handlers/chat_monitor.py` | Авто-логирование изменений |
| `handlers/__init__.py` | Импорт profile_history_router |
| `main.py` | Регистрация profile_history_router |

---

## 🚀 Как использовать

### Для админа:

1. **Посмотреть историю пользователя:**
   ```
   /history 123456789
   ```

2. **Посмотреть все изменения:**
   ```
   /all_history 7
   ```

3. **Проверить изменения квартиры:**
   ```
   /field_history apartment 30
   ```

4. **Посмотреть статистику:**
   ```
   /history_stats
   ```

---

## 💡 Советы

### Когда использовать:

- ✅ **Подозрение на шпиона** — проверяет историю изменений
- ✅ **Смена квартиры** — кто и когда менял
- ✅ **Детект мультиаккаунтов** — одинаковые изменения у разных аккаунтов
- ✅ **Аудит** — кто что менял

### Ложные срабатывания:

- **Пользователь сменил ник** — нормальное явление
- **Telegram обновил имя** — может меняться автоматически
- **Админ исправил ошибку** — запись в истории будет

### Настройка логирования:

В `handlers/chat_monitor.py`:
```python
# Добавить свои поля для логирования
if user.apartment != new_apartment:
    changes.append(('apartment', user.apartment, new_apartment))
```

---

## 🔧 Отладка

### Посмотреть историю в БД:
```bash
cd /home/matrixhasyou/domovoy_bot
source venv/bin/activate
sqlite3 database/domovoy.db

SELECT user_id, field_name, old_value, new_value, changed_at
FROM profile_history
ORDER BY changed_at DESC
LIMIT 20;
```

### Логи:
```bash
tail -f logs/bot.log | grep -i "Profile change"
```

---

## ✅ Преимущества

| Было | Стало |
|------|-------|
| Не видно кто менял данные | **Полная история** |
| Нет детекта изменений | **Авто-логирование** |
| Не понятно когда сменил | **Даты и время** |
| Нет статистики | **/history_stats** |

---

**История профиля готова! 📋**

*Следующий шаг: тестирование на тестовой группе и фиксация версии v1.10*
