Metadata-Version: 2.4
Name: korochki
Version: 1.0.1
Summary: Портал записи на онлайн-курсы ДПО «Корочки.есть» — FastAPI backend + весь проект
Author: Exam
Keywords: courses,dpo,education,fastapi,korochki
Classifier: Framework :: FastAPI
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Requires-Python: >=3.10
Requires-Dist: alembic==1.13.3
Requires-Dist: bcrypt==4.0.1
Requires-Dist: email-validator==2.2.0
Requires-Dist: fastapi==0.115.0
Requires-Dist: passlib[bcrypt]==1.7.4
Requires-Dist: psycopg2-binary==2.9.10
Requires-Dist: pydantic-settings==2.6.0
Requires-Dist: pydantic==2.9.2
Requires-Dist: python-jose[cryptography]==3.3.0
Requires-Dist: python-multipart==0.0.12
Requires-Dist: sqlalchemy==2.0.36
Requires-Dist: uvicorn[standard]==0.32.0
Description-Content-Type: text/markdown

# «Корочки.есть» — портал онлайн-курсов ДПО

Информационная система для записи на онлайн-курсы дополнительного профессионального образования. Выполнено в рамках ГИА ДЭ ПУ (модули 1–4).

> 🎓 **Инвариантная часть** (модули 1–3) — портал «Корочки.есть»
> 🎨 **Вариативная часть** (модуль 4) — прототип сайта Astra Linux в Figma

## 🗂 Структура

```
exam/
├── backend/                FastAPI + SQLAlchemy + Alembic
│   ├── korochki/
│   │   ├── main.py         точка входа
│   │   ├── config.py       настройки (.env)
│   │   ├── database.py     движок и сессии
│   │   ├── models.py       ORM-модели
│   │   ├── schemas.py      Pydantic-схемы + валидация
│   │   ├── security.py     bcrypt + JWT
│   │   ├── deps.py         FastAPI-зависимости
│   │   ├── seed.py         сид админа и каталога курсов
│   │   └── routers/        auth, courses, applications, reviews, admin
│   ├── alembic/            миграции
│   ├── alembic.ini
│   ├── requirements.txt
│   └── .env.example
├── frontend/               React 19 + Vite + TailwindCSS + Framer Motion
│   ├── src/
│   │   ├── App.jsx         роуты
│   │   ├── main.jsx        точка входа
│   │   ├── layouts/        MainLayout
│   │   ├── pages/          Home, Login, Register, Applications, NewApplication, Admin
│   │   ├── components/     Slider, ReviewModal, StatusBadge
│   │   ├── context/        AuthContext, ToastContext
│   │   ├── services/       api.js (axios)
│   │   ├── utils/          validation.js
│   │   └── index.css       TailwindCSS + design system
│   └── package.json
├── docs/
│   ├── ER-diagram.md       схема БД и связи
│   └── er-diagram.png      изображение ER-диаграммы
├── figma/
│   └── README.md           ссылка на Figma и описание Модуля 4
├── docker-compose.yml      PostgreSQL 16
└── .gitignore
```

## 🛠 Стек

| Слой | Технологии |
|------|-----------|
| **Backend** | Python 3.13, FastAPI 0.115, SQLAlchemy 2.0, Alembic 1.13, Pydantic v2, bcrypt, python-jose (JWT) |
| **Database** | PostgreSQL 16 (Docker) |
| **Frontend** | React 19, Vite 5, React Router 7, Axios, TailwindCSS 3, Framer Motion |
| **Дизайн** | Figma (Модуль 4) |

## 🚀 Быстрый старт

### Предварительные требования
- Docker Desktop
- Python 3.11+
- Node.js 18+

### 1️⃣ Запустить PostgreSQL
```bash
docker compose up -d
```
БД будет доступна на `localhost:55432`. Порт **55432** выбран нестандартным, чтобы не конфликтовать с локально установленным PostgreSQL.

### 2️⃣ Backend

```bash
cd backend
python -m venv .venv
# Windows:
.venv/Scripts/activate
# Linux/macOS:
# source .venv/bin/activate

pip install -r requirements.txt
cp .env.example .env             # уже скопировано

alembic upgrade head             # применить миграции
python -m korochki.seed               # создать админа и каталог курсов

uvicorn korochki.main:app --reload --port 8000
```

API: http://localhost:8000
Swagger: http://localhost:8000/docs

### 3️⃣ Frontend

```bash
cd frontend
npm install
npm run dev
```

UI: http://localhost:5173

## 🔑 Учётные данные

| Роль | Логин | Пароль |
|------|-------|--------|
| Администратор | `Admin` | `KorokNET` |

Обычные пользователи регистрируются на странице `/register`.

## 📚 Модули

### Модуль 1. Проектирование и разработка ИС
- Спроектирована БД (4 таблицы: `users`, `courses`, `applications`, `reviews`)
- ER-диаграмма (`docs/er-diagram.png`, `docs/ER-diagram.md`)
- Полный стек: FastAPI (Python) + SQLAlchemy ORM + Pydantic схемы + React (TS-like JSX)
- Реализованы все требуемые страницы:
  - Регистрация с валидацией логина (латиница+цифры, ≥6), пароля (≥8), ФИО (кириллица), телефона `8(XXX)XXX-XX-XX`, email
  - Авторизация с обработкой ошибок
  - Просмотр заявок пользователя
  - Формирование заявки (курс, дата, способ оплаты)
  - Админ-панель со сменой статуса (Новая → Идёт обучение → Обучение завершено)

### Модуль 2. Дизайн веб-приложений
- **Адаптивный мобильный дизайн** (от 390×844 до десктопа) реализован через Tailwind responsive utilities
- **Валидация форм** с отображением ошибок прямо в поле + анимированный shake при ошибке
- **Курс из выпадающего списка** — заявка работает с 3 курсами из каталога
- **Дата формата ДД.ММ.ГГГГ** (нативный `<input type="date">` локализуется по системному формату RU)
- **Слайдер** на главной странице:
  - 4 одинаковых по размеру изображения с тематикой курсов
  - Автосмена каждые 3 секунды
  - Кнопки «Вперёд / Назад» + индикаторы
  - Пауза при наведении мыши
  - Управление стрелками клавиатуры
- **Админ-панель**: фильтры (статус, курс, поиск), пагинация, всплывающие toast-сообщения

### Модуль 3. Проектирование, разработка и оптимизация
- **Адаптивный дизайн** через Tailwind breakpoints (sm/md/lg)
- **Анимации и микроанимации** через Framer Motion:
  - Плавный переход между страницами (`AnimatePresence`)
  - Анимация появления карточек на скролле (stagger)
  - Hover- и tap-эффекты на интерактивных элементах
  - Spring-анимация модального окна отзыва
  - Toast-уведомления с пружинной анимацией
- **Оптимизация**:
  - Bundle 437 KB → 142 KB gzip
  - Lazy loading изображений слайдера
  - Дебаунс поиска в админке (250 мс)
  - Skeleton-плейсхолдеры при загрузке
  - Vite-проксирование API (без CORS-боли)

### Модуль 4. Прототип сайта Astra Linux (Figma, десктоп)
См. [`figma/README.md`](figma/README.md).

- **Файл Figma:** https://www.figma.com/design/ZQrTXxoVXEpWakYDYXdbHW
- **2 экрана** (Главная + Решения), 1440 px ширина, 12-колоночная сетка
- Использован фирменный стиль Astra Linux: глубокий синий `#002B7F` + красный `#E30613`
- Цвета вынесены в Variables
- Шрифт Inter в 4 начертаниях

## 🧪 Проверка

API проверен через Swagger и endpoint-смок-тесты:
```bash
# health
curl http://localhost:8000/api/health

# логин админа
curl -X POST http://localhost:8000/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"login":"Admin","password":"KorokNET"}'

# регистрация
curl -X POST http://localhost:8000/api/auth/register \
  -H "Content-Type: application/json; charset=utf-8" \
  --data-binary @user.json
```

Frontend сборка:
```bash
cd frontend
npm run build  # 437 KB JS, 29 KB CSS
```

## 🐛 Известные нюансы

1. **Порт PostgreSQL — `55432`** (не 5432). На машине были запущены 2 локальных Postgres, заняв 5432 и 5433. Изменить можно в `docker-compose.yml` и `backend/.env`.
2. **Прототип в Figma**: связи между экранами нужно настроить вручную — лимит MCP-вызовов на Starter-плане был исчерпан. Подробности в `figma/README.md`.
3. **Кодировка терминала Windows**: вывод Python/curl с кириллицей может выглядеть как мусор в `cmd`/`Git Bash`, но данные в БД — корректные UTF-8.

## 📦 Команды для разработки

```bash
# Полный перезапуск БД
docker compose down -v && docker compose up -d
cd backend && alembic upgrade head && python -m korochki.seed

# Сгенерировать новую миграцию
cd backend && alembic revision --autogenerate -m "описание"

# Запуск всего одной командой (требует двух терминалов)
# Терминал 1: cd backend && uvicorn korochki.main:app --reload --port 8000
# Терминал 2: cd frontend && npm run dev
```

## 📄 Лицензия

Проект выполнен для ГИА ДЭ ПУ. Все права на использованные изображения принадлежат их владельцам (Unsplash для слайдера).
