5.4 KiB
5.4 KiB
План разработки — IP WhiteList Microservice [LEGACY]
⚠️ УСТАРЕЛО. Этот план содержит ошибки (async ORM, неполные требования, отсутствие тестов). Актуальный план:
plan-v2.md
Автор: GitHub Copilot (DeepSeek V4 Flash) Дата: 2026-05-29
Стек
| Слой | Технология |
|---|---|
| Бэкенд | Python 3.11+ / FastAPI |
| БД | PostgreSQL |
| ORM | SQLAlchemy (async) + Alembic (миграции) |
| Фронтенд | Jinja2 + HTMX + минимальный CSS |
| Авторизация | Keycloak OIDC (на старте — заглушка/мок) |
| Валидация | Pydantic + встроенный ipaddress |
Этапы
Этап 1 — Каркас проекта
- Структура проекта:
app/,templates/,static/,migrations/ requirements.txt(FastAPI, SQLAlchemy, asyncpg, Alembic, Jinja2, python-keycloak)- Конфигурация (
.env,config.py) docker-compose.ymlс PostgreSQL
Этап 2 — Модели БД и миграции
- Модель
Company(id, clientId, name, individual_limit) - Модель
WhitelistEntry(id, company_id, value, comment, created_by, created_at, updated_at, deleted_at, deleted_by) - Модель
AuditLog(id, user_email, company_id, action, old_value, new_value, timestamp) - Alembic initial migration
Этап 3 — Валидация IPv4
- Валидатор: одиночный IPv4 / CIDR
- Проверка маски: /32 – /22 (шире /21 — отказ)
- Нормализация host-битов в 0
- Запрет серых/приватных диапазонов (Приложение А из ТЗ)
- Проверка дубликатов и пересечений в пределах компании
Этап 4 — CRUD + Бизнес-логика
- Создание записи (с проверкой лимита)
- Просмотр таблицы записей (для клиента — свои компании, для админа — все)
- Редактирование (с повторной валидацией)
- Soft delete (deleted_at, deleted_by)
- Лимиты: глобальный default 15, индивидуальный per-company
Этап 5 — Аудит
- Запись всех изменяющих операций в
AuditLog - Просмотр журнала (только админ)
Этап 6 — Внешний endpoint
GET /api/v1/whitelist/aggregated— txt-файл- Суммаризация (агрегация) CIDR всех компаний
- Только активные (не soft-deleted) записи
Этап 7 — Авторизация (заглушка → Keycloak)
- Заглушка: header
X-Client-ID,X-User-Email,X-Role - Роли: client / admin
- Переключатель компаний (для пользователей в нескольких компаниях)
- Позже: полноценный OIDC через Keycloak
Этап 8 — UI (Jinja2 + HTMX)
- Страница входа / редирект на Keycloak
- Таблица записей с фильтрами
- Форма создания/редактирования (с клиентской валидацией)
- Индикатор лимита: «использовано X из N»
- Админка: фильтр по компаниям, просмотр удалённых, журнал аудита
Этап 9 — Деплой
- Systemd unit / Dockerfile
- Nginx reverse proxy (если нужно)
- CI/CD или ручная инструкция
Файловая структура (план)
IPWhiteList/
├── app/
│ ├── __init__.py
│ ├── main.py # FastAPI app
│ ├── config.py # Настройки из .env
│ ├── models.py # SQLAlchemy модели
│ ├── schemas.py # Pydantic схемы
│ ├── validators.py # IPv4/CIDR валидация
│ ├── crud.py # CRUD-операции
│ ├── auth.py # Авторизация (заглушка → Keycloak)
│ ├── routers/
│ │ ├── __init__.py
│ │ ├── entries.py # CRUD whitelist
│ │ ├── admin.py # Админка
│ │ └── external.py # Внешний endpoint
│ └── utils.py # Суммаризация CIDR, лимиты
├── templates/
│ ├── base.html
│ ├── index.html # Таблица записей
│ ├── entry_form.html # Форма создания/редактирования
│ └── admin/
│ ├── audit.html # Журнал аудита
│ └── limits.html # Управление лимитами
├── static/
│ └── style.css
├── migrations/
│ └── alembic/
├── docs/
│ ├── plan.md # Этот файл
│ └── WhiteIPlist.docx # Исходное ТЗ
├── .env.example
├── docker-compose.yml
├── requirements.txt
└── README.md