174 lines
8.0 KiB
Markdown
174 lines
8.0 KiB
Markdown
---
|
|
phase: 116-hostedsms-integration
|
|
plan: 01
|
|
subsystem: settings-integrations
|
|
tags: [hostedsms, sms, api, settings, integration]
|
|
requires:
|
|
- phase: 113-fakturownia-integration-foundation
|
|
provides: integrations hub patterns and encrypted integration settings pattern
|
|
provides:
|
|
- HostedSMS global settings screen
|
|
- HostedSMS SimpleAPI client
|
|
- Real test SMS flow with persisted last_test status
|
|
affects: [settings, integrations, future-sms-automation]
|
|
tech-stack:
|
|
added: []
|
|
patterns: [single-row integration settings, IntegrationSecretCipher encrypted secret, integrations.last_test observability]
|
|
key-files:
|
|
created:
|
|
- database/migrations/20260512_000107_create_hostedsms_integration_settings.sql
|
|
- src/Modules/Settings/HostedSmsApiClient.php
|
|
- src/Modules/Settings/HostedSmsIntegrationRepository.php
|
|
- src/Modules/Settings/HostedSmsIntegrationController.php
|
|
- resources/views/settings/hostedsms.php
|
|
modified:
|
|
- routes/web.php
|
|
- src/Modules/Settings/IntegrationsHubController.php
|
|
- resources/lang/pl.php
|
|
- DOCS/DB_SCHEMA.md
|
|
- DOCS/ARCHITECTURE.md
|
|
- DOCS/TECH_CHANGELOG.md
|
|
key-decisions:
|
|
- "HostedSMS starts as one global account, not multi-account."
|
|
- "Test action sends a real SMS because SimpleAPI has no ping endpoint."
|
|
- "Inbound SMS replies are deferred; HostedSMS supports inbound retrieval only after DCS/HostedSMS activation."
|
|
patterns-established:
|
|
- "Provider settings screen stores secrets encrypted and only renders has_secret state."
|
|
- "HostedSMS API result uses MessageId as success and ErrorMessage as business failure."
|
|
duration: 1h
|
|
started: 2026-05-12T10:34:00+02:00
|
|
completed: 2026-05-12T12:10:00+02:00
|
|
---
|
|
|
|
# Phase 116 Plan 01: HostedSMS Integration Settings + Test SMS Summary
|
|
|
|
HostedSMS now has a settings screen, encrypted credential storage, SimpleAPI client, integrations-hub status, and a real test-SMS flow confirmed by the user.
|
|
|
|
## Performance
|
|
|
|
| Metric | Value |
|
|
|--------|-------|
|
|
| Duration | ~1h |
|
|
| Started | 2026-05-12T10:34:00+02:00 |
|
|
| Completed | 2026-05-12T12:10:00+02:00 |
|
|
| Tasks | 3 completed |
|
|
| Files modified | 20 |
|
|
|
|
## Acceptance Criteria Results
|
|
|
|
| Criterion | Status | Notes |
|
|
|-----------|--------|-------|
|
|
| AC-1: Zapis konfiguracji HostedSMS | Pass | Global settings row, encrypted password, non-revealing UI implemented. |
|
|
| AC-2: Walidacja konfiguracji | Pass | CSRF, e-mail, password, sender, phone and message validation implemented. |
|
|
| AC-3: Realny test wysylki SMS | Pass | User confirmed `OK HTTP 200` with MessageId `d935d71a-d9a0-4cfb-be06-03fe36c71150` at `2026-05-12 12:03:22`. |
|
|
| AC-4: Widocznosc w panelu integracji | Pass | HostedSMS row added to `/settings/integrations`. |
|
|
| AC-5: Dokumentacja i zgodnosc projektu | Pass | DOCS and `.paul/codebase` updated; lint/build passed. Sonar CLI unavailable. |
|
|
|
|
## Accomplishments
|
|
|
|
- Added `hostedsms_integration_settings` and idempotent seed of base `integrations` row.
|
|
- Added `HostedSmsIntegrationRepository`, `HostedSmsApiClient`, and `HostedSmsIntegrationController`.
|
|
- Added routes `GET/POST /settings/integrations/hostedsms...`.
|
|
- Added compact UI for settings and editable real test SMS.
|
|
- Improved final test display from raw `MessageId: ...` text to a cleaner status panel with date, status, HTTP code and separate message identifier.
|
|
- Documented that inbound SMS replies are possible in HostedSMS only through the inbound/Webserwis2SMS side after activation by DCS/HostedSMS, so reply handling is future scope.
|
|
|
|
## Task Commits
|
|
|
|
| Task | Commit | Type | Description |
|
|
|------|--------|------|-------------|
|
|
| Task 1: Model konfiguracji HostedSMS | `bc2ed2c` | feat | Migration + repository. |
|
|
| Task 2: Klient SimpleAPI i kontroler | `bc2ed2c` | feat | API client + controller + routes. |
|
|
| Task 3: UI, hub i dokumentacja | `bc2ed2c` | feat | Settings view, hub row, translations, docs. |
|
|
|
|
## Files Created/Modified
|
|
|
|
| File | Change | Purpose |
|
|
|------|--------|---------|
|
|
| `database/migrations/20260512_000107_create_hostedsms_integration_settings.sql` | Created | HostedSMS settings table and base integration seed. |
|
|
| `src/Modules/Settings/HostedSmsApiClient.php` | Created | HostedSMS SimpleAPI POST client. |
|
|
| `src/Modules/Settings/HostedSmsIntegrationRepository.php` | Created | Single-row settings repository with encrypted password. |
|
|
| `src/Modules/Settings/HostedSmsIntegrationController.php` | Created | Settings save and real test SMS actions. |
|
|
| `resources/views/settings/hostedsms.php` | Created | HostedSMS settings and test UI. |
|
|
| `routes/web.php` | Modified | DI wiring and HostedSMS routes. |
|
|
| `src/Modules/Settings/IntegrationsHubController.php` | Modified | HostedSMS row in integrations hub. |
|
|
| `resources/lang/pl.php` | Modified | Polish UI labels/messages. |
|
|
| `DOCS/DB_SCHEMA.md` | Modified | Schema documentation. |
|
|
| `DOCS/ARCHITECTURE.md` | Modified | Architecture documentation. |
|
|
| `DOCS/TECH_CHANGELOG.md` | Modified | Technical changelog. |
|
|
| `.paul/codebase/*` | Modified | PAUL codebase docs mirror. |
|
|
| `.paul/PROJECT.md` | Modified | Phase 116 marked as shipped. |
|
|
| `.paul/ROADMAP.md` | Modified | Phase 116 marked complete. |
|
|
| `.paul/STATE.md` | Modified | Loop closed and next action updated. |
|
|
|
|
## Decisions Made
|
|
|
|
| Decision | Rationale | Impact |
|
|
|----------|-----------|--------|
|
|
| One HostedSMS account | User confirmed one account is enough for first version. | Simpler table and UI; no account selector needed. |
|
|
| Real SMS test | User requested actual test SMS and SimpleAPI has no ping endpoint. | Test consumes provider credits but verifies the real path. |
|
|
| Editable test message | User requested editable message. | UI exposes a textarea with default `Test orderPRO HostedSMS`. |
|
|
| Defer inbound replies | HostedSMS requires inbound interface activation by provider. | Future phase can add `GetUnreadInputSmses` / `GetInputSmses` polling after activation. |
|
|
|
|
## Deviations from Plan
|
|
|
|
### Summary
|
|
|
|
| Type | Count | Impact |
|
|
|------|-------|--------|
|
|
| Scope additions | 1 | Cosmetic improvement to last-test panel after user feedback. |
|
|
| Deferred | 1 | Inbound SMS reply handling deferred. |
|
|
|
|
### Auto-fixed Issues
|
|
|
|
**1. Last test display too raw**
|
|
- **Found during:** User verification after successful SMS.
|
|
- **Issue:** UI showed `MessageId: ...` as plain text.
|
|
- **Fix:** Split the persisted MessageId into a separate `Identyfikator wiadomości` row inside a status alert.
|
|
- **Files:** `resources/views/settings/hostedsms.php`, `resources/lang/pl.php`, changelog docs.
|
|
- **Verification:** PHP lint and user accepted: "jest ok".
|
|
|
|
### Deferred Items
|
|
|
|
- HostedSMS inbound replies: Requires provider-side activation of the inbound/Webserwis2SMS feature, then a future plan can poll/store inbound messages.
|
|
|
|
## Issues Encountered
|
|
|
|
| Issue | Resolution |
|
|
|-------|------------|
|
|
| Local migration initially blocked because MySQL refused connection | User later confirmed working test in app, so DB/runtime path is verified. |
|
|
| `sonar-scanner` unavailable in PATH | Documented as skill gap; not blocking UNIFY. |
|
|
| `vendor/bin/phpunit` missing | Documented; no PHPUnit run. |
|
|
|
|
## Verification Results
|
|
|
|
- PASS: PHP lint for new/changed PHP files and view/lang files.
|
|
- PASS: `npm run build --if-present`.
|
|
- PASS: `git diff --check` with line-ending warnings only.
|
|
- PASS: User confirmed real HostedSMS test SMS: `2026-05-12 12:03:22 OK HTTP 200`, MessageId `d935d71a-d9a0-4cfb-be06-03fe36c71150`.
|
|
- GAP: `sonar-scanner` not available in PATH.
|
|
- GAP: PHPUnit unavailable because `vendor/bin/phpunit` is missing.
|
|
|
|
## Skill Audit
|
|
|
|
| Expected | Invoked | Notes |
|
|
|----------|---------|-------|
|
|
| sonar-scanner | Gap | CLI not found in PATH during APPLY verification. |
|
|
|
|
## Next Phase Readiness
|
|
|
|
**Ready:**
|
|
- HostedSMS credentials can be saved and verified.
|
|
- Future SMS automation can reuse `HostedSmsIntegrationRepository::getCredentials()` and `HostedSmsApiClient::sendSms()`.
|
|
|
|
**Concerns:**
|
|
- Inbound SMS replies require HostedSMS/DCS activation before implementation.
|
|
- No persistent SMS send history exists yet beyond `integrations.last_test_*`.
|
|
|
|
**Blockers:**
|
|
- None for closing Phase 116.
|
|
|
|
---
|
|
*Phase: 116-hostedsms-integration, Plan: 01*
|
|
*Completed: 2026-05-12*
|