Files
microdao-daarion/docs/tasks/ASSETS_PROXY_MANUAL_TEST_PLAN.md

251 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Manual Test Plan — Assets Proxy Debugging
## Контекст
Після виправлення HEAD методу в city-service, логотипи та банери все ще не відображаються на фронті. Потрібно перевірити:
1. Які URL генерує фронт
2. Що реально повертає Next.js route
3. Чи web-сервіс оновлений до останнього коду
## Крок 1: Перевірка реальних запитів в браузері
### 1.1 Відкрити DevTools
1. Відкрити `https://daarion.space/microdao` у браузері
2. Відкрити DevTools (F12 або Cmd+Option+I)
3. Перейти на вкладку **Network**
4. Фільтр: **Img** (або All + фільтр за назвою банера/логотипа)
### 1.2 Знайти "биті" зображення
1. Знайти запити до зображень, які не завантажились (червоний статус або placeholder)
2. Клікнути по одному з них
3. Перевірити:
- **Request URL** (повний шлях)
- **Status** (200/404/500/...)
- **Response headers** → `Content-Type`, `Content-Length`
### 1.3 Аналіз URL
#### Якщо URL виглядає як `/_next/image?url=...`
→ Використовується Next `<Image>` з оптимізацією
**Рішення:**
- Або виставити `unoptimized` на компоненті
- Або налаштувати `next.config.ts` (domains) та переконатися, що `url` вказує на `/api/city/assets/proxy/...`
#### Якщо URL виглядає як `/api/city/assets/proxy/...`
→ Це правильний шлях через proxy
**Далі:**
1. Відкрити цей URL у новій вкладці браузера
2. Перевірити:
- Якщо картинка **відкривається** → проблема в Next `<Image>` / верстці
- Якщо не відкривається (404/500 або HTML-сторінка) → проблема в шляху або в проміжному Next route
## Крок 2: Перевірка оновлення web-сервісу
### 2.1 Перебудувати web-сервіс
На сервері (там де docker-compose):
```bash
cd /opt/microdao-daarion
git pull
docker compose -f docker-compose.web.yml build web
docker compose -f docker-compose.web.yml up -d --no-deps web
```
### 2.2 Hard refresh в браузері
Після перебудови:
1. Відкрити `https://daarion.space/microdao`
2. Зробити hard refresh:
- **Windows/Linux:** `Ctrl+Shift+R`
- **Mac:** `Cmd+Shift+R`
## Крок 3: Перевірка шляху в proxy
### 3.1 Скопіювати точний path
З Network tab в DevTools:
1. Знайти запит до `/api/city/assets/proxy/...`
2. Скопіювати точний path після `/api/city/assets/proxy/`
Наприклад: `microdao/banner/xyz.png`
### 3.2 Перевірка через city-service
На сервері (там де `city-service`):
```bash
# Перевірка через city-service (внутрішній Docker network)
docker exec daarion-city-service curl -i "http://localhost:7001/city/assets/proxy/microdao/banner/xyz.png"
```
### 3.3 Перевірка напряму у MinIO
```bash
# Перевірка напряму у MinIO (якщо є NGINX/MinIO url)
curl -I "https://assets.daarion.space/daarion-assets/microdao/banner/xyz.png"
```
### 3.4 Аналіз результатів
- Якщо другий запит (на MinIO) **200**, а перший ні → проблема в:
- `normalizeAssetUrl` неправильно обрізає/додає `daarion-assets/`
- Next route/NGINX "з'їдає" частину шляху
**Примітка:** Банери часто лежать в іншому префіксі, ніж логотипи, тому:
- Для логотипів `normalizeAssetUrl` може працювати (структура шляху співпала)
- Для банерів — ні (інший префікс, додатковий каталог, інший формат збереження в БД)
## Крок 4: Перевірка логів
### 4.1 Логи city-service
```bash
docker logs daarion-city-service | grep "assets/proxy"
```
Перевірити:
- Чи є запити на `/city/assets/proxy/...`
- Який статус (200/404/500)
- Чи є помилки
### 4.2 Логи web-сервісу
```bash
docker logs daarion-web | grep -E "assets|proxy|image"
```
Перевірити:
- Чи є запити на `/api/city/assets/proxy/...`
- Чи є помилки в Next.js route
## Крок 5: Перевірка normalizeAssetUrl
### 5.1 Перевірка вхідних даних з БД
```bash
# Отримати URL з БД для конкретного MicroDAO
curl -s "https://daarion.space/api/city/microdao/daarion" | jq '{logo_url, banner_url}'
```
### 5.2 Перевірка нормалізації
В браузері (Console в DevTools):
```javascript
// Тест normalizeAssetUrl
const testUrl = "https://assets.daarion.space/daarion-assets/microdao/logo/2025/12/02/abc123.png";
// Очікуваний результат: "/api/city/assets/proxy/microdao/logo/2025/12/02/abc123.png"
```
## Очікувані результати
### ✅ Успішний сценарій
1. **Network tab:**
- URL: `/api/city/assets/proxy/microdao/logo/2025/12/02/abc123.png`
- Status: `200 OK`
- Content-Type: `image/png`
- Зображення відображається
2. **Логи city-service:**
```
INFO: "GET /city/assets/proxy/microdao/logo/2025/12/02/abc123.png HTTP/1.1" 200 OK
```
3. **Прямий доступ до URL:**
- Відкривається зображення в новій вкладці
### ❌ Проблемні сценарії
#### Сценарій 1: 404 Not Found
**Симптоми:**
- Status: `404`
- Response: `Asset not found`
**Можливі причини:**
- Файл не існує в MinIO
- Неправильний path (зайвий/відсутній префікс `daarion-assets/`)
- Неправильна нормалізація URL
**Рішення:**
- Перевірити чи файл існує в MinIO
- Перевірити `normalizeAssetUrl` контракт
- Перевірити шлях в БД
#### Сценарій 2: 405 Method Not Allowed
**Симптоми:**
- Status: `405`
- Response: `Method Not Allowed`
**Можливі причини:**
- HEAD метод не підтримується (має бути виправлено)
- Next.js route не має HEAD handler
**Рішення:**
- Перевірити чи city-service має оновлений код
- Перевірити чи Next.js route має HEAD handler
#### Сценарій 3: 500 Internal Server Error
**Симптоми:**
- Status: `500`
- Response: `Internal Server Error`
**Можливі причини:**
- Помилка в city-service при доступі до MinIO
- Неправильні ENV змінні (MINIO_ENDPOINT, MINIO_ACCESS_KEY, тощо)
**Рішення:**
- Перевірити логи city-service
- Перевірити ENV змінні в docker-compose
#### Сценарій 4: Зображення не відображається, але статус 200
**Симптоми:**
- Status: `200 OK`
- Content-Type правильний
- Але зображення не відображається
**Можливі причини:**
- Next `<Image>` з оптимізацією блокує
- CSS/верстка приховує зображення
- CORS проблема
**Рішення:**
- Перевірити чи використовується `<img>` або `<Image>`
- Перевірити CSS стилі
- Перевірити CORS headers
## Чек-лист для швидкої перевірки
- [ ] Web-сервіс перебудовано з останнім кодом
- [ ] Hard refresh в браузері виконано
- [ ] Network tab показує запити на `/api/city/assets/proxy/...`
- [ ] Статус запитів: `200 OK`
- [ ] Content-Type: `image/png` або `image/jpeg`
- [ ] Прямий доступ до URL відкриває зображення
- [ ] Логи city-service показують успішні запити
- [ ] `normalizeAssetUrl` правильно конвертує URL з БД
## Наступні кроки після тестування
1. Зафіксувати результати тестування
2. Якщо є проблеми — зібрати:
- Точні URL з Network tab
- Логи city-service та web-сервісу
- Приклади URL з БД
3. Передати інформацію для подальшого виправлення