Приложение для взаимодействия с БД хранящей список пользователей, и их прав для работы с приложением.
asyncio
Web REST aiohttp
БД PostgreSQL с валидацией, схема и миграции Alembic. SQL Alchemy core ~1.4
Аутентификация и авторизация на aiohttp-security:
- кастомные уровни доступа
- пароли через bcrypt (авто соль)
- куки сессия
Валидация моделей запросов и ответов с Pydantic
Логи
OpenAPI документация Эндпоинтов и форм (Swagger)
DATABASE:
- [v] Схема таблицы пользователей (Имя, Фамилия, Логин, Пароль, Дата Рождения)
- [v] Схема таблицы прав пользователей (Логин, Блокировка, Администратор, Только чтение) ВАЖНО:
- [v] У 1 пользователя может быть или только "Администатор" или "Только чтение"
- [v] Изначально должен быть заведен 1 пользователь с правами Администратора admin, admin, admin, 01-01-1970 Будет +
- [v] если будет подключена миграция череp ALEMBIC
BACKEND:
- [v] Запрос авторизации по логину и паролю.
- [v] Разработать CRUD (CREATE, READ, UPDATE, DELETE) на таблицу пользователей.
Требование к BACKEND
- [v] Логирование
- [v] доступ к этому API CRUD только после авторизации
- [v] Соответственно Администраторы могут полный CRUD
- [v] "Только Чтение" могут только READ Для остальный методов forbidden/unauthorized
- [v] Никакого Фронта не нужно. Общение только посредствам REST API
Будет огромный +:
- [v] Cформированая документация swagger и доступ по url backend
- [~] Использование Docker, docker-compose, Makefile
- [v] Автотестирование (Pytest) routes backend желательно
Обязательный стэк
- [v] BACKEND aiohttp, asyncio
- [v 1.4 core only] DataBase postgresql + SQlAlchemy > 1.4 (Желательно CORE, но и ORM тоже можно)
В папке конфиг задаем хосты и порты (lodalhost default)
- для приложения
- для базы
docker run --rm -it -d -e POSTGRES_USER=admin -e POSTGRES_PASSWORD=admin -p 5432:5432 postgres
для создания таблиц и населения админа:
- "alembic upgrade head"
- (ну или без алембика напрямую -> .src/database/populate_db.py)
Точка входа - .src/main.py
Таблица маршрутов в корне сайта ('/')
Документация (swagger для тестов) на ('/docs')
database/db:
- инициализация самой дб
- все CRUD для работы с бзаой database/db_schema:
- мета модель базы для алхимии database/db_authorization:
- реализация работы aiohttp-security через перегрузку абстрактных классов database/db_population:
- первичная подготовка дб для работы с приложением
models/models:
- модель пользователя для валидации
- модель авторизации -//-
form_validation:
- валидация формы логина
openapi_doc:
- файл-описание апи для док уи
security:
- реализация работы с паролем (изолирована, легко заменить дургой библиотекой)
settings:
- конфиг и его загрузка
views: (пожалуй правильнее было бы назвать хэндлы)
- реализация интерфейсов для веб
Пара тестов на хендлы фронта Пара тестов на crud
- try:except
- typehint
- Docker (в compose нет коннкета между PG и app (Connect call failed) mb bridge?