| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- const asin = process.env.ASIN || 'B0G8D23R1Q';
- const baseUrl = process.env.API_URL || 'http://127.0.0.1:3000/api/sorftime/forward';
- function unwrap(result) {
- let data = result?.data ?? result?.Data ?? result;
- while (data && typeof data === 'object' && !Array.isArray(data)
- && (data.data !== undefined || data.Data !== undefined)) {
- data = data.data ?? data.Data;
- }
- return data;
- }
- async function query(body) {
- const response = await fetch(baseUrl, {
- method: 'POST',
- headers: { 'Content-Type': 'application/json' },
- body: JSON.stringify({
- path: '/api/ProductReviewsQuery',
- method: 'POST',
- query: { domain: 1 },
- body,
- }),
- signal: AbortSignal.timeout(60000),
- });
- const result = await response.json();
- const data = unwrap(result);
- const reviews = data?.Reviews || data?.Items || data?.List || (Array.isArray(data) ? data : []);
- return {
- status: response.status,
- rows: reviews.map(review => ({
- id: review.ReviewId || review.Id || review.ID || review.id,
- date: review.ReviewsDate || review.ReviewDate || review.Date,
- star: review.Star || review.Rating,
- verified: review.OnlyPurchase || review.VerifiedPurchase,
- contentLength: String(review.Content || review.ReviewContent || review.Body || '').length,
- })),
- dataKeys: data && typeof data === 'object' ? Object.keys(data) : [],
- message: result?.message || result?.Message || '',
- };
- }
- const tests = [
- { label: 'year-page-1', body: { ASIN: asin, PageIndex: 1, OnlyPurchase: 0, Star: '1,2,3,4,5', QueryStartDt: '2025-09-18', QueryEndDt: '2026-09-18' } },
- { label: 'year-page-size-100', body: { ASIN: asin, PageIndex: 1, PageSize: 100, OnlyPurchase: 0, Star: '1,2,3,4,5', QueryStartDt: '2025-09-18', QueryEndDt: '2026-09-18' } },
- { label: 'year-page-2-alt', body: { ASIN: asin, Page: 2, OnlyPurchase: 0, Star: '1,2,3,4,5', QueryStartDt: '2025-09-18', QueryEndDt: '2026-09-18' } },
- { label: 'year-page-0', body: { ASIN: asin, PageIndex: 0, OnlyPurchase: 0, Star: '1,2,3,4,5', QueryStartDt: '2025-09-18', QueryEndDt: '2026-09-18' } },
- { label: 'recent-window', body: { ASIN: asin, PageIndex: 1, OnlyPurchase: 0, Star: '1,2,3,4,5', QueryStartDt: '2026-06-01', QueryEndDt: '2026-09-18' } },
- { label: 'older-window', body: { ASIN: asin, PageIndex: 1, OnlyPurchase: 0, Star: '1,2,3,4,5', QueryStartDt: '2025-09-18', QueryEndDt: '2026-05-31' } },
- ];
- for (const test of tests) {
- try {
- console.log(JSON.stringify({ label: test.label, body: test.body, result: await query(test.body) }));
- } catch (error) {
- console.log(JSON.stringify({ label: test.label, error: error.message }));
- }
- await new Promise(resolve => setTimeout(resolve, 500));
- }
|