# Pendente de commit — Perfil (PT) + auth_provider Microsoft (2026-05-20)

Snapshot do que está na **working tree** (ainda **não** commitado) após o lote mais recente de trabalho. O commit anterior (`9b1196c` — zerar respostas da bateria + documentação) **já está em `main`** alinhado com `origin/main`.

**Última verificação:** 2026-05-20.

---

## 1. Resumo executivo

| Lote | Estado |
|------|--------|
| Zerar respostas da bateria (Admin global) + `docs/estado-entregas-e-pendencias-2026-05-19.md` | **Commitado** (`9b1196c`) — já em `main` / remoto |
| **Meu perfil em português**, ocultar excluir conta, `auth_provider` Microsoft, ocultar senha | **Pendente** `git add` + commit + push |

---

## 2. O que este commit entrega (produto)

### 2.1 Meu perfil — português e UX

| Antes | Depois |
|-------|--------|
| Textos Breeze em inglês (Profile Information, Save, etc.) | **Dados do perfil**, **Alterar senha**, **Salvar**, labels em PT |
| Botão “SAVE” em maiúsculas | **Salvar** com estilo normal (`normal-case`) |
| Bloco **Excluir conta** visível | **Removido** do portal e da gestão |

**Rotas:** `/portal/perfil` (portal), `/profile` (gestão, redireciona para portal se sessão portal).

### 2.2 Autenticação por utilizador (`auth_provider`)

**Problema:** O sistema só guardava o modo de login na **empresa** (`portal_appearance_settings.portal_login_method`), não **por pessoa**. Quem entrava por Microsoft ainda via o formulário de alterar senha.

**Solução:** Coluna `users.auth_provider`:

| Valor | Significado |
|-------|-------------|
| `password` | E-mail + senha (padrão; admin, import, factory) |
| `microsoft` | Login Microsoft (OAuth); **não** altera senha no perfil |

**Quando grava `microsoft`:**

1. Cadastro completo após callback Microsoft (`MicrosoftPortalOnboardingService`)
2. Login Microsoft de utilizador já existente (`MicrosoftOAuthController::callback`)

**Perfil para conta Microsoft:**

- Pode editar **nome** e **e-mail**
- **Não** vê formulário “Alterar senha” — mensagem: *“A sua conta utiliza login Microsoft…”*
- `PUT /password` → **403**

**Nota:** Não existe neste projeto Laravel um “login via API” (token REST) para participantes; o login externo é o **OAuth Microsoft**. A pasta legada `azure/ad/` não faz parte deste fluxo.

### 2.3 Locale da aplicação

- `config/app.php` e `.env.example`: default `APP_LOCALE=pt`, `APP_FALLBACK_LOCALE=pt`
- `lang/pt.json` — traduções Breeze (auth, navegação) para quem usar `__()`
- `phpunit.xml` — testes com locale `pt`
- Textos do **perfil** estão fixos em PT nas blades (não dependem só do locale)

---

## 3. Migration obrigatória

```bash
php artisan migrate
```

Ficheiro: `database/migrations/2026_05_20_120000_add_auth_provider_to_users_table.php`

- Coluna `users.auth_provider` (string, default `password`)
- Utilizadores existentes ficam `password` até entrarem de novo por Microsoft (aí passam a `microsoft`)

---

## 4. Inventário de ficheiros (pendente)

### Criados

| Ficheiro |
|----------|
| `app/Enums/UserAuthProvider.php` |
| `database/migrations/2026_05_20_120000_add_auth_provider_to_users_table.php` |
| `lang/pt.json` |
| `tests/Feature/Profile/ProfilePasswordChangeTest.php` |
| `docs/pendente-commit-perfil-auth-provider-2026-05-20.md` (este ficheiro) |

### Alterados

| Ficheiro | Alteração |
|----------|-----------|
| `app/Models/User.php` | `auth_provider`, `canChangePassword()`, `usesMicrosoftAuthentication()` |
| `app/Services/UserService.php` | default `auth_provider` = password em `createUser` |
| `app/Services/MicrosoftPortalOnboardingService.php` | `auth_provider` = microsoft no create |
| `app/Http/Controllers/Auth/MicrosoftOAuthController.php` | marca `microsoft` no login existente |
| `app/Http/Controllers/Auth/PasswordController.php` | 403 se não pode alterar senha |
| `app/Http/Controllers/ProfileController.php` | passa `canChangePassword` à view |
| `resources/views/profile/partials/update-profile-information-form.blade.php` | PT |
| `resources/views/profile/partials/update-password-form.blade.php` | PT |
| `resources/views/portal/profile/edit.blade.php` | sem excluir conta; senha condicional + aviso MS |
| `resources/views/profile/edit.blade.php` | idem (gestão) |
| `config/app.php` | locale pt |
| `.env.example` | `APP_LOCALE=pt` |
| `phpunit.xml` | locale pt nos testes |
| `database/factories/UserFactory.php` | `auth_provider` password |
| `tests/Feature/Profile/ProfileLayoutContextTest.php` | PT + hide senha MS |
| `tests/Feature/Auth/MicrosoftOAuthPortalLoginTest.php` | assert `auth_provider` |

### Não incluídos neste pendente (já commitados em `9b1196c`)

- Zerar respostas bateria: `QuestionBatteryController`, policy, service, repository, partial, testes
- `docs/estado-entregas-e-pendencias-2026-05-19.md`, atualizações em `docs/registro-entregas.md`

---

## 5. Verificação antes do commit

```bash
php artisan migrate
php artisan test --filter=ProfileLayoutContextTest
php artisan test --filter=ProfilePasswordChangeTest
php artisan test --filter=MicrosoftOAuthPortalLoginTest
```

### QA manual

1. **Conta senha** — `/portal/perfil`: vê “Dados do perfil” + “Alterar senha”; sem “Excluir conta”.
2. **Conta Microsoft** — após `migrate` + login MS: só nome/e-mail; aviso Microsoft; sem campos de senha.
3. **Tentativa API** — `PUT /password` como utilizador Microsoft → 403 (opcional via teste).

---

## 6. Comandos Git sugeridos

```bash
git add \
  app/Enums/UserAuthProvider.php \
  app/Http/Controllers/Auth/MicrosoftOAuthController.php \
  app/Http/Controllers/Auth/PasswordController.php \
  app/Http/Controllers/ProfileController.php \
  app/Models/User.php \
  app/Services/MicrosoftPortalOnboardingService.php \
  app/Services/UserService.php \
  config/app.php \
  .env.example \
  database/factories/UserFactory.php \
  database/migrations/2026_05_20_120000_add_auth_provider_to_users_table.php \
  lang/pt.json \
  phpunit.xml \
  resources/views/portal/profile/edit.blade.php \
  resources/views/profile/edit.blade.php \
  resources/views/profile/partials/update-profile-information-form.blade.php \
  resources/views/profile/partials/update-password-form.blade.php \
  tests/Feature/Auth/MicrosoftOAuthPortalLoginTest.php \
  tests/Feature/Profile/ProfileLayoutContextTest.php \
  tests/Feature/Profile/ProfilePasswordChangeTest.php \
  docs/pendente-commit-perfil-auth-provider-2026-05-20.md \
  docs/registro-entregas.md \
  docs/README.md

git commit -m "$(cat <<'EOF'
feat(auth): auth_provider Microsoft e perfil em português

- users.auth_provider (password|microsoft); migration
- Perfil PT; oculta excluir conta e alterar senha para login Microsoft
- Marca microsoft no onboarding e no callback OAuth
- Bloqueia PUT /password para contas Microsoft; locale pt default
EOF
)"

git push
```

---

## 7. Deploy

1. `git pull` + `php artisan migrate` em produção.
2. Utilizadores Microsoft existentes: passam a `microsoft` no **próximo** login MS (ou UPDATE manual na BD se urgente).
3. `.env` produção: `APP_LOCALE=pt` (opcional se perfil já está em PT nas blades).
4. Sem `npm run build` neste lote (só PHP/views).

---

## 8. Mensagem de commit (texto)

```
feat(auth): auth_provider Microsoft e perfil em português

- users.auth_provider (password|microsoft); migration
- Perfil PT; oculta excluir conta e alterar senha para login Microsoft
- Marca microsoft no onboarding e no callback OAuth
- Bloqueia PUT /password para contas Microsoft; locale pt default
```
