Skip to content

Latest commit

 

History

History
251 lines (196 loc) · 10.1 KB

File metadata and controls

251 lines (196 loc) · 10.1 KB

✅ Stellar PTW - Production Ready Checklist

🎉 Что было сделано

1. ✅ Установлены зависимости

  • @supabase/supabase-js - клиент для работы с Supabase

2. ✅ Создана структура базы данных

  • Файл: supabase/migrations/001_initial_schema.sql

  • Таблицы:

    • user_profiles - профили пользователей с ролями (user/admin)
    • departments - отделы компании
    • personnel - сотрудники
    • permits - наряды-допуски
    • announcements - информационные объявления
    • faq - часто задаваемые вопросы
    • combined_work_log - журнал совмещенных работ
  • Безопасность:

    • ✅ Row Level Security (RLS) на всех таблицах
    • ✅ Политики: все читают, только админы изменяют
    • ✅ Автоматическое обновление updated_at
    • ✅ Автоматическое создание профиля при регистрации

3. ✅ Создан Supabase клиент

  • Файл: src/lib/supabase.ts

  • Что внутри:

    • Клиент createClient<Database> с graceful fallback на null
    • Хелперы auth.signIn/signUp/signOut, getCurrentUser, isAdmin, onAuthStateChange
    • Экспорт isSupabaseAvailable() для быстрых проверок
  • Текущее использование:

    • UI автоматически переключается на Supabase для чтения/записи данных, если заданы переменные среды
    • Модальное окно логина пока работает по паролям 123/admin123; email/password аутентификация готова в коде, но не подключена к интерфейсу

4. ✅ Созданы TypeScript типы

  • Файл: src/lib/database.types.ts
  • Типы для всех таблиц:
    • Row (чтение)
    • Insert (создание)
    • Update (обновление)

5. ✅ Созданы Store'ы для работы с данными

  • Файлы:

    • src/stores/personnel.store.ts - сотрудники
    • src/stores/departments.store.ts - отделы
    • src/stores/permits.store.ts - наряды-допуски
  • Методы:

    • getAll() - получить все
    • getById() - получить по ID
    • create() - создать
    • update() - обновить
    • delete() - удалить
    • bulkCreate() - массовое создание

6. ✅ Настроены Environment Variables

  • Файлы:

    • .env - локальные переменные (в gitignore)
    • .env.example - пример для других разработчиков
  • Переменные:

    • VITE_SUPABASE_URL - URL проекта Supabase
    • VITE_SUPABASE_ANON_KEY - публичный ключ API
    • VITE_APP_NAME - название приложения
    • VITE_APP_VERSION - версия приложения

7. ✅ Создана документация

  • SUPABASE_SETUP.md - пошаговая настройка Supabase
  • DEPLOY_PRODUCTION.md - деплой на Netlify
  • netlify.toml - конфигурация Netlify

8. ✅ Безопасность

  • .env в .gitignore
  • Security headers в netlify.toml
  • RLS политики в базе данных
  • Валидация прав доступа

🚀 Что нужно сделать ДО запуска

1. Настроить Supabase (10 минут)

Следуйте инструкции в SUPABASE_SETUP.md:

  1. ✅ Создать проект на supabase.com
  2. ✅ Выполнить SQL миграцию
  3. ✅ Получить API ключи
  4. ✅ Заполнить .env файл
  5. (Опционально) Создать пользователей в Supabase Auth, если планируете переключить UI на email/parolь

2. Локальное тестирование (5 минут)

```bash

Убедиться что .env заполнен

cat .env

Запустить приложение

npm run dev

Открыть http://localhost:5173

Проверить вход через "Админ" (123) и Super Admin (admin123)

```

3. Деплой на Netlify (5 минут)

Следуйте инструкции в DEPLOY_PRODUCTION.md:

  1. ✅ Push в GitHub
  2. ✅ Подключить к Netlify
  3. ✅ Добавить environment variables
  4. ✅ Deploy!

🔄 Миграция данных (опционально)

Если у вас уже есть данные в текущем демо (localStorage):

Вариант 1: Ручной перенос

  1. Откройте демо сайт
  2. Экспортируйте данные (кнопка "Экспорт")
  3. Откройте production сайт
  4. Импортируйте данные (кнопка "Импорт")

Вариант 2: Через консоль браузера

```javascript // На демо сайте (F12 → Console) const data = { personnel: JSON.parse(localStorage.getItem('ptw-persons') || '[]'), departments: JSON.parse(localStorage.getItem('ptw-departments') || '[]'), faqs: JSON.parse(localStorage.getItem('ptw-faqs') || '[]') }; console.log(JSON.stringify(data)); // Скопировать вывод

// На production сайте через Supabase SQL Editor // Вставить данные используя INSERT INTO ```


🎯 Следующие шаги (интеграция в App.tsx)

Сейчас приложение работает в гибридном режиме:

  • Если переменные Supabase не заданы → используется useKV (localStorage/Spark KV)
  • Если переменные заданы → автоматически включаются Supabase stores и синхронизация

Что можно улучшить дальше

  • Включить email-пароли из Supabase Auth и заменить клиентские пароли
  • Добавить UI для управления пользователями (приглашения, сброс пароля)
  • Расширить тесты для Supabase-режима (e2e)
  • Добавить миграцию данных из localStorage в Supabase через CLI/функцию

📋 Checklist перед Production

Supabase

  • Проект создан
  • SQL миграция выполнена
  • Таблицы созданы
  • RLS политики работают
  • (Опционально) Созданы пользователи в Supabase Auth
  • Проверен доступ из приложения в Supabase-режиме (данные читаются/пишутся)

Environment

  • .env файл заполнен
  • VITE_SUPABASE_URL правильный
  • VITE_SUPABASE_ANON_KEY правильный
  • .env в .gitignore

Локальное тестирование

  • npm run dev запускается
  • Вход через "Админ"/"Супер-админ" работает
  • Данные загружаются
  • CRUD операции работают
  • RLS блокирует обычных пользователей

Netlify

  • Репозиторий на GitHub
  • Подключен к Netlify
  • Environment variables добавлены
  • Build проходит успешно
  • Сайт открывается
  • HTTPS работает

Безопасность

  • Пароли в LoginDialog.tsx обновлены под клиента
  • .env не в Git
  • CORS настроен в Supabase
  • Домен в Supabase Allowed URLs
  • Security headers работают

Данные

  • Отделы созданы
  • Тестовые сотрудники добавлены
  • FAQ заполнен
  • Тестовый наряд создан

🎉 Итого

Готово к использованию:

  • ✅ База данных в Supabase (по желанию)
  • ✅ Локальные пароли (123 / admin123) для быстрого доступа
  • ✅ Row Level Security
  • ✅ TypeScript типы
  • ✅ Store'ы для работы с данными
  • ✅ Конфигурация для Netlify
  • ✅ Документация

Осталось:

  • 🔧 Настроить Supabase (10 мин) или оставить демо
  • 🔧 (Опционально) Подключить email/пароли из Supabase Auth
  • 🔧 Задеплоить на Netlify (5 мин)
  • 🔧 Протестировать

💡 Преимущества этого решения

Было (демо):

  • ❌ Пароли в коде (123, 12345)
  • ❌ Данные в localStorage (теряются)
  • ❌ Нет настоящей безопасности
  • ❌ Нельзя работать с разных устройств
  • ❌ Нет синхронизации

Стало (production):

  • ✅ Данные в PostgreSQL (Supabase)
  • ✅ Row Level Security (админы vs пользователи)
  • ✅ Работа с любого устройства
  • ✅ Реальное время синхронизация
  • ✅ Бесплатно для старта
  • ✅ Легко масштабировать
  • ⚠️ Аутентификация пока по кодовым паролям (email/пароли можно включить позже)

📞 Если нужна помощь

Скажите что нужно:

  1. "Интегрируй Supabase в App.tsx" - я обновлю код
  2. "Создай hook для данных" - создам удобный useSupabaseData
  3. "Помоги настроить Supabase" - пошаговая помощь
  4. "Протестируй деплой" - проверю что все работает

Готово к продакшену! 🚀