first commit
This commit is contained in:
186
README.md
Executable file
186
README.md
Executable file
@@ -0,0 +1,186 @@
|
|||||||
|
# Сервис Дашбордов и Аналитики для 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
|
||||||
|
```
|
||||||
|
|
||||||
|
## Лицензия
|
||||||
|
|
||||||
|
Внутренний корпоративный проект.
|
||||||
|
|
||||||
Reference in New Issue
Block a user