187 lines
6.1 KiB
Markdown
Executable File
187 lines
6.1 KiB
Markdown
Executable File
# Сервис Дашбордов и Аналитики для ManicTime
|
||
|
||
Корпоративный веб-сервис для визуализации и анализа данных ManicTime.
|
||
|
||
## Архитектура
|
||
|
||
- **Backend**: FastAPI (Python)
|
||
- **Frontend**: React (Vite)
|
||
- **Базы данных**: PostgreSQL (2 БД: ManicTime readonly + служебная БД)
|
||
|
||
## Структура проекта
|
||
|
||
```
|
||
dash/
|
||
├── backend/ # FastAPI приложение
|
||
│ ├── app/ # Основной код приложения
|
||
│ ├── alembic/ # Миграции базы данных
|
||
│ ├── scripts/ # Вспомогательные скрипты
|
||
│ └── requirements.txt
|
||
├── frontend/ # React приложение
|
||
│ ├── src/
|
||
│ └── package.json
|
||
└── README.md
|
||
```
|
||
|
||
## Установка и запуск
|
||
|
||
### Предварительные требования
|
||
|
||
1. PostgreSQL (для обеих баз данных)
|
||
2. Python 3.9+
|
||
3. Node.js 18+
|
||
|
||
### Шаг 1: Настройка базы данных ManicTime
|
||
|
||
**КРИТИЧЕСКИ ВАЖНО**: Создайте readonly роль для доступа к БД ManicTime:
|
||
|
||
```sql
|
||
-- 1. Создание роли
|
||
CREATE ROLE manictime_readonly LOGIN PASSWORD 'N0v1y_S3cur3_P@ssw0rd!';
|
||
|
||
-- 2. Права на подключение к БД
|
||
GRANT CONNECT ON DATABASE "ManicTimeReports" TO manictime_readonly;
|
||
|
||
-- 3. Права на схему
|
||
GRANT USAGE ON SCHEMA public TO manictime_readonly;
|
||
|
||
-- 4. Права на чтение таблиц
|
||
GRANT SELECT ON TABLE
|
||
"Ar_Activity",
|
||
"Ar_User",
|
||
"Ar_Timeline",
|
||
"Ar_CommonGroup",
|
||
"Ar_Category",
|
||
"Ar_CategoryGroup",
|
||
"Ar_Environment"
|
||
TO manictime_readonly;
|
||
```
|
||
|
||
### Шаг 2: Настройка служебной базы данных
|
||
|
||
Создайте базу данных для сервиса:
|
||
|
||
```sql
|
||
CREATE DATABASE dashboard_service;
|
||
```
|
||
|
||
### Шаг 3: Настройка Backend
|
||
|
||
```bash
|
||
cd backend
|
||
python -m venv venv
|
||
|
||
# Windows
|
||
venv\Scripts\activate
|
||
|
||
# Linux/Mac
|
||
source venv/bin/activate
|
||
|
||
pip install -r requirements.txt
|
||
|
||
# Создайте файл .env на основе .env.example
|
||
# Отредактируйте .env с вашими настройками
|
||
|
||
# Инициализация базы данных
|
||
alembic upgrade head
|
||
|
||
# Создание начальных ролей и администратора
|
||
python scripts/init_db.py
|
||
|
||
# Запуск сервера
|
||
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
|
||
```
|
||
|
||
### Шаг 4: Настройка Frontend
|
||
|
||
```bash
|
||
cd frontend
|
||
npm install
|
||
npm run dev
|
||
```
|
||
|
||
Приложение будет доступно по адресу: http://localhost:3000
|
||
|
||
### Шаг 5: Первый вход
|
||
|
||
Используйте учетные данные, созданные скриптом `init_db.py`:
|
||
- **Логин**: `admin`
|
||
- **Пароль**: `admin123`
|
||
|
||
⚠️ **ВАЖНО**: Измените пароль администратора после первого входа через панель администратора!
|
||
|
||
## Конфигурация
|
||
|
||
### Переменные окружения (.env)
|
||
|
||
Все чувствительные данные (пароли, ключи) хранятся только в `.env` файле:
|
||
|
||
```env
|
||
# ManicTime Database (Read-Only)
|
||
MANICTIME_DB_HOST=localhost
|
||
MANICTIME_DB_PORT=5432
|
||
MANICTIME_DB_NAME=ManicTimeReports
|
||
MANICTIME_DB_USER=manictime_readonly
|
||
MANICTIME_DB_PASSWORD=ваш_пароль
|
||
|
||
# Service Database
|
||
SERVICE_DB_HOST=localhost
|
||
SERVICE_DB_PORT=5432
|
||
SERVICE_DB_NAME=dashboard_service
|
||
SERVICE_DB_USER=postgres
|
||
SERVICE_DB_PASSWORD=ваш_пароль
|
||
|
||
# JWT Settings
|
||
JWT_SECRET_KEY=сгенерируйте_случайный_ключ
|
||
JWT_ALGORITHM=HS256
|
||
JWT_ACCESS_TOKEN_EXPIRE_MINUTES=30
|
||
```
|
||
|
||
### Настройка через UI (Панель администратора)
|
||
|
||
Нечувствительные параметры подключения к ManicTime (host, port, dbname) можно изменять через панель администратора. Пароль и пользователь всегда берутся только из `.env`.
|
||
|
||
## Функциональные модули
|
||
|
||
1. **Сводка** - Агрегированная гистограмма активности по категориям
|
||
2. **Хронология** - Индивидуальные линейки активности пользователей
|
||
3. **Метрика** - Числовые показатели эффективности в динамике
|
||
4. **Отпуска/Больничные** - Календарь отсутствий сотрудников
|
||
5. **Панель Администратора** - Управление пользователями и конфигурацией
|
||
|
||
## Безопасность
|
||
|
||
⚠️ **КРИТИЧЕСКИ ВАЖНО**:
|
||
|
||
1. Никогда не используйте учетные данные суперпользователя PostgreSQL в приложении
|
||
2. Создайте отдельную readonly роль для доступа к БД ManicTime
|
||
3. Храните пароли только в переменных окружения (.env)
|
||
4. Не коммитьте файл .env в систему контроля версий
|
||
5. Используйте надежные пароли для JWT_SECRET_KEY
|
||
|
||
## Разработка
|
||
|
||
### Структура API
|
||
|
||
API доступно по адресу: `http://localhost:8000/api/v1`
|
||
|
||
Документация: `http://localhost:8000/docs` (Swagger UI)
|
||
|
||
### Миграции базы данных
|
||
|
||
```bash
|
||
# Создание новой миграции
|
||
alembic revision --autogenerate -m "описание изменений"
|
||
|
||
# Применение миграций
|
||
alembic upgrade head
|
||
|
||
# Откат последней миграции
|
||
alembic downgrade -1
|
||
```
|
||
|
||
## Лицензия
|
||
|
||
Внутренний корпоративный проект.
|
||
|