Refine seller onboarding and product review flows
This commit is contained in:
198
HANDOFF.md
Normal file
198
HANDOFF.md
Normal file
@ -0,0 +1,198 @@
|
||||
# Handoff
|
||||
|
||||
Project: `ina-trading-web`
|
||||
Current branch: `main`
|
||||
Latest verified commit: `b266047`
|
||||
|
||||
## Summary
|
||||
|
||||
This codebase has recent updates around product creation, edit, review, detail, admin review, stock/price editing, and backend request logging.
|
||||
|
||||
The latest build was verified successfully with:
|
||||
|
||||
```bash
|
||||
npm run build
|
||||
```
|
||||
|
||||
## Recent Commits
|
||||
|
||||
- `e9a0cd0` `Update product review, measurement, and backend logging flows`
|
||||
- `b266047` `Fix TypeScript build errors in product detail and admin review`
|
||||
|
||||
## Main Changes
|
||||
|
||||
### 1. Backend proxy logging
|
||||
|
||||
Files:
|
||||
- `src/lib/backend-fetch-logger.ts`
|
||||
- `src/instrumentation.ts`
|
||||
- `.env.local` uses `DEBUG_BACKEND_PROXY=true` locally
|
||||
|
||||
Behavior:
|
||||
- Logs server-side `fetch` requests to backend
|
||||
- Logs request method, URL, headers, body preview
|
||||
- Logs response status, duration, headers, body preview
|
||||
- Redacts authorization header
|
||||
|
||||
Use this when tracing frontend-to-backend failures in local dev.
|
||||
|
||||
## 2. Product measurement mode on add product
|
||||
|
||||
Files:
|
||||
- `src/app/(dashboard)/products/new/pricing/page.tsx`
|
||||
- `src/lib/use-product-submit.ts`
|
||||
- `src/app/(dashboard)/products/new/review/page.tsx`
|
||||
|
||||
Behavior:
|
||||
- Each model has a `Product Measurement` switch
|
||||
- When enabled:
|
||||
- nested measurements are shown
|
||||
- model-level price, currency, weight, dimensions, promotion, packaging, and warehouse stock are disabled
|
||||
- at least 1 measurement row is required
|
||||
- Submit payload uses `model.hasMeasurements`
|
||||
- When measurement mode is active, model-level numeric fields are zeroed and model warehouses are omitted
|
||||
|
||||
## 3. Product measurement mode on edit product
|
||||
|
||||
File:
|
||||
- `src/app/(dashboard)/products/[productId]/edit/page.tsx`
|
||||
|
||||
Behavior:
|
||||
- Matches add-product measurement behavior
|
||||
- Uses explicit `hasMeasurements` state instead of guessing from array length
|
||||
- Disables model-level fields when measurement mode is on
|
||||
|
||||
## 4. Seller product review page improvements
|
||||
|
||||
File:
|
||||
- `src/app/(dashboard)/products/new/review/page.tsx`
|
||||
|
||||
Behavior:
|
||||
- Review now renders actual product thumbnails using backend file URLs
|
||||
- Previously it only showed image indicators, which was confusing
|
||||
- Review also reflects measurement-based pricing correctly
|
||||
|
||||
## 5. Product list page improvements
|
||||
|
||||
File:
|
||||
- `src/app/(dashboard)/products/page.tsx`
|
||||
|
||||
Behavior:
|
||||
- Edit stock/price modal supports:
|
||||
- choosing model
|
||||
- choosing measurement if present
|
||||
- choosing warehouse
|
||||
- Warehouse labels use warehouse names from master warehouse API, not raw UUIDs
|
||||
- Product row status badges now show explicit state like active, draft, review, unpublished, deleted, rejected
|
||||
|
||||
## 6. Product detail page improvements
|
||||
|
||||
File:
|
||||
- `src/app/(dashboard)/products/[productId]/detail/page.tsx`
|
||||
|
||||
Behavior:
|
||||
- Main category now resolves even when backend omits `subCategory.category.name`
|
||||
- Warehouse display now uses warehouse master names instead of UUID slices
|
||||
- TypeScript nullability issue for category resolution was fixed here
|
||||
|
||||
## 7. Admin review page improvements
|
||||
|
||||
File:
|
||||
- `src/app/admin/review/[productId]/page.tsx`
|
||||
|
||||
Behavior:
|
||||
- Review supports model + measurement structures
|
||||
- New product review and compare review now handle measurement-driven price/weight/dimension/promo/stock
|
||||
- Compare view highlights updated sections using backend compare response and `isUpdate`
|
||||
- Product images are rendered using main image + gallery images
|
||||
- TypeScript issue around `row.field` nullability was fixed here
|
||||
|
||||
## 8. Sidebar submenu reliability
|
||||
|
||||
Files:
|
||||
- `src/components/product-submenu-nav.tsx`
|
||||
- `src/components/admin-product-submenu-nav.tsx`
|
||||
|
||||
Behavior:
|
||||
- Click behavior was hardened because submenu items were sometimes not navigating
|
||||
- Navigation is explicit via `router.push(...)`
|
||||
|
||||
## Translation Files Touched
|
||||
|
||||
- `src/lib/translations/id.ts`
|
||||
- `src/lib/translations/en.ts`
|
||||
|
||||
These include labels added for statuses and stock/price modal UI.
|
||||
|
||||
## Important Findings
|
||||
|
||||
### Admin review image issue
|
||||
|
||||
For at least one reviewed product, backend review payload returned:
|
||||
|
||||
- `image: null`
|
||||
- `imageId: null`
|
||||
- `productImages: []`
|
||||
|
||||
In that case frontend cannot render images. If an image is missing in review, verify backend review payload before debugging frontend.
|
||||
|
||||
### Edit product empty main image behavior
|
||||
|
||||
In edit product submit flow, empty `imageId` is currently sent as `undefined`, which means the field is omitted from JSON payload, not sent as `null` and not sent as empty string.
|
||||
|
||||
If backend requires explicit image removal via `null`, this behavior will need to be changed.
|
||||
|
||||
## Local Dev Notes
|
||||
|
||||
Run local dev:
|
||||
|
||||
```bash
|
||||
npm run dev
|
||||
```
|
||||
|
||||
Build verification:
|
||||
|
||||
```bash
|
||||
npm run build
|
||||
```
|
||||
|
||||
## Dev Server Update Guide
|
||||
|
||||
Based on current deployment notes, dev server update flow is:
|
||||
|
||||
```bash
|
||||
sudo -iu inadev
|
||||
cd ~/apps/ina-trading-web
|
||||
git pull origin main
|
||||
npm ci
|
||||
npm run build
|
||||
pm2 restart ina-trading-dev
|
||||
pm2 save
|
||||
sudo -iu inadev pm2 status
|
||||
```
|
||||
|
||||
Optional logs:
|
||||
|
||||
```bash
|
||||
sudo -iu inadev pm2 logs ina-trading-dev --lines 100
|
||||
```
|
||||
|
||||
## Suggested Next Checks
|
||||
|
||||
- Verify whether backend expects `null` when main image is intentionally removed during edit
|
||||
- Verify seller and admin review payload consistency for image fields
|
||||
- Verify warehouse master API always contains all warehouse IDs referenced in product payloads
|
||||
- If submenu click issue still appears, inspect layout overlays with browser tooling
|
||||
- Consider adding field-level compare highlighting, not only section-level highlighting, in admin review compare page
|
||||
|
||||
## Files Most Likely To Be Relevant Next
|
||||
|
||||
- `src/app/(dashboard)/products/new/pricing/page.tsx`
|
||||
- `src/app/(dashboard)/products/[productId]/edit/page.tsx`
|
||||
- `src/app/(dashboard)/products/new/review/page.tsx`
|
||||
- `src/app/(dashboard)/products/[productId]/detail/page.tsx`
|
||||
- `src/app/(dashboard)/products/page.tsx`
|
||||
- `src/app/admin/review/[productId]/page.tsx`
|
||||
- `src/lib/use-product-submit.ts`
|
||||
- `src/lib/backend-fetch-logger.ts`
|
||||
|
||||
Reference in New Issue
Block a user