← back to Filemaker Mcp
scripts/create-dwtt-baxter-73433-35-36.mjs
85 lines
// One-off: create 3 missing WALLPAPER master records for Thibaut Baxter colorways
// (DWTT-73433 Navy, DWTT-73435 Beige, DWTT-73436 Silver). Specs verified against
// dw_unified.thibaut_catalog. Sibling DWTT73434 = recordId 536611 (mirrored style).
// CALC FIELDS (FM error 201 if written): combo sku, Dw Retail Price, comboskuwithdash,
// comboskuplussample — all omitted from the write; combo sku derives from Series+JS Pattern
// and Dw Retail Price from its pricing inputs. All verified post-create instead.
// Usage: node scripts/create-dwtt-baxter-73433-35-36.mjs [--commit]
// Default (no flags) = dry-run showing the exact fieldData; --commit creates + verifies.
import { readFileSync } from 'node:fs';
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';
const __dir = dirname(fileURLToPath(import.meta.url));
for (const line of readFileSync(join(__dir, '..', '.env'), 'utf8').split('\n')) {
const m = line.match(/^([A-Z_]+)=(.*)$/);
if (m && !process.env[m[1]]) process.env[m[1]] = m[2];
}
const { findRecords, createRecord } = await import('../src/fm-client.js');
const DB = 'WALLPAPER';
const LAYOUT = '*List Wallpapers - Shopify Detail Database';
const commit = process.argv.includes('--commit');
const COMMON = {
'Series': 'DWTT',
'vid': 'Thib',
'Width': '20.5"',
'Repeat': '5.5"',
'Record Type': 'Master',
'Date Line Put Up:': '7/1/2026',
'MFR MAP PRICE': '',
'Net Price': 56.70,
'Content': 'Non Woven',
'Mfr Name of Pattern': 'Baxter',
'Collection': 'SMALL SCALE',
};
// sku = expected value of the calc field "combo sku" (Series+JS Pattern) — guard/verify only.
const ROWS = [
{ sku: 'DWTT73433', 'JS Pattern': '73433', 'Mfr Pattern': 'AT79124', 'mfr pattern number': 'AT79124',
'Name of Pattern': 'Baxter, Navy Wallcoverings | Thibaut', 'Color of Pattern': 'Navy', 'Mfr Color of Pattern': 'Navy' },
{ sku: 'DWTT73435', 'JS Pattern': '73435', 'Mfr Pattern': 'AT79127', 'mfr pattern number': 'AT79127',
'Name of Pattern': 'Baxter, Beige Wallcoverings | Thibaut', 'Color of Pattern': 'Beige', 'Mfr Color of Pattern': 'Beige' },
{ sku: 'DWTT73436', 'JS Pattern': '73436', 'Mfr Pattern': 'AT79129', 'mfr pattern number': 'AT79129',
'Name of Pattern': 'Baxter, Silver Wallcoverings | Thibaut', 'Color of Pattern': 'Silver', 'Mfr Color of Pattern': 'Silver' },
];
for (const { sku, ...row } of ROWS) {
// fail-closed duplicate guard
let exists = false;
try {
const { records } = await findRecords(DB, LAYOUT, { 'combo sku': `==${sku}` }, { limit: 1 });
exists = records.length > 0;
if (exists) console.log(`SKIP ${sku}: already exists as recordId ${records[0].recordId}`);
} catch (e) {
if (e.fmCode !== '401') throw e; // 401 = no records match = safe to create
}
if (exists) continue;
const fieldData = { ...COMMON, ...row };
const res = await createRecord(DB, LAYOUT, fieldData, { dryRun: !commit });
console.log(commit ? `CREATED ${sku}:` : `DRY RUN ${sku}:`, JSON.stringify(res, null, 1));
if (commit) {
const { records } = await findRecords(DB, LAYOUT, { 'combo sku': `==${sku}` }, { limit: 2 });
const f = records[0]?.fieldData || {};
console.log(`VERIFY ${sku}:`, JSON.stringify({
recordId: records[0]?.recordId,
'combo sku': f['combo sku'],
'comboskuwithdash': f['comboskuwithdash'],
'comboskuplussample': f['comboskuplussample'],
'Mfr Pattern': f['Mfr Pattern'],
'mfr pattern number': f['mfr pattern number'],
'Name of Pattern': f['Name of Pattern'],
'Color of Pattern': f['Color of Pattern'],
'Dw Retail Price': f['Dw Retail Price'],
'Net Price': f['Net Price'],
'Width': f['Width'], 'Repeat': f['Repeat'],
'Record Type': f['Record Type'], 'Collection': f['Collection'], 'Content': f['Content'],
}, null, 1));
}
}