Metadata-Version: 2.4
Name: korochki
Version: 1.0.3
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
└── .gitignore
```

## 🛠 Стек

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

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

### Предварительные требования
- Python 3.10+
- PostgreSQL установлен локально (управление через pgAdmin)
- Node.js 18+ (для фронтенда)

### 1️⃣ Backend

```powershell
python -m venv .venv
.venv\Scripts\activate            # Linux/macOS: source .venv/bin/activate

pip install .                     # установит пакет korochki + зависимости
korochki setup-db                 # создаст роль korochki + базу + таблицы + админа (спросит пароль postgres)
korochki serve                    # запустить API
```

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

> `setup-db` идёт на локальный PostgreSQL (порт 5432, суперпользователь `postgres`).
> Другой порт/пользователь: `korochki setup-db --port 5433 --superuser postgres`.
> Вариант через миграции: `cd backend && alembic upgrade head && python -m korochki.seed`
> (строку подключения возьми из `backend/.env.example` → скопируй в `backend/.env`).

### 2️⃣ 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 — локальный, порт `5432`** (стандартный). Другой порт — флаг `korochki setup-db --port ...` или строка `DATABASE_URL` в `backend/.env`.
2. **Прототип в Figma**: связи между экранами нужно настроить вручную — лимит MCP-вызовов на Starter-плане был исчерпан. Подробности в `figma/README.md`.
3. **Кодировка терминала Windows**: вывод Python/curl с кириллицей может выглядеть как мусор в `cmd`/`Git Bash`, но данные в БД — корректные UTF-8.

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

```bash
# Полный сброс БД: в pgAdmin удалить базу korochki, затем создать заново
korochki setup-db

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

# Запуск (два терминала)
# Терминал 1: korochki serve
# Терминал 2: cd frontend && npm run dev
```

## 📄 Лицензия

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