rebours/seed-sanity.mjs
2026-03-30 18:03:12 +02:00

129 lines
5.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { createClient } from '@sanity/client'
import { readFileSync } from 'fs'
import { resolve } from 'path'
import dotenv from 'dotenv'
dotenv.config()
const client = createClient({
projectId: process.env.SANITY_PROJECT_ID,
dataset: process.env.SANITY_DATASET || 'production',
apiVersion: '2024-01-01',
useCdn: false,
token: process.env.SANITY_API_TOKEN,
})
// ── Upload image to Sanity ─────────────────────────────────────────────────
async function uploadImage(filePath, filename) {
const buffer = readFileSync(resolve(filePath))
const asset = await client.assets.upload('image', buffer, { filename })
console.log(` ✓ Image uploaded: ${filename}${asset._id}`)
return asset._id
}
// ── Products data ──────────────────────────────────────────────────────────
const PRODUCTS = [
{
name: 'Solar_Altar',
productDisplayName: 'Solar Altar',
slug: { _type: 'slug', current: 'solar-altar' },
sortOrder: 0,
index: 'PROJET_001',
type: 'LAMPE DE TABLE',
materials: 'BÉTON TEXTURÉ + DÔME CÉRAMIQUE LAQUÉ',
year: '2026',
status: 'PROTOTYPE [80%]',
description: 'Exploration de la lumière à travers des contraintes géométriques. Le dôme sphérique en céramique laquée coiffe un corps en béton texturé peint à la main. Chaque pièce est unique.',
specs: 'H: 45cm / Ø: 18cm\nPoids: 3.2kg\nAlimentation: 220V — E27\nCâble: tressé rouge 2m',
notes: 'Inspiré des lampadaires soviétiques des années 60. Le béton est coulé à la main dans des moules uniques. La peinture acrylique est appliquée au spalter.',
imageFile: 'public/assets/lamp-violet.jpg',
imageAlt: 'Solar Altar — Lampe béton violet, dôme céramique bleu, REBOURS 2026',
seoTitle: 'REBOURS — Solar Altar | Collection 001',
seoDescription: 'Lampe de table unique. Béton texturé coulé à la main + dôme céramique laqué. Pièce unique fabriquée à Paris.',
price: 180000,
currency: 'EUR',
availability: 'https://schema.org/LimitedAvailability',
isPublished: true,
},
{
name: 'TABLE_TERRAZZO',
productDisplayName: 'Table Terrazzo',
slug: { _type: 'slug', current: 'table-terrazzo' },
sortOrder: 1,
index: 'PROJET_002',
type: 'TABLE BASSE + ÉTAGÈRE MODULAIRE',
materials: 'TERRAZZO + ACIER TUBULAIRE + RÉSINE',
year: '2026',
status: 'STRUCTURAL_TEST',
description: "Collision du brutalisme et de la couleur Memphis. Le plateau en terrazzo fait à la main intègre des inclusions de marbre rose et bleu. Les colonnes cylindriques bicolores sont en acier peint au four.",
specs: 'Table: L120 × P60 × H38cm\nPoids plateau: 28kg\nPieds: acier Ø60mm\nÉtagère: H180 × L80 × P35cm',
notes: "Le terrazzo est réalisé dans l'atelier de Pantin. Chaque dalle est unique. L'étagère est assemblée à partir de tubes industriels récupérés et de panneaux laqués.",
imageFile: 'public/assets/table-terrazzo.jpg',
imageAlt: 'TABLE TERRAZZO — Table basse terrazzo et étagère acier, REBOURS 2026',
seoTitle: 'REBOURS — TABLE TERRAZZO | Collection 001',
seoDescription: 'Table basse et étagère modulaire. Terrazzo fait main + acier tubulaire. Pièce unique fabriquée à Paris.',
price: null,
currency: 'EUR',
availability: 'https://schema.org/PreOrder',
isPublished: true,
},
{
name: 'MODULE_SÉRIE',
productDisplayName: 'Module Série',
slug: { _type: 'slug', current: 'module-serie' },
sortOrder: 2,
index: 'PROJET_003',
type: 'LAMPES — SÉRIE LIMITÉE',
materials: 'BÉTON COLORÉ + DÔME LAQUÉ + NÉON',
year: '2026',
status: 'FINAL_ASSEMBLY',
description: "Série de 7 lampes aux corps béton colorés, chacune avec un dôme d'une couleur différente. Les néons horizontaux créent un anneau lumineux entre le dôme et le corps.",
specs: 'H: 3565cm (7 tailles)\nDôme: Ø1528cm\nAnneau néon: 8W — 3000K\nÉdition: 7 ex. par coloris',
notes: 'Les corps sont coulés en série mais peints individuellement. Les dômes sont réalisés par un souffleur de verre artisanal. Le câble tressé rouge est la signature de la série.',
imageFile: 'public/assets/lampes-serie.jpg',
imageAlt: 'MODULE SÉRIE — Collection de 7 lampes béton colorées, REBOURS 2026',
seoTitle: 'REBOURS — MODULE SÉRIE | Collection 001',
seoDescription: 'Série de 7 lampes béton colorées, dôme laqué et néon. Édition limitée fabriquée à Paris.',
price: null,
currency: 'EUR',
availability: 'https://schema.org/PreOrder',
isPublished: true,
},
]
// ── Seed ───────────────────────────────────────────────────────────────────
async function seed() {
console.log('🌱 Seeding Sanity...\n')
for (const product of PRODUCTS) {
const { imageFile, imageAlt, ...data } = product
// Upload image
console.log(`📦 ${product.name}`)
const imageAssetId = await uploadImage(imageFile, imageFile.split('/').pop())
// Create document
const doc = {
_type: 'product',
...data,
image: {
_type: 'image',
alt: imageAlt,
asset: { _type: 'reference', _ref: imageAssetId },
},
}
const result = await client.create(doc)
console.log(` ✓ Created: ${result._id}\n`)
}
console.log('✅ Seed complete!')
}
seed().catch((err) => {
console.error('❌ Seed failed:', err.message)
process.exit(1)
})