Rene Fichtmueller
2f85571784
feat: Flexoptix full product detail sync (sql/115 + detail-enricher robot)
Pulls complete per-SKU specifications and compatibility data from the
Flexoptix API (specifications=1&compatibilities=1) and writes structured
fields to the transceivers table for datasheet generation.
SQL migration 115:
- Adds fx_specifications JSONB (raw spec blob for datasheet gen)
- Adds fx_compatibilities JSONB (full OEM compatibility matrix)
- Adds compliance_code, laser_type, receiver_type, supported_protocols[]
- Adds extinction_ratio_db, cdr_support, inbuilt_fec, detail_synced_at
- GIN index on fx_compatibilities for vendor/OPN queries
flexoptix-detail-enricher.ts:
- Per-SKU API calls with rate-limiting (600ms/call, 100 SKUs/run)
- Parses all spec labels → structured fields (power, budget, tx/rx dBm,
modulation, wavelengths, temp range, DOM, laser type, receiver type)
- Strips :Sx variant suffixes before API queries (self-configure SKUs)
- COALESCE writes — never overwrites existing data, only fills gaps
- Tracks detail_synced_at, retries stale entries after 7 days
flexoptix-api-sync.ts:
- Also stores image_url and product_page_url during bulk sync
scheduler.ts:
- Registers enrich:flexoptix-details daily at 03:00 UTC
Results after initial run:
- 791/968 FX products (81.7%) fully enriched
- 26.0 avg compatibility entries per product (OEM vendor + OPN)
- 25.7 avg spec fields per product
- DFB(483), EML(148), FP(72), VCSEL(44) laser type distribution
2026-05-13 18:49:28 +02:00
..
2026-03-27 16:27:31 +13:00
2026-03-27 16:27:31 +13:00
2026-03-27 16:27:31 +13:00
2026-03-27 16:27:31 +13:00
2026-03-28 00:22:01 +13:00
2026-03-29 02:26:45 +08:00
2026-03-29 02:26:45 +08:00
2026-03-29 02:26:45 +08:00
2026-03-29 02:26:45 +08:00
2026-03-29 02:26:45 +08:00
2026-03-29 02:26:45 +08:00
2026-03-30 08:07:12 +02:00
2026-03-31 08:51:22 +02:00
2026-03-31 08:51:22 +02:00
2026-03-31 09:12:37 +02:00
2026-03-31 09:12:37 +02:00
2026-04-04 15:41:57 +02:00
2026-04-01 21:26:13 +02:00
2026-04-01 22:04:33 +02:00
2026-04-01 22:46:27 +02:00
2026-04-01 23:16:50 +02:00
2026-04-02 02:02:44 +02:00
2026-04-04 08:15:32 +02:00
2026-04-04 08:30:27 +02:00
2026-04-05 11:51:07 +02:00
2026-04-04 15:41:57 +02:00
2026-04-06 02:22:00 +02:00
2026-04-06 02:22:00 +02:00
2026-04-17 22:54:40 +02:00
2026-04-09 20:29:46 +02:00
2026-04-09 20:29:46 +02:00
2026-04-09 09:09:23 +02:00
2026-04-09 20:29:46 +02:00
2026-04-09 20:34:27 +02:00
2026-04-17 10:45:59 +02:00
2026-04-17 10:45:59 +02:00
2026-04-17 10:45:59 +02:00
2026-04-17 22:54:40 +02:00
2026-04-17 22:54:40 +02:00
2026-04-18 00:09:08 +02:00
2026-04-20 23:16:52 +02:00
2026-04-20 22:56:53 +02:00
2026-04-20 23:17:41 +02:00
2026-04-20 23:23:23 +02:00
2026-04-20 23:31:36 +02:00
2026-04-21 00:41:31 +02:00
2026-04-21 07:07:24 +02:00
2026-04-21 08:11:57 +02:00
2026-04-21 07:57:55 +02:00
2026-04-21 07:57:55 +02:00
2026-04-21 07:57:55 +02:00
2026-04-21 08:11:57 +02:00
2026-04-21 08:42:14 +02:00
2026-04-21 08:42:14 +02:00
2026-04-21 08:42:14 +02:00
2026-04-21 08:42:14 +02:00
2026-04-21 09:48:30 +02:00
2026-04-21 09:50:46 +02:00
2026-04-21 09:55:22 +02:00
2026-04-21 09:55:22 +02:00
2026-04-21 09:55:22 +02:00
2026-04-21 09:56:11 +02:00
2026-04-21 10:10:32 +02:00
2026-04-21 10:10:32 +02:00
2026-04-21 10:16:51 +02:00
2026-04-21 10:18:51 +02:00
2026-04-21 11:34:38 +02:00
2026-04-21 11:34:38 +02:00
2026-04-21 11:34:38 +02:00
2026-04-21 11:34:38 +02:00
2026-04-21 11:34:38 +02:00
2026-04-21 11:34:38 +02:00
2026-04-21 11:34:38 +02:00
2026-04-21 11:34:38 +02:00
2026-04-21 14:30:42 +02:00
2026-04-21 14:30:42 +02:00
2026-04-21 14:49:29 +02:00
2026-04-21 14:49:29 +02:00
2026-04-21 14:49:29 +02:00
2026-04-21 15:01:39 +02:00
2026-04-21 15:01:39 +02:00
2026-04-21 16:00:36 +02:00
2026-04-21 16:00:36 +02:00
2026-04-21 21:20:47 +02:00
2026-04-21 21:20:47 +02:00
2026-04-21 21:20:47 +02:00
2026-04-21 22:03:08 +02:00
2026-04-21 22:13:54 +02:00
2026-04-21 22:20:19 +02:00
2026-04-21 22:23:13 +02:00
2026-04-21 22:39:06 +02:00
2026-04-21 23:02:25 +02:00
2026-04-21 23:09:46 +02:00
2026-04-25 07:48:57 +02:00
2026-04-25 07:51:15 +02:00
2026-04-25 13:38:11 +02:00
2026-04-25 08:55:21 +02:00
2026-04-25 08:55:21 +02:00
2026-04-25 16:37:16 +02:00
2026-04-25 13:38:11 +02:00
2026-04-25 17:44:20 +02:00
2026-04-25 20:58:45 +02:00
2026-04-25 20:58:45 +02:00
2026-05-13 16:36:33 +02:00
2026-05-09 23:06:21 +02:00
2026-05-10 00:03:42 +02:00
2026-05-10 01:16:49 +02:00
2026-05-10 10:13:09 +02:00
2026-05-10 10:23:07 +02:00
2026-05-13 16:55:45 +02:00
2026-05-13 16:55:45 +02:00
2026-05-13 17:35:42 +02:00
2026-05-13 17:38:43 +02:00
2026-05-13 17:35:42 +02:00
2026-05-13 17:59:08 +02:00
2026-05-13 17:59:08 +02:00
2026-05-13 18:49:28 +02:00