/
Dmitry-F
/
cbt_tool
Обзор
Документация
Войти
/
Dmitry-F
/
cbt_tool
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
bin/session_audit
261 строка
11 KB
Dmitriy-Filatov
🧹 ФАЗА 2: Финальная синхронизация перед починкой сессий
13 мар 2026, 18:26
13 мар 2026, 18:26
78e115d
Код
Авторство
О чём код?
#!/bin/bash echo "==============================================" echo "🔍 АУДИТ СОЗДАНИЯ СЕССИИ (от кнопки до базы)" echo "==============================================" echo "" # Создаём временную папку REPORT_DIR="/tmp/cbt_session_audit_$(date +%s)" mkdir -p "$REPORT_DIR" REPORT_FILE="$REPORT_DIR/session_audit.txt" # ========================================= # 1. ПРОВЕРКА КНОПКИ В ЛЕВОЙ ПАНЕЛИ # ========================================= echo "🔹 1. КНОПКА «НОВАЯ СЕССИЯ» В ЛЕВОЙ ПАНЕЛИ" >> "$REPORT_FILE" echo "----------------------------------------" >> "$REPORT_FILE" LEFT_PANEL="app/views/clients/show.html.erb" if [ -f "$LEFT_PANEL" ]; then # Проверяем наличие кнопки if grep -q "Новая сессия" "$LEFT_PANEL"; then echo "✅ Кнопка 'Новая сессия' найдена" >> "$REPORT_FILE" # Проверяем путь if grep -q "new_client_session_path" "$LEFT_PANEL"; then echo "✅ Путь new_client_session_path(@client) корректен" >> "$REPORT_FILE" else echo "❌ Проблема с путём в кнопке" >> "$REPORT_FILE" fi # Проверяем Turbo Frame if grep -q "turbo_frame: \"active_module\"" "$LEFT_PANEL"; then echo "✅ Turbo Frame атрибут правильный (active_module)" >> "$REPORT_FILE" else echo "❌ Отсутствует или неправильный turbo_frame" >> "$REPORT_FILE" fi else echo "❌ Кнопка 'Новая сессия' НЕ НАЙДЕНА" >> "$REPORT_FILE" fi else echo "❌ Файл левой панели не найден" >> "$REPORT_FILE" fi echo "" >> "$REPORT_FILE" # ========================================= # 2. ПРОВЕРКА ФОРМЫ NEW # ========================================= echo "🔹 2. ФОРМА СОЗДАНИЯ СЕССИИ (new.html.erb)" >> "$REPORT_FILE" echo "----------------------------------------" >> "$REPORT_FILE" NEW_FORM="app/views/sessions/new.html.erb" if [ -f "$NEW_FORM" ]; then echo "✅ Файл new.html.erb существует" >> "$REPORT_FILE" # Проверяем Turbo Frame if grep -q "turbo_frame_tag \"active_module\"" "$NEW_FORM"; then echo "✅ Форма обёрнута в правильный Turbo Frame" >> "$REPORT_FILE" else echo "❌ Отсутствует обёртка turbo_frame_tag" >> "$REPORT_FILE" fi # Проверяем метод отправки if grep -q "form_with.*data:.*turbo_frame: \"active_module\"" "$NEW_FORM"; then echo "✅ Форма отправляется в тот же фрейм" >> "$REPORT_FILE" else echo "❌ Неправильные data-атрибуты в форме" >> "$REPORT_FILE" fi # Проверяем наличие полей for field in topic notes; do if grep -q "f\.text_\(field\|area\)\s*:$field" "$NEW_FORM"; then echo "✅ Поле '$field' присутствует" >> "$REPORT_FILE" else echo "❌ Поле '$field' отсутствует" >> "$REPORT_FILE" fi done else echo "❌ Файл new.html.erb НЕ СУЩЕСТВУЕТ" >> "$REPORT_FILE" fi echo "" >> "$REPORT_FILE" # ========================================= # 3. ПРОВЕРКА КОНТРОЛЛЕРА # ========================================= echo "🔹 3. КОНТРОЛЛЕР СЕССИЙ" >> "$REPORT_FILE" echo "----------------------------------------" >> "$REPORT_FILE" CONTROLLER="app/controllers/sessions_controller.rb" if [ -f "$CONTROLLER" ]; then echo "✅ Контроллер существует" >> "$REPORT_FILE" # Проверяем before_action if grep -q "before_action.*set_client" "$CONTROLLER"; then echo "✅ before_action :set_client присутствует" >> "$REPORT_FILE" else echo "❌ Отсутствует before_action :set_client" >> "$REPORT_FILE" fi # Проверяем метод set_client if grep -q "def set_client.*Client.find(params\[:client_id\])" "$CONTROLLER"; then echo "✅ set_client правильно находит клиента" >> "$REPORT_FILE" else echo "❌ set_client работает неправильно" >> "$REPORT_FILE" fi # Проверяем метод create CREATE_BLOCK=$(grep -A20 "def create" "$CONTROLLER") echo "$CREATE_BLOCK" > "$REPORT_DIR/create_block.txt" if grep -q "@session.therapist = Current.therapist" "$REPORT_DIR/create_block.txt"; then echo "✅ therapist присваивается явно" >> "$REPORT_FILE" else echo "❌ therapist НЕ присваивается (будет nil)" >> "$REPORT_FILE" fi if grep -q "redirect_to client_sessions_path" "$REPORT_DIR/create_block.txt"; then echo "✅ Редирект на список сессий" >> "$REPORT_FILE" else echo "❌ Неправильный редирект" >> "$REPORT_FILE" fi if grep -q "render :new, status: :unprocessable_entity" "$REPORT_DIR/create_block.txt"; then echo "✅ Обработка ошибок валидации" >> "$REPORT_FILE" else echo "❌ Отсутствует обработка ошибок" >> "$REPORT_FILE" fi # Проверяем strong parameters if grep -q "params\.require(:session).permit" "$CONTROLLER"; then echo "✅ Strong parameters настроены" >> "$REPORT_FILE" else echo "❌ Strong parameters отсутствуют" >> "$REPORT_FILE" fi else echo "❌ Контроллер НЕ НАЙДЕН" >> "$REPORT_FILE" fi echo "" >> "$REPORT_FILE" # ========================================= # 4. ПРОВЕРКА МОДЕЛИ # ========================================= echo "🔹 4. МОДЕЛЬ SESSION" >> "$REPORT_FILE" echo "----------------------------------------" >> "$REPORT_FILE" MODEL="app/models/session.rb" if [ -f "$MODEL" ]; then echo "✅ Модель существует" >> "$REPORT_FILE" # Проверяем ассоциации if grep -q "belongs_to :client" "$MODEL"; then echo "✅ belongs_to :client присутствует" >> "$REPORT_FILE" else echo "❌ Отсутствует belongs_to :client" >> "$REPORT_FILE" fi if grep -q "belongs_to :therapist" "$MODEL"; then echo "✅ belongs_to :therapist присутствует" >> "$REPORT_FILE" else echo "❌ Отсутствует belongs_to :therapist" >> "$REPORT_FILE" fi # Проверяем валидации if grep -q "validates :session_date, presence: true" "$MODEL"; then echo "✅ Валидация session_date есть" >> "$REPORT_FILE" else echo "❌ Нет валидации session_date" >> "$REPORT_FILE" fi if grep -q "validates :topic, presence: true" "$MODEL"; then echo "✅ Валидация topic есть" >> "$REPORT_FILE" else echo "❌ Нет валидации topic" >> "$REPORT_FILE" fi # Проверяем default_scope if grep -q "default_scope.*where(therapist_id:" "$MODEL"; then echo "✅ default_scope по therapist_id есть" >> "$REPORT_FILE" echo " ⚠️ Важно: therapist должен быть присвоен явно" >> "$REPORT_FILE" else echo "⚠️ default_scope отсутствует (не критично)" >> "$REPORT_FILE" fi else echo "❌ Модель НЕ НАЙДЕНА" >> "$REPORT_FILE" fi echo "" >> "$REPORT_FILE" # ========================================= # 5. ПРОВЕРКА ЛЕНТЫ ПОСЛЕ СОЗДАНИЯ # ========================================= echo "🔹 5. ОТОБРАЖЕНИЕ В ЛЕНТЕ" >> "$REPORT_FILE" echo "----------------------------------------" >> "$REPORT_FILE" if [ -f "$LEFT_PANEL" ]; then if grep -q "Последние сессии" "$LEFT_PANEL"; then echo "✅ Блок 'Последние сессии' существует" >> "$REPORT_FILE" # Проверяем, что карточки сессий рендерятся if grep -q "@client.sessions.order.*limit" "$LEFT_PANEL"; then echo "✅ Запрос на последние 3 сессии есть" >> "$REPORT_FILE" else echo "⚠️ Может не отображать последние сессии" >> "$REPORT_FILE" fi else echo "❌ Блок 'Последние сессии' не найден" >> "$REPORT_FILE" fi fi echo "" >> "$REPORT_FILE" # ========================================= # 6. РЕАЛЬНАЯ ПРОВЕРКА (если запущено с --test) # ========================================= if [ "$1" == "--test" ]; then echo "🧪 6. РЕАЛЬНЫЙ ТЕСТ (требуется сервер)" >> "$REPORT_FILE" echo "----------------------------------------" >> "$REPORT_FILE" echo "Для ручной проверки:" >> "$REPORT_FILE" echo "1. Открой http://localhost:3000/clients/1" >> "$REPORT_FILE" echo "2. Нажми 'Новая сессия'" >> "$REPORT_FILE" echo "3. Заполни тему и нажми 'Создать'" >> "$REPORT_FILE" echo "4. Проверь в логе (tail -f log/development.log):" >> "$REPORT_FILE" echo " - INSERT INTO \"sessions\" ..." >> "$REPORT_FILE" echo " - Redirected to ..." >> "$REPORT_FILE" echo "5. Проверь в базе после теста:" >> "$REPORT_FILE" echo " rails c" >> "$REPORT_FILE" echo " client = Client.find(1)" >> "$REPORT_FILE" echo " client.sessions.last" >> "$REPORT_FILE" fi # ========================================= # 7. РЕКОМЕНДАЦИИ # ========================================= echo "" >> "$REPORT_FILE" echo "💡 РЕКОМЕНДАЦИИ:" >> "$REPORT_FILE" echo "----------------------------------------" >> "$REPORT_FILE" if grep -q "❌" "$REPORT_FILE"; then echo "🔴 Найдены критические ошибки. Исправь их по списку выше." >> "$REPORT_FILE" else echo "🟢 Все проверки пройдены. Если сессии не создаются:" >> "$REPORT_FILE" echo " 1. Проверь, что Current.therapist установлен (ты залогинен)" >> "$REPORT_FILE" echo " 2. Посмотри в логе реальный SQL-запрос при создании" >> "$REPORT_FILE" echo " 3. Проверь валидации в модели (no_overlapping_sessions)" >> "$REPORT_FILE" fi # ========================================= # 8. КОПИРОВАНИЕ В БУФЕР # ========================================= cat "$REPORT_FILE" | pbcopy echo "" echo "✅ ГОТОВО! Отчёт скопирован в буфер обмена (Cmd+V)" echo "📊 Краткий итог:" grep -E "✅|❌|⚠️|🔴|🟢" "$REPORT_FILE" | head -20 echo "" echo "🔍 Для реального теста запусти: ./bin/session_audit --test" echo ""