morozovka-portal/README.md

111 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Morozovka Platform
Единая платформа команды Никиты Сергеевича Морозова (30+ человек).
Развёрнута на базе **Gitea** + собственный **Flask-портал**.
Заменяет ручное управление расписанием, каталог проектов, файлохранилище, мастер-классы.
## Что внутри
- **Расписание** с публичной страницей `/schedule`, статусом-баннером, ICS-экспортом и rule-based ассистентом
- **Проекты** с канбан-досками, granular-правами участников, интеграцией с Gitea
- **Мастер-классы** с регистрацией, посещаемостью, материалами
- **Файлохранилище v2.0** — пространства → папки → файлы с версиями и ACL
- **Общая лента** `/feed` из всех проектов и МК
- **Дашборд** участника
- **Онбординг-тур** для новичков
- **Уведомления-колокольчик** на всех страницах
## Стек
| Слой | Технология |
|---|---|
| Backend | Python 3.11, Flask 3.1, SQLModel, Gunicorn |
| БД | PostgreSQL 15 |
| Миграции | Alembic |
| Reverse proxy | Nginx (внешний + внутренний) |
| Git/SSO | Gitea 1.22 |
| VPN | OpenVPN + socat (Малина) |
| Frontend | Jinja2 + vanilla JS + общий `main.css` |
## Быстрый старт (для разработчика)
```bash
# 1. Клон репозитория
cd /opt
git clone http://192.168.50.3:3000/git_admin/morozovka-portal.git
cd morozovka-portal
# 2. venv + зависимости
python3 -m venv venv
./venv/bin/pip install -r requirements.txt
# 3. .env (см. INSTALL.md)
cp .env.example .env
nano .env
# 4. Миграции
export PATH=./venv/bin:$PATH
alembic upgrade head
# 5. Запуск (dev)
./venv/bin/flask --app app.main run --host 0.0.0.0 --port 8000
# 6. Тесты
bash tests/run_smoke.sh
```
## Структура проекта
```
/opt/morozovka-portal/
├── app/
│ ├── main.py — Flask app, регистрация модулей, healthz
│ ├── config.py — все настройки (env + .env через python-dotenv)
│ ├── db.py — SQLAlchemy engine
│ ├── models.py — SQLModel: 27 таблиц
│ ├── helpers.py — общие фильтры, декораторы, permissions, email, upload
│ ├── auth.py — Gitea OAuth
│ ├── assistant.py — rule-based ассистент (regex)
│ ├── llm_assistant.py — LLM-ассистент (готов, но выключен)
│ ├── gitea_api.py — Gitea API client с in-memory кэшем
│ ├── google_sync.py — Google Calendar → Event (cron 15 мин)
│ ├── modules/ — 11 модулей роутов (register(app))
│ ├── static/
│ │ ├── main.css — общие стили (~38 КБ)
│ │ └── notif_bell.js — колокольчик уведомлений
│ └── templates/ — 26 Jinja2-шаблонов (25 extends base.html)
├── alembic/ — миграции (4 ревизии)
├── tests/
│ ├── run_smoke.sh — 94 автотеста без GUI
│ └── last_run.log — последний прогон
├── docs/ — документация (эта папка)
├── requirements.txt
└── .env — секреты (не коммитить!)
```
## Документация
| Файл | О чём |
|---|---|
| `docs/INSTALL.md` | Установка с нуля |
| `docs/ARCHITECTURE.md` | Архитектура, модули, роли, фичи |
| `docs/API.md` | Все роуты (HTTP endpoints + JSON API) |
| `docs/DATABASE.md` | Схема БД, 27 таблиц, миграции |
| `docs/OPERATIONS.md` | Эксплуатация: логи, бэкапы, troubleshooting |
| `docs/USER_GUIDE.md` | Гайд для пользователей |
| `docs/SECURITY.md` | Что есть / чего нет / план |
| `docs/ROADMAP.md` | Что сделано / что дальше |
## Тесты
```bash
cd /opt/morozovka-portal
bash tests/run_smoke.sh
```
**Ожидаемо:** `PASS: 94, FAIL: 0` (за 3 секунды). Скрипт создаёт изолированного `smoke_test_<ts>` пользователя, прогоняет все модули, чистит за собой.
## Лицензия
Внутренний проект команды morozovka-bridge. Не для распространения.