# Setup do MySQL em produção (checklist)

Criar a tabela `users` no MySQL do cPanel e apontar o app pra ele. Roda no
**Terminal do cPanel** (não há SSH externo nesta hospedagem). Sem mudança de
código: o `passenger_wsgi.py` já carrega o `.env` e o `config.py` já lê de
`os.environ`.

## Dados (não-sensíveis)

| Item | Valor |
|---|---|
| Host | `localhost` |
| Banco | `bianchin_prumo` |
| Usuário **migration** (DDL — cria tabelas) | `bianchin_prumo_adm` |
| Usuário **runtime** (app no dia a dia) | `bianchin_prumo_api` |
| Segredos | só no `.env` do servidor (gitignored), nunca commitados |

> O `api` provavelmente **não tem `CREATE TABLE`** — por isso as tabelas são
> criadas com o `adm`, e o app roda com o `api`.

Caminhos no servidor:
- App: `/home/bianchin/public_html/app.prumoboard.com/app`
- flask/python do venv: `/home/bianchin/virtualenv/public_html/app.prumoboard.com/3.13/bin/`

---

## Passo 1 — Criar a tabela `users` (usuário **adm**)

Override inline, não toca o `.env`. Trocar `SENHA_ADM`:

```bash
cd /home/bianchin/public_html/app.prumoboard.com/app && \
DATABASE_URL='mysql+pymysql://bianchin_prumo_adm:SENHA_ADM@localhost/bianchin_prumo' \
/home/bianchin/virtualenv/public_html/app.prumoboard.com/3.13/bin/flask --app app create-db 2>erros.txt
```

- [x] Saída: `Database created.`

## Passo 2 — Apontar o app pro MySQL (usuário **api**)

No `app/.env` do servidor (File Manager ou `nano`), **definir/substituir** a
linha `DATABASE_URL` (não deixar duplicada):

```
DATABASE_URL=mysql+pymysql://bianchin_prumo_api:SENHA_API@localhost/bianchin_prumo
```

- [x] Linha `DATABASE_URL` salva, sem duplicata

## Passo 3 — Permissão + restart do Passenger

```bash
chmod 600 /home/bianchin/public_html/app.prumoboard.com/app/.env
touch /home/bianchin/public_html/app.prumoboard.com/tmp/restart.txt
```

- [x] `chmod 600` aplicado
- [x] `restart.txt` tocado

---

## Verificação (sem gravar lixo no banco)

O `api` não tem DELETE; para não deixar usuário de teste, conferir só que a
tabela existe e é consultável — com o **adm**:

```bash
cd /home/bianchin/public_html/app.prumoboard.com/app && \
DATABASE_URL='mysql+pymysql://bianchin_prumo_adm:SENHA_ADM@localhost/bianchin_prumo' \
/home/bianchin/virtualenv/public_html/app.prumoboard.com/3.13/bin/python -c "import app as m; a=m.create_app(); a.app_context().push(); from models.user import User; print('users OK, count =', User.query.count())"
```

- [x] Saída: `users OK, count = 0`

Confirmar que o app no ar continua respondendo (canário do deploy):

```bash
curl https://app.prumoboard.com/health/hello   # {"message":"Hello Prumo"}
```

- [x] `/health/hello` → 200

---

## Notas / armadilhas

- **Senha com caractere especial** (`@ : / # ? % & +` ou espaço) precisa ser
  *URL-encoded* no `DATABASE_URL`. Ex.: `@` → `%40`, `#` → `%23`, `:` → `%3A`,
  `/` → `%2F`, espaço → `%20`.
- **Ordem importa:** criar a tabela (Passo 1) **antes** de reiniciar com o
  `DATABASE_URL` do api (Passo 3). Senão o app no ar aponta pro MySQL sem
  tabela e o registro falha.
- **`.env` é seguro aqui:** gitignored (✓), não baixável pela web (testado: 406,
  conteúdo não servido ✓), e `chmod 600` (Passo 3).
- Verificado em produção (antes deste setup): `/login` = 200, `/dashboard` sem
  login → 302 `/login`. Falta só o banco pra fechar o registro real.


cd /home/bianchin/public_html/app.prumoboard.com
source /home/bianchin/virtualenv/public_html/app.prumoboard.com/3.13/bin/activate
flask --app app create-db

flask --app app create-db 2>erros.txt

