# Team Status Board Панель управления статусами команды — внутренний инструмент для отслеживания состояния сотрудников в реальном времени. ## Возможности - ✅ **Просмотр** всех сотрудников команды - ➕ **Добавление** новых сотрудников (имя, должность) - 🔄 **Изменение** статуса в реальном времени без перезагрузки страницы - 🗑️ **Удаление** сотрудников из списка - 🔔 **Уведомления** о выполненных операциях - 📱 **Адаптивный** дизайн ## Стек технологий ### Бэкенд - **Python 3.8+** - **FastAPI** — современный веб-фреймворк - **SQLAlchemy** — ORM для работы с БД - **SQLite** — встроенная база данных - **Uvicorn** — ASGI сервер ### Фронтенд - **React 18** — библиотека UI - **Vite** — сборщик и dev-сервер - **Axios** — HTTP-клиент ### Инфраструктура - **Git** — контроль версий - **Bash** — автоматизация запуска ## Быстрый старт ### Требования - Python 3.8 или выше - Node.js 18 или выше - Bash (WSL2 на Windows, Linux или macOS) ### Запуск ```bash # Клонирование репозитория git clone cd "Team status board" # Запуск (автоматическая установка зависимостей и запуск) ./start.sh ``` После запуска приложение будет доступно по адресам: - **Фронтенд:** http://localhost:3000 - **Бэкенд API:** http://localhost:8000 - **API документация (Swagger):** http://localhost:8000/docs ## API Endpoints | Метод | Endpoint | Описание | Статус-код | |-------|----------|----------|------------| | `GET` | `/api/employees` | Получить всех сотрудников | 200 | | `POST` | `/api/employees` | Добавить сотрудника | 201 | | `PUT` | `/api/employees/{id}/status` | Обновить статус сотрудника | 200 | | `DELETE` | `/api/employees/{id}` | Удалить сотрудника | 204 | ### Примеры запросов **Добавить сотрудника:** ```bash curl -X POST http://localhost:8000/api/employees \ -H "Content-Type: application/json" \ -d '{"name": "Иван Иванов", "position": "Разработчик"}' ``` **Изменить статус:** ```bash curl -X PUT http://localhost:8000/api/employees/1/status \ -H "Content-Type: application/json" \ -d '{"status": "На встрече"}' ``` **Удалить сотрудника:** ```bash curl -X DELETE http://localhost:8000/api/employees/1 ``` ## Доступные статусы | Статус | Описание | Цвет | |--------|----------|------| | 🟢 Online | В сети, доступен | Зеленый | | 🟡 На встрече | Занят на встрече | Желтый | | ⚫ Offline | Не в сети | Серый | | 🔵 В отпуске | В отпуске | Синий | | 🔴 Болеет | На больничном | Красный | ## Структура проекта ``` . ├── backend/ │ ├── main.py # FastAPI приложение + CRUD │ ├── requirements.txt # Python зависимости │ └── team_status.db # SQLite БД (создается автоматически) ├── frontend/ │ ├── src/ │ │ ├── App.jsx # Основной React компонент │ │ ├── App.css # Стили компонента │ │ ├── main.jsx # Точка входа React │ │ └── index.css # Глобальные стили │ ├── index.html # HTML шаблон │ ├── package.json # Node.js зависимости │ └── vite.config.js # Конфигурация Vite ├── .gitignore # Игнорируемые файлы ├── start.sh # Скрипт автозапуска └── README.md # Документация ``` ## Разработка ### Ручной запуск бэкенда ```bash cd backend python -m venv venv source venv/bin/activate # или venv\Scripts\activate на Windows pip install -r requirements.txt python main.py ``` ### Ручной запуск фронтенда ```bash cd frontend npm install npm run dev ``` ## Git-гигиена Проект использует `.gitignore` для исключения: - `node_modules/` — зависимости Node.js - `venv/` — виртуальное окружение Python - `__pycache__/` — кэш Python - `*.db` — файлы базы данных - `.env` — файлы окружения Коммиты выполняются атомарно — одно изменение = один коммит. ## Устранение неполадок ### Порт 8000 или 3000 уже занят Скрипт `start.sh` автоматически освобождает порты. Если это не помогло: ```bash # Linux/WSL lsof -i :8000 # найти PID kill -9 # Windows (PowerShell) Get-Process -Id (Get-NetTCPConnection -LocalPort 8000).OwningProcess | Stop-Process ``` ### Ошибки при установке зависимостей ```bash # Обновить pip pip install --upgrade pip # Очистить кэш npm npm cache clean --force ``` ### База данных не создается Убедитесь, что у скрипта есть права на запись в директорию `backend/`: ```bash ls -la backend/ ``` ## Лицензия Внутренний инструмент, все права защищены.