# 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_` пользователя, прогоняет все модули, чистит за собой. ## Лицензия Внутренний проект команды morozovka-bridge. Не для распространения.