Metadata-Version: 2.5
Name: waiross
Version: 0.1.2
Summary: Waiross — CLI e scaffolding para aplicações FastAPI feature-first (HTTP/WebSocket/gRPC/CLI)
License-Expression: MIT
License-File: LICENSE
Requires-Python: >=3.10
Requires-Dist: typer>=0.12.5
Description-Content-Type: text/markdown

# Waiross

CLI e scaffolding para aplicações FastAPI feature-first, no espírito do
instalador do Laravel: `pip install waiross`, `waiross new meu_projeto`, e a
aplicação nasce pronta — `settings/`, `core/`, `app/<feature>/`, `routes/`,
`migrations/`, `tests/`, com injeção de dependências automática, Use Case
como unidade principal e suporte a múltiplos protocolos (HTTP, WebSocket,
gRPC, fila, CLI) desde o primeiro commit.

Este repositório é o pacote `waiross` em si — o CLI e o template empacotado.
Não é a aplicação gerada; é a ferramenta que a gera.

## Instalação

```bash
pip install waiross
```

## Uso

```bash
waiross new meu_projeto
cd meu_projeto
pip install -e .
waiross serve
```

Isso cria:

```
meu_projeto/
├── settings/
├── core/
├── app/
├── routes/
├── migrations/
├── tests/
├── main.py
├── pyproject.toml
├── .env.example
└── .gitignore
```

Para inicializar o Waiross num diretório já existente (em vez de criar um
novo):

```bash
mkdir minha_api && cd minha_api
waiross init
```

`waiross init` nunca sobrescreve um arquivo que já existe — se houver
conflito, ele avisa e pula o arquivo, sem apagar nada seu.

### Scaffolding

Dentro de um projeto Waiross (`new` ou `init`), gere código com os comandos
`make:*`:

```bash
waiross make:module users                                  # scaffold mínimo de uma feature
waiross make:entity users User                             # app/users/entity.py
waiross make:usecase users CreateUser                       # app/users/use_cases/create_user.py
waiross make:repository users UserRepository                # app/users/repository.py (interface)
waiross make:repository users UserRepository --implementation sqlalchemy  # + implementação SQLAlchemy
waiross make:dto users UserOutput                            # app/users/dto.py (Pydantic — DTO e schema HTTP ao mesmo tempo)
waiross make:exception users UserNotFound                    # app/users/exceptions.py (um único arquivo por feature)
waiross make:route users --protocol http                     # routes/http/v1/users.py
```

Nenhum comando `make:*` sobrescreve um arquivo existente — se o arquivo já
existe, o comando avisa e não faz nada.

### Rodando a aplicação gerada

```bash
waiross serve                 # fastapi dev main.py, com reload
waiross serve --no-reload     # fastapi run main.py
```

## Comandos

```
waiross new <nome>            Cria uma aplicação nova em ./<nome>
waiross init [nome]           Inicializa o Waiross no diretório atual
waiross serve                 Sobe a aplicação (fastapi dev/run main.py)

waiross make:module           Scaffold mínimo de uma feature
waiross make:entity           Entidade de domínio
waiross make:usecase          Caso de uso
waiross make:repository       Interface de repositório (+ impl. opcional)
waiross make:dto              DTO de entrada/saída
waiross make:exception        Exceção específica da feature
waiross make:route            Adaptador de rota (HTTP hoje; WS/gRPC futuro)
```

Rode `waiross --help` a qualquer momento para ver a lista completa.

## Desenvolvimento deste pacote

```bash
uv sync --all-groups
uv run pytest -v
uv run ruff check .
```

Verificação de empacotamento (o template precisa ir dentro do wheel):

```bash
python -m build
python -m venv /tmp/test-waiross
/tmp/test-waiross/bin/pip install dist/waiross-*.whl
/tmp/test-waiross/bin/waiross new /tmp/projeto_teste
```

Veja `PUBLISHING.md` para o processo completo de publicação no PyPI.
