129 lines
5.7 KiB
JavaScript
129 lines
5.7 KiB
JavaScript
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: 35–65cm (7 tailles)\nDôme: Ø15–28cm\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)
|
||
})
|