feat: Add User-Agent header to Allegro API requests

- Implemented buildUserAgent() method in AllegroApiClient, AllegroOAuthClient, and AllegroTrackingService to include User-Agent header in all HTTP requests to Allegro API.
- Updated .env.example to include APP_VERSION and ALLEGRO_USER_AGENT_URL for configuration.
- Created public /info page to provide application details required by Allegro, including app name, version, description, and contact information.
- Added minimalist layout for public pages to ensure a professional appearance.
- Ensured all changes comply with Allegro's API requirements for User-Agent header.
This commit is contained in:
2026-04-08 20:59:55 +02:00
parent 0f7742f10d
commit c5b2885b44
21 changed files with 827 additions and 22 deletions

View File

@@ -0,0 +1,155 @@
---
phase: 89-allegro-info-page
plan: 01
type: execute
wave: 1
depends_on: ["88-01"]
files_modified: [routes/web.php, src/Modules/Info/InfoController.php, resources/views/info/allegro.php, resources/views/layouts/public.php]
autonomous: false
delegation: off
---
<objective>
## Goal
Utworzenie publicznej podstrony informacyjnej `/info` wymaganej przez Allegro w nagłówku User-Agent. Strona musi prezentować cel i opis aplikacji orderPRO dla administratorów zewnętrznych.
## Purpose
Allegro wymaga w User-Agent URL do strony informacyjnej aplikacji. Strona musi istnieć pod adresem skonfigurowanym w ALLEGRO_USER_AGENT_URL (domyślnie https://orderpro.pl/info).
## Output
Publiczna strona `/info` bez wymagania logowania, z opisem aplikacji orderPRO.
</objective>
<context>
## Project Context
@.paul/PROJECT.md
@.paul/ROADMAP.md
@.paul/STATE.md
## Prior Work
@.paul/phases/88-allegro-user-agent/88-01-SUMMARY.md — User-Agent header z URL do tej strony
## Source Files
@routes/web.php — routing (publiczne trasy bez middleware)
@src/Modules/Auth/AuthController.php — wzorzec kontrolera publicznej strony
@resources/views/layouts/auth.php — layout publicznych stron (bez sidebara)
</context>
<acceptance_criteria>
## AC-1: Strona /info dostepna publicznie
```gherkin
Given uzytkownik niezalogowany
When odwiedza /info w przegladarce
Then widzi strone informacyjna o aplikacji orderPRO (bez przekierowania na login)
```
## AC-2: Tresc strony zgodna z wymaganiami Allegro
```gherkin
Given administrator zewnetrzny (np. Allegro) odwiedza strone /info
When czyta zawartosc
Then widzi: nazwe aplikacji, opis celu dzialania, informacje o integracji z Allegro API, dane kontaktowe
```
## AC-3: Strona wyglada profesjonalnie
```gherkin
Given uzytkownik odwiedza /info
When strona sie laduje
Then widzi czysty, profesjonalny layout (bez sidebara/nawigacji aplikacji, minimalistyczny design)
```
</acceptance_criteria>
<tasks>
<task type="auto">
<name>Task 1: Kontroler i routing strony /info</name>
<files>src/Modules/Info/InfoController.php, routes/web.php</files>
<action>
1. Utworzyc `src/Modules/Info/InfoController.php`:
- Klasa `final class InfoController` w namespace `App\Modules\Info`
- Metoda `show(Request $request): Response`
- Renderowanie widoku `info/allegro` z layoutem `layouts/public`
- Przekazac do widoku: APP_NAME, APP_VERSION z getenv()
2. W `routes/web.php`:
- Dodac `use App\Modules\Info\InfoController;`
- Utworzyc instancje `$infoController = new InfoController($template);`
- Dodac route BEZ middleware: `$router->get('/info', [$infoController, 'show']);`
- Umiescic blisko innych publicznych tras (login, health)
</action>
<verify>Route /info zdefiniowana bez authMiddleware w routes/web.php</verify>
<done>AC-1 satisfied: strona /info dostepna bez logowania</done>
</task>
<task type="auto">
<name>Task 2: Layout publiczny i widok strony informacyjnej</name>
<files>resources/views/layouts/public.php, resources/views/info/allegro.php</files>
<action>
1. Utworzyc `resources/views/layouts/public.php`:
- Minimalistyczny layout HTML5 (bez sidebara, nawigacji, ani elementow aplikacji)
- Meta viewport dla mobile
- Inline style lub link do istniejacego CSS (uzyc minimalnych styli)
- Sekcja `<?= $content ?>` na tresc
2. Utworzyc `resources/views/info/allegro.php`:
- Tresc strony informacyjnej:
- **Nazwa aplikacji:** orderPRO
- **Wersja:** dynamicznie z przekazanej zmiennej
- **Opis:** "orderPRO to aplikacja do zarzadzania zamowieniami z wielu kanalow sprzedazy (Allegro, sklepy internetowe). Umozliwia centralne przetwarzanie zamowien, generowanie etykiet przewozowych i sledzenie przesylek."
- **Integracja z Allegro:** "Aplikacja korzysta z Allegro REST API do importu zamowien, zarzadzania przesylkami oraz synchronizacji statusow."
- **Kontakt:** email kontaktowy (uzyc zmiennej lub hardcode)
- Profesjonalny, minimalistyczny design
- Jezyk strony: polski
- Escape wszystkich zmiennych przez $e()
</action>
<verify>Pliki istnieja: resources/views/layouts/public.php i resources/views/info/allegro.php</verify>
<done>AC-2 i AC-3 satisfied: tresc informacyjna i profesjonalny wyglad</done>
</task>
<task type="checkpoint:human-verify" gate="blocking">
<what-built>Publiczna strona /info z opisem aplikacji orderPRO</what-built>
<how-to-verify>
1. Uruchom aplikacje lokalnie
2. Odwiedz: http://localhost:8000/info (lub odpowiedni URL)
3. Sprawdz: strona laduje sie BEZ logowania
4. Sprawdz: widoczna nazwa aplikacji, opis, informacja o Allegro API
5. Sprawdz: wyglad profesjonalny i czytelny
6. Sprawdz: na mobile (zmniejsz okno) strona jest responsywna
</how-to-verify>
<resume-signal>Type "approved" to continue, or describe issues to fix</resume-signal>
</task>
</tasks>
<boundaries>
## DO NOT CHANGE
- src/Modules/Auth/* (system autoryzacji)
- resources/views/layouts/app.php (layout aplikacji)
- Istniejace publiczne trasy (login, health, cron)
## SCOPE LIMITS
- Tylko jedna strona /info — bez podstron
- Nie dodawac nowych zaleznosci CSS/JS
- Nie tworzyc systemu CMS — statyczna tresc w widoku
</boundaries>
<verification>
Before declaring plan complete:
- [ ] GET /info zwraca 200 bez zalogowania
- [ ] Strona zawiera nazwe, opis i informacje o Allegro API
- [ ] Layout nie zawiera elementow aplikacji (sidebar, nawigacja)
- [ ] Brak regresji w istniejacych trasach
</verification>
<success_criteria>
- Strona /info dostepna publicznie pod URL z User-Agent
- Tresc zgodna z wymaganiami Allegro (cel aplikacji, dane kontaktowe)
- Profesjonalny wyglad bez elementow wewnetrznych aplikacji
</success_criteria>
<output>
After completion, create `.paul/phases/89-allegro-info-page/89-01-SUMMARY.md`
</output>

View File

@@ -0,0 +1,113 @@
---
phase: 89-allegro-info-page
plan: 01
subsystem: ui
tags: [allegro, info-page, public-route]
requires:
- phase: 88-allegro-user-agent
provides: User-Agent header with URL pointing to this page
provides:
- Public /info page for Allegro User-Agent URL
affects: []
tech-stack:
added: []
patterns: [public layout without app chrome]
key-files:
created:
- src/Modules/Info/InfoController.php
- resources/views/info/allegro.php
- resources/views/layouts/public.php
modified:
- routes/web.php
key-decisions:
- "Osobny layout public.php zamiast reuse auth.php — brak orbow/loginu w tle"
- "Inline style w layoutcie i widoku — brak potrzeby budowania SCSS dla jednej strony"
patterns-established:
- "layouts/public.php dla stron publicznych bez elementow aplikacji"
duration: ~5min
started: 2026-04-08T00:10:00Z
completed: 2026-04-08T00:15:00Z
---
# Phase 89 Plan 01: Allegro Info Page Summary
**Publiczna strona /info z opisem aplikacji orderPRO — wymagana przez Allegro w naglowku User-Agent**
## Performance
| Metric | Value |
|--------|-------|
| Duration | ~5min |
| Tasks | 3 completed (2 auto + 1 checkpoint) |
| Files created | 3 |
| Files modified | 1 |
## Acceptance Criteria Results
| Criterion | Status | Notes |
|-----------|--------|-------|
| AC-1: Strona /info dostepna publicznie | Pass | Route bez authMiddleware, brak przekierowania na login |
| AC-2: Tresc zgodna z wymaganiami Allegro | Pass | Nazwa, wersja, opis, integracja z Allegro API, kontakt |
| AC-3: Profesjonalny wyglad | Pass | Minimalistyczny layout, responsywny, bez elementow aplikacji |
## Accomplishments
- Utworzono publiczna strone /info dostepna bez logowania
- Nowy layout `layouts/public.php` do stron publicznych (bez sidebara/nawigacji)
- Tresc informacyjna: opis wewnetrznej aplikacji Project PRO, zakres integracji z Allegro API, dane kontaktowe
## Files Created/Modified
| File | Change | Purpose |
|------|--------|---------|
| `src/Modules/Info/InfoController.php` | Created | Kontroler strony /info |
| `resources/views/layouts/public.php` | Created | Minimalistyczny layout publiczny |
| `resources/views/info/allegro.php` | Created | Widok strony informacyjnej |
| `routes/web.php` | Modified | Route GET /info bez middleware |
## Decisions Made
| Decision | Rationale | Impact |
|----------|-----------|--------|
| Osobny layout public.php | Auth layout ma orby i styl loginu — nieodpowiedni dla strony info | Reusable layout dla przyszlych stron publicznych |
| Inline CSS zamiast SCSS | Jedna prosta strona, nie warto budowac SCSS | Brak zaleznosci od build pipeline |
## Deviations from Plan
### Auto-fixed Issues
**1. Bledny namespace Template**
- **Found during:** Checkpoint (human-verify)
- **Issue:** `App\Core\Template\Template` nie istnieje — poprawny to `App\Core\View\Template`
- **Fix:** Zmiana use statement w InfoController
- **Verification:** Strona /info laduje sie poprawnie
**2. Zmiana tresci na wewnetrzna aplikacje**
- **Found during:** Checkpoint (human-verify)
- **Issue:** Opis sugerowol aplikacje publiczna/SaaS
- **Fix:** Zmieniono na "wewnetrzna aplikacja firmy Project PRO, nieudostepniana publicznie"
- **Verification:** Tresc zgodna z rzeczywistym przeznaczeniem
## Issues Encountered
None beyond auto-fixed deviations.
## Next Phase Readiness
**Ready:**
- Strona /info dostepna pod URL z User-Agent (https://orderpro.pl/info)
- Pelna zgodnosc z wymaganiami Allegro art. 3.4.c (deadline 30.06.2026)
**Concerns:** None
**Blockers:** None
---
*Phase: 89-allegro-info-page, Plan: 01*
*Completed: 2026-04-08*