import { createProductSKUs } from 'lib/helpers/skus'; import { getProducts } from 'lib/shopify'; import { Dropbox, DropboxResponse, files } from 'dropbox'; // how to get new Dropbox refresh token // 1. go to https://www.dropbox.com/oauth2/authorize?client_id=YOUR_APP_KEY&token_access_type=offline&response_type=code&redirect_uri=https://www.dropbox.com/1/oauth2/display_token // 2. copy code from URL after redirect // 3. curl // curl -X POST https://api.dropboxapi.com/oauth2/token \ // -d 'grant_type=authorization_code' \ // -d 'code=CODE_HERE' \ // -d 'client_id=CLIENT_ID' \ // -d 'client_secret=CLIENT_SECRET' \ // -d 'redirect_uri=https://www.dropbox.com/1/oauth2/display_token' export default async function SKUCheckPage() { const products = await getProducts({}); let dbxFiles: DropboxResponse | undefined; let dbxError: string | undefined; try { const dbx = new Dropbox({ clientId: process.env.DROPBOX_APP_KEY, clientSecret: process.env.DROPBOX_APP_SECRET, refreshToken: process.env.DROPBOX_REFRESH_TOKEN }); dbxFiles = await dbx.filesListFolder({ path: '/scape squared/004 print ready - print files' }); // sabotage? // dbxFiles.result.entries = dbxFiles.result.entries.filter(file => file.name !== "SCSQ300262_NECK.png"); } catch (e) { dbxError = e + "" } return (
{products.map((product) => { const skus = createProductSKUs(product.title); if (!skus) return
SKU error for product {product.title}
// sabotage? // product.variants[3]!.sku = 'SCSQ10001_STTU781_M_C002_B_NT'; const productCode = skus[0]!.split('_')[0] const productBase = productCode!.slice(0, (productCode!.length -1)) const productFiles = dbxFiles?.result.entries .filter((file) => file.name.startsWith(productBase!)) const productFileNames = productFiles?.map(file => file.name); const sizeDigits = ["1", "2", "3"]; const sideSuffixes = ["_NECK.png", "_BACK.png"]; const expectedFiles = sizeDigits.flatMap((sizeDigit) => sideSuffixes.flatMap((sideSuffix) => productBase + sizeDigit + sideSuffix) ); const missingFiles = expectedFiles.filter(expected => !productFileNames?.includes(expected)); const extraFiles = productFileNames?.filter(filename => !expectedFiles.includes(filename)); return (

{product.title}

0 ? 'bg-amber-300' : '') } > Dropbox:{' '} {missingFiles.length === 0 ? '✅ All expected files found' : '⛔️ Missing files: ' + missingFiles.join(', ')} {extraFiles &&
(Extra files: {extraFiles.join(", ")})
} {dbxError}
{product.variants.map((variant, i) => ( <>
{variant.selectedOptions[0]?.value}
{variant.sku.split('').map((letter, lIdx) => ( {letter} {letter === skus[i]![lIdx] ? null : (
)} ))}{' '} (Shopify)
{skus[i]} (Expected)
))}
); })}
); }