WIP: vendors
This commit is contained in:
@@ -5,22 +5,32 @@ function sluggify(str = '') {
|
|||||||
return (
|
return (
|
||||||
str
|
str
|
||||||
.toLocaleLowerCase()
|
.toLocaleLowerCase()
|
||||||
|
.normalize('NFKC')
|
||||||
.trim()
|
.trim()
|
||||||
//
|
//
|
||||||
.split(' ')
|
.split('.')
|
||||||
.join('-')
|
.join(' ')
|
||||||
.split('-/-')
|
|
||||||
.join('-')
|
|
||||||
.split('(')
|
.split('(')
|
||||||
.join('')
|
.join('')
|
||||||
.split(')')
|
.split(')')
|
||||||
.join('')
|
.join('')
|
||||||
|
.split('|')
|
||||||
|
.join(' ')
|
||||||
|
.trim()
|
||||||
|
.split(',')
|
||||||
|
.join('')
|
||||||
|
.split(' ')
|
||||||
|
.join('-')
|
||||||
|
.split('-/-')
|
||||||
|
.join('-')
|
||||||
.split(' &')
|
.split(' &')
|
||||||
.join('')
|
.join('')
|
||||||
.split('&')
|
.split('&')
|
||||||
.join('and')
|
.join('and')
|
||||||
.split('/')
|
.split('/')
|
||||||
.join('-')
|
.join('-')
|
||||||
|
.replace(/\-\-+/, '-')
|
||||||
|
.trim()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,70 +48,119 @@ function sanitize(str = '') {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function importCategories() {
|
||||||
|
all.results.map((one) => {
|
||||||
|
one.raw.marketplaceexhibitorcategory?.map(async (cat) => {
|
||||||
|
const name = sanitize(cat)
|
||||||
|
const slug = sluggify(name)
|
||||||
|
try {
|
||||||
|
await directus.items('categories').createOne({
|
||||||
|
slug,
|
||||||
|
name,
|
||||||
|
})
|
||||||
|
} catch (error) {}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
async function importSubcategories() {
|
||||||
|
all.results.map((one) => {
|
||||||
|
one.raw.marketplaceexhibitorsubcategory?.map(async (cat) => {
|
||||||
|
const name = sanitize(cat)
|
||||||
|
const slug = sluggify(name)
|
||||||
|
try {
|
||||||
|
await directus.items('categories').createOne({
|
||||||
|
slug,
|
||||||
|
name,
|
||||||
|
})
|
||||||
|
} catch (error) {}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
async function importCategoryStructure() {
|
||||||
|
const { data: categories } = await directus.items('categories').readByQuery({ limit: -1 })
|
||||||
|
|
||||||
|
all.results.map((one) => {
|
||||||
|
one.raw.marketplaceexhibitorcategorysubcategory?.map(async (cat) => {
|
||||||
|
const [parentTitle, catTitle] = cat.split('|')
|
||||||
|
const catSlug = sluggify(catTitle)
|
||||||
|
const parentSlug = sluggify(parentTitle)
|
||||||
|
if (parentSlug) {
|
||||||
|
try {
|
||||||
|
const category = categories.find((c) => catSlug === c.slug)
|
||||||
|
const parent = categories.find((c) => parentSlug === c.slug)
|
||||||
|
await directus.items('categories').updateOne(category.id, {
|
||||||
|
parent_id: parent.id,
|
||||||
|
})
|
||||||
|
} catch (error) {}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
async function importVendors() {
|
||||||
|
const { data: categories } = await directus.items('categories').readByQuery({ limit: -1 })
|
||||||
|
|
||||||
|
return Promise.all(
|
||||||
|
all.results.map(async (one) => {
|
||||||
|
const name = sanitize(one.raw.name)
|
||||||
|
let slug = sluggify(name)
|
||||||
|
const {
|
||||||
|
data: [existingVendor],
|
||||||
|
} = await directus.items('vendors').readByQuery({
|
||||||
|
fields: ['slug'],
|
||||||
|
limit: -1,
|
||||||
|
filter: {
|
||||||
|
slug: {
|
||||||
|
_eq: slug,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
let i = 1
|
||||||
|
while (existingVendor?.slug === slug) {
|
||||||
|
slug = sluggify(name) + '-' + i++
|
||||||
|
}
|
||||||
|
|
||||||
|
const categoryIds = new Set(
|
||||||
|
one.raw.marketplaceexhibitorcategory
|
||||||
|
?.map((t) => sluggify(sanitize(t)))
|
||||||
|
.map((s) => categories.filter((t) => !t.parent_id).find((t) => s === t.slug)?.id)
|
||||||
|
.filter((s) => !!s)
|
||||||
|
)
|
||||||
|
|
||||||
|
const vendor = {
|
||||||
|
slug,
|
||||||
|
name,
|
||||||
|
status: 'published',
|
||||||
|
description: one.raw?.description,
|
||||||
|
address_line_1: one.raw?.addressline1,
|
||||||
|
address_line_2: one.raw?.addressline2,
|
||||||
|
city: one.raw?.city,
|
||||||
|
state: one.raw?.state,
|
||||||
|
country: one.raw?.country,
|
||||||
|
website: one.raw?.website,
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const res = await directus.items('vendors').createOne(vendor)
|
||||||
|
categoryIds.forEach(async (cid) => {
|
||||||
|
await directus.items('vendors_categories').createOne({ vendors_id: res.id, categories_id: cid })
|
||||||
|
})
|
||||||
|
} catch (error) {}
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
export default async function Home() {
|
export default async function Home() {
|
||||||
// // Categories : marketplaceexhibitorcategory
|
// importCategories()
|
||||||
// all.results.map((one) => {
|
// importSubcategories()
|
||||||
// one.raw.marketplaceexhibitorcategory?.map(async (cat) => {
|
// importCategoryStructure()
|
||||||
// const slug = sluggify(cat)
|
// importVendors()
|
||||||
// try {
|
|
||||||
// await directus.items('categories').createOne({
|
|
||||||
// slug,
|
|
||||||
// name: sanitize(cat),
|
|
||||||
// })
|
|
||||||
// } catch (error) {}
|
|
||||||
// })
|
|
||||||
// })
|
|
||||||
|
|
||||||
// // Subcategories : marketplaceexhibitorsubcategory
|
|
||||||
// all.results.map((one) => {
|
|
||||||
// one.raw.marketplaceexhibitorsubcategory?.map(async (cat) => {
|
|
||||||
// const slug = sluggify(cat)
|
|
||||||
// try {
|
|
||||||
// await directus.items('categories').createOne({
|
|
||||||
// slug,
|
|
||||||
// name: sanitize(cat),
|
|
||||||
// })
|
|
||||||
// } catch (error) {}
|
|
||||||
// })
|
|
||||||
// })
|
|
||||||
|
|
||||||
// // Category structure : marketplaceexhibitorcategorysubcategory
|
|
||||||
// const { data: categories } = await directus.items('categories').readByQuery({ limit: -1 })
|
|
||||||
// all.results.map((one) => {
|
|
||||||
// one.raw.marketplaceexhibitorcategorysubcategory?.map(async (cat) => {
|
|
||||||
// const [parentTitle, catTitle] = cat.split('|')
|
|
||||||
// const catSlug = sluggify(catTitle)
|
|
||||||
// const parentSlug = sluggify(parentTitle)
|
|
||||||
// if (parentSlug) {
|
|
||||||
// try {
|
|
||||||
// const category = categories.find((c) => catSlug === c.slug)
|
|
||||||
// const parent = categories.find((c) => parentSlug === c.slug)
|
|
||||||
// await directus.items('categories').updateOne(category.id, {
|
|
||||||
// parent_id: parent.id,
|
|
||||||
// })
|
|
||||||
// } catch (error) {}
|
|
||||||
// }
|
|
||||||
// })
|
|
||||||
// })
|
|
||||||
|
|
||||||
// // Topics : industrytopicsubtopics
|
|
||||||
// all.results.map((one) => {
|
|
||||||
// one.raw.industrytopicsubtopics?.map(async (cat) => {
|
|
||||||
// const slug = sluggify(cat)
|
|
||||||
// try {
|
|
||||||
// await directus.items('topics').createOne({
|
|
||||||
// slug,
|
|
||||||
// name: sanitize(cat),
|
|
||||||
// })
|
|
||||||
// } catch (error) {}
|
|
||||||
// })
|
|
||||||
// })
|
|
||||||
// const { data: topics } = await directus.items('topics').readByQuery({ limit: -1 })
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<main>
|
<main>
|
||||||
<h1>Import {new Date().toISOString()}</h1>
|
<h1>Import {new Date().toISOString()}</h1>
|
||||||
{/* <pre>{JSON.stringify({ categories, topics }, null, 2)}</pre> */}
|
{/* <pre>{JSON.stringify(res, null, 2)} </pre> */}
|
||||||
</main>
|
</main>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
1652
schema/dump.sql
1652
schema/dump.sql
File diff suppressed because it is too large
Load Diff
@@ -1,6 +0,0 @@
|
|||||||
version: 1
|
|
||||||
directus: 11.0.1
|
|
||||||
vendor: sqlite
|
|
||||||
collections: []
|
|
||||||
fields: []
|
|
||||||
relations: []
|
|
||||||
Reference in New Issue
Block a user