Metadata-Version: 2.4
Name: fa-template-cli
Version: 0.1.1
Summary: Интерактивный генератор FastAPI-проектов (Copier-based)
Requires-Python: >=3.10
Requires-Dist: copier>=9.0
Requires-Dist: typer>=0.12
Description-Content-Type: text/markdown

# fa-template-cli

Генератор FastAPI-проектов с готовой авторизацией, миграциями и логированием — чтобы не копипастить один и тот же boilerplate в очередной раз.

## Зачем это

Когда начинаешь новый FastAPI-проект, почти всегда нужно одно и то же: JWT-аутентификация с refresh-токенами, миграции через Alembic, подключение к БД, немного логирования. Обычно это тащится копипастой из предыдущего проекта, а потом полдня уходит на то, чтобы вычистить то, что в этот раз не нужно — например, email-верификацию или лишний драйвер БД.

`fa-template-cli` убирает это ручное вычищение. При запуске `fa-template init` вам задают несколько вопросов, и итоговый проект собирается сразу под ответы: не нужна email-верификация — значит, в проекте не будет ни `email.py`, ни зависимости `aiosmtplib`, ни соответствующего эндпоинта, ни лишнего поля в модели пользователя. Под капотом — [Copier](https://copier.readthedocs.io/), так что сгенерированный проект в будущем можно будет обновить до новой версии шаблона через `copier update`, не перенося правки руками.

## Установка

Это CLI-инструмент, поэтому логичнее ставить его через `pipx` — тогда команда `fa-template` будет доступна из любой папки, а не только внутри одного venv:

```bash
pipx install fa-template-cli
```

Обычный `pip install fa-template-cli` тоже работает, если вам так удобнее.

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

```bash
fa-template init my_project
cd my_project

python -m venv env
source env/Scripts/activate   # на Linux/macOS: source env/bin/activate

pip install -r requirements.txt
cp .env.example .env          # поправьте SECRET_KEY и DATABASE_URL при необходимости

uvicorn app.main:app --reload
```

Готово — на `http://localhost:8000/docs` уже открыта живая Swagger-документация с эндпоинтами регистрации, логина и обновления токена.

## Вопросы при `init`

| Вопрос | На что влияет |
|---|---|
| `project_slug` | имя проекта, используется и как имя пакета в некоторых URL по умолчанию |
| `app_name` | отображаемое имя приложения (`APP_NAME` в `.env`) |
| `database` | `sqlite` / `postgres` / `mysql` — определяет драйвер в `requirements.txt` и дефолтный `DATABASE_URL` |
| `use_logging` | включать ли loguru: без него в проекте вообще не будет модуля логирования |
| `use_email_verification` | нужна ли верификация email при регистрации (SMTP, эндпоинт `verify-email`, поле `is_verified`) |
| `secret_key` | ключ для подписи JWT — значение из ответа сразу попадает в `.env.example` |

## Что уже реализовано в сгенерированном проекте

- FastAPI на асинхронном SQLAlchemy 2.0
- JWT-аутентификация: access-токен + refresh-токен с ротацией. Refresh-токен в базе хранится не в открытом виде, а как SHA-256-хэш
- Alembic-миграции, которые применяются автоматически при старте приложения (`alembic upgrade head` в `lifespan`)
- Опционально — email-верификация регистрации: если SMTP не настроен, ссылка для подтверждения просто уходит в лог, чтобы не блокировать разработку
- Опционально — логирование через loguru с отдельным файлом под письма и отдельным под всё остальное
- `scripts/create_admin.py` для создания или назначения администратора из консоли
- Готовые скрипты переноса данных с SQLite на PostgreSQL/MySQL — если стартовали на SQLite и решили вырасти

## Требования

Python 3.10+.
