[260204] 데이터 카테고리별 분리

This commit is contained in:
2026-02-04 11:25:24 +09:00
parent 6265a0b7c0
commit d4ccc616a7
6 changed files with 216 additions and 229 deletions

207
data.js
View File

@@ -1,207 +0,0 @@
const products = [
{
id: 'i3zgj4zl',
title: '플로럴 플로우러브',
price: 60000,
currency: '₩',
category: 'Games',
status: '판매중', //판매중, 판매예정, 미판매, 판매완료
description: '미개봉, 한정판, 일본판, 한글미지원',
fullDescription: [
'닌텐도 스위치 일본 내수용(JP) 패키지입니다.',
'인게임 한국어 자막을 공식 지원합니다.',
'',
'『완전생산한정판』 구성품:',
'• 특제 일러스트 아우터 박스',
'• 오리지널 사운드트랙 CD (미개봉)',
'• 풀컬러 아트북 (48P)',
'',
'보관용으로 구매하여 슈링크(비닐) 상태 매우 깨끗하며,',
'암소 보관하여 박스 변색이나 모서리 눌림 없습니다.',
'',
'',
'',
'',
],
images: ['/images/games/i3zgj4zl_01.jpg','/images/games/i3zgj4zl_02.jpg','/images/games/i3zgj4zl_03.jpg','/images/games/i3zgj4zl_04.jpg'],
customTag: '완전생산한정판',
specs: {
purchaseDate: '',
condition: 'Brand New (미개봉)',
isVerified: true,
},
},
{
id: 9,
title: 'iPhone 9 Pro',
price: 750000,
currency: '₩',
category: 'Design',
status: '판매예정', // 판매중, Sold
description: 'Sierra Blue, 256GB, Pristine condition.',
fullDescription: 'Pristine condition, used for less than 2 months. Battery health 99%.',
images: [
'https://lh3.googleusercontent.com/aida-public/AB6AXuCJW9hNp1uNfX6KZ1fyWZtxOEYdMb7hzRHsDrey6r63fcoisTxQTWWgL99dRcVZQJO1zZyI-HEU6cTgN-YEiXbqpbRZe0LqqC7bKp38y4i901ZuEnOdNXWyNVGNlfOGKG4z571bvFgX7qeVhH8VqsfP_ueAsCyLd9whzNZ-5KdsnR_nYvxO847cVKDMMFJpu347XFXo_QIaZK-Y4RLJAxa7Vv5E6OSrimV6zedPzkwp8yl7FvHbP-QLZ_lbQWZX-Lw6gTBAHiaoAkY',
'https://lh3.googleusercontent.com/aida-public/AB6AXuCOlUeqiUla7LkapcfcrnlTRF-bvdnD2tGTS8zjFgnxr6MNEwmTehjldThx6SCikcIP4-uUK4fbm1EFxj7XKKckJnQr8AunGsdWdgOlH5Fex0ML3uFw5fCnp997fuXQa2ceXdqXfiGDM17AdqB7tx9kxLoxEUXDxROSiH7I2-KFOweIR1-dBljEbeih1fQ1y_HACne_STdXKwGfrkPsHOXz-Ls7-MBW8uD1i5Mz64d3I8z4sO036qIlTNd2Iz4pqPxp7ucNkhrtQoc',
'https://lh3.googleusercontent.com/aida-public/AB6AXuA7hmGyvHzZaWVIskqdD5YU8lZM79hZ0JQjlKk75lRwcbonNCkKqS1EmRqbRzgcdq4AF6nOitcS23NvUZJ4aq_kt_pC2tG875KcVuro1hpXzdRixXHg5p0Dj0WTAaHyfc7GRWqFwOG3Sj0WOyXxULWDvKCR92rySu5iZz7hM6j73uP9i5QRRrkukQIzJWyx_KKmBc_uHX6v0MRn05_uttHQCtBeMUiabXwujqea0pay9fk7jC2mWHS5DaweeVv7SYuXSvypdJRZggs',
],
specs: {
purchaseDate: '2023-10',
condition: 'Mint (S-Grade)',
},
},
{
id: 8,
title: 'iPhone 8 Pro',
price: 750000,
currency: '₩',
category: 'Games',
status: '판매완료',
description: 'Sierra Blue, 256GB, Pristine condition.',
fullDescription: 'Pristine condition, used for less than 2 months. Battery health 99%.',
images: [
'https://lh3.googleusercontent.com/aida-public/AB6AXuCJW9hNp1uNfX6KZ1fyWZtxOEYdMb7hzRHsDrey6r63fcoisTxQTWWgL99dRcVZQJO1zZyI-HEU6cTgN-YEiXbqpbRZe0LqqC7bKp38y4i901ZuEnOdNXWyNVGNlfOGKG4z571bvFgX7qeVhH8VqsfP_ueAsCyLd9whzNZ-5KdsnR_nYvxO847cVKDMMFJpu347XFXo_QIaZK-Y4RLJAxa7Vv5E6OSrimV6zedPzkwp8yl7FvHbP-QLZ_lbQWZX-Lw6gTBAHiaoAkY',
'https://lh3.googleusercontent.com/aida-public/AB6AXuCOlUeqiUla7LkapcfcrnlTRF-bvdnD2tGTS8zjFgnxr6MNEwmTehjldThx6SCikcIP4-uUK4fbm1EFxj7XKKckJnQr8AunGsdWdgOlH5Fex0ML3uFw5fCnp997fuXQa2ceXdqXfiGDM17AdqB7tx9kxLoxEUXDxROSiH7I2-KFOweIR1-dBljEbeih1fQ1y_HACne_STdXKwGfrkPsHOXz-Ls7-MBW8uD1i5Mz64d3I8z4sO036qIlTNd2Iz4pqPxp7ucNkhrtQoc',
'https://lh3.googleusercontent.com/aida-public/AB6AXuA7hmGyvHzZaWVIskqdD5YU8lZM79hZ0JQjlKk75lRwcbonNCkKqS1EmRqbRzgcdq4AF6nOitcS23NvUZJ4aq_kt_pC2tG875KcVuro1hpXzdRixXHg5p0Dj0WTAaHyfc7GRWqFwOG3Sj0WOyXxULWDvKCR92rySu5iZz7hM6j73uP9i5QRRrkukQIzJWyx_KKmBc_uHX6v0MRn05_uttHQCtBeMUiabXwujqea0pay9fk7jC2mWHS5DaweeVv7SYuXSvypdJRZggs',
],
specs: {
purchaseDate: '2023-10',
condition: 'Mint (S-Grade)',
},
},
{
id: 7,
title: 'iPhone 7 Pro',
price: 750000,
currency: '₩',
category: 'Tech',
status: '판매예정', // 판매중, Sold
description: 'Sierra Blue, 256GB, Pristine condition.',
fullDescription: 'Pristine condition, used for less than 2 months. Battery health 99%.',
images: [
'https://lh3.googleusercontent.com/aida-public/AB6AXuCJW9hNp1uNfX6KZ1fyWZtxOEYdMb7hzRHsDrey6r63fcoisTxQTWWgL99dRcVZQJO1zZyI-HEU6cTgN-YEiXbqpbRZe0LqqC7bKp38y4i901ZuEnOdNXWyNVGNlfOGKG4z571bvFgX7qeVhH8VqsfP_ueAsCyLd9whzNZ-5KdsnR_nYvxO847cVKDMMFJpu347XFXo_QIaZK-Y4RLJAxa7Vv5E6OSrimV6zedPzkwp8yl7FvHbP-QLZ_lbQWZX-Lw6gTBAHiaoAkY',
'https://lh3.googleusercontent.com/aida-public/AB6AXuCOlUeqiUla7LkapcfcrnlTRF-bvdnD2tGTS8zjFgnxr6MNEwmTehjldThx6SCikcIP4-uUK4fbm1EFxj7XKKckJnQr8AunGsdWdgOlH5Fex0ML3uFw5fCnp997fuXQa2ceXdqXfiGDM17AdqB7tx9kxLoxEUXDxROSiH7I2-KFOweIR1-dBljEbeih1fQ1y_HACne_STdXKwGfrkPsHOXz-Ls7-MBW8uD1i5Mz64d3I8z4sO036qIlTNd2Iz4pqPxp7ucNkhrtQoc',
'https://lh3.googleusercontent.com/aida-public/AB6AXuA7hmGyvHzZaWVIskqdD5YU8lZM79hZ0JQjlKk75lRwcbonNCkKqS1EmRqbRzgcdq4AF6nOitcS23NvUZJ4aq_kt_pC2tG875KcVuro1hpXzdRixXHg5p0Dj0WTAaHyfc7GRWqFwOG3Sj0WOyXxULWDvKCR92rySu5iZz7hM6j73uP9i5QRRrkukQIzJWyx_KKmBc_uHX6v0MRn05_uttHQCtBeMUiabXwujqea0pay9fk7jC2mWHS5DaweeVv7SYuXSvypdJRZggs',
],
specs: {
purchaseDate: '2023-10',
condition: 'Mint (S-Grade)',
},
},
{
id: 6,
title: 'iPhone 6 Pro',
price: 750000,
currency: '₩',
category: 'Tech',
status: '판매중', // 판매중, Sold
description: 'Sierra Blue, 256GB, Pristine condition.',
fullDescription: 'Pristine condition, used for less than 2 months. Battery health 99%.',
images: [
'https://lh3.googleusercontent.com/aida-public/AB6AXuCJW9hNp1uNfX6KZ1fyWZtxOEYdMb7hzRHsDrey6r63fcoisTxQTWWgL99dRcVZQJO1zZyI-HEU6cTgN-YEiXbqpbRZe0LqqC7bKp38y4i901ZuEnOdNXWyNVGNlfOGKG4z571bvFgX7qeVhH8VqsfP_ueAsCyLd9whzNZ-5KdsnR_nYvxO847cVKDMMFJpu347XFXo_QIaZK-Y4RLJAxa7Vv5E6OSrimV6zedPzkwp8yl7FvHbP-QLZ_lbQWZX-Lw6gTBAHiaoAkY',
'https://lh3.googleusercontent.com/aida-public/AB6AXuCOlUeqiUla7LkapcfcrnlTRF-bvdnD2tGTS8zjFgnxr6MNEwmTehjldThx6SCikcIP4-uUK4fbm1EFxj7XKKckJnQr8AunGsdWdgOlH5Fex0ML3uFw5fCnp997fuXQa2ceXdqXfiGDM17AdqB7tx9kxLoxEUXDxROSiH7I2-KFOweIR1-dBljEbeih1fQ1y_HACne_STdXKwGfrkPsHOXz-Ls7-MBW8uD1i5Mz64d3I8z4sO036qIlTNd2Iz4pqPxp7ucNkhrtQoc',
'https://lh3.googleusercontent.com/aida-public/AB6AXuA7hmGyvHzZaWVIskqdD5YU8lZM79hZ0JQjlKk75lRwcbonNCkKqS1EmRqbRzgcdq4AF6nOitcS23NvUZJ4aq_kt_pC2tG875KcVuro1hpXzdRixXHg5p0Dj0WTAaHyfc7GRWqFwOG3Sj0WOyXxULWDvKCR92rySu5iZz7hM6j73uP9i5QRRrkukQIzJWyx_KKmBc_uHX6v0MRn05_uttHQCtBeMUiabXwujqea0pay9fk7jC2mWHS5DaweeVv7SYuXSvypdJRZggs',
],
specs: {
purchaseDate: '2023-10',
condition: 'Mint (S-Grade)',
},
},
{
id: 5,
title: 'iPhone 5 Pro',
price: 750000,
currency: '₩',
category: 'Tech',
status: '판매중', // 판매중, Sold
description: 'Sierra Blue, 256GB, Pristine condition.',
fullDescription: 'Pristine condition, used for less than 2 months. Battery health 99%.',
images: [
'https://lh3.googleusercontent.com/aida-public/AB6AXuCJW9hNp1uNfX6KZ1fyWZtxOEYdMb7hzRHsDrey6r63fcoisTxQTWWgL99dRcVZQJO1zZyI-HEU6cTgN-YEiXbqpbRZe0LqqC7bKp38y4i901ZuEnOdNXWyNVGNlfOGKG4z571bvFgX7qeVhH8VqsfP_ueAsCyLd9whzNZ-5KdsnR_nYvxO847cVKDMMFJpu347XFXo_QIaZK-Y4RLJAxa7Vv5E6OSrimV6zedPzkwp8yl7FvHbP-QLZ_lbQWZX-Lw6gTBAHiaoAkY',
'https://lh3.googleusercontent.com/aida-public/AB6AXuCOlUeqiUla7LkapcfcrnlTRF-bvdnD2tGTS8zjFgnxr6MNEwmTehjldThx6SCikcIP4-uUK4fbm1EFxj7XKKckJnQr8AunGsdWdgOlH5Fex0ML3uFw5fCnp997fuXQa2ceXdqXfiGDM17AdqB7tx9kxLoxEUXDxROSiH7I2-KFOweIR1-dBljEbeih1fQ1y_HACne_STdXKwGfrkPsHOXz-Ls7-MBW8uD1i5Mz64d3I8z4sO036qIlTNd2Iz4pqPxp7ucNkhrtQoc',
'https://lh3.googleusercontent.com/aida-public/AB6AXuA7hmGyvHzZaWVIskqdD5YU8lZM79hZ0JQjlKk75lRwcbonNCkKqS1EmRqbRzgcdq4AF6nOitcS23NvUZJ4aq_kt_pC2tG875KcVuro1hpXzdRixXHg5p0Dj0WTAaHyfc7GRWqFwOG3Sj0WOyXxULWDvKCR92rySu5iZz7hM6j73uP9i5QRRrkukQIzJWyx_KKmBc_uHX6v0MRn05_uttHQCtBeMUiabXwujqea0pay9fk7jC2mWHS5DaweeVv7SYuXSvypdJRZggs',
],
specs: {
purchaseDate: '2023-10',
condition: 'Mint (S-Grade)',
},
},
{
id: 4,
title: 'iPhone 4 Pro',
price: 750000,
currency: '₩',
category: 'Tech',
status: '판매중', // 판매중, Sold
description: 'Sierra Blue, 256GB, Pristine condition.',
fullDescription: 'Pristine condition, used for less than 2 months. Battery health 99%.',
images: [
'https://lh3.googleusercontent.com/aida-public/AB6AXuCJW9hNp1uNfX6KZ1fyWZtxOEYdMb7hzRHsDrey6r63fcoisTxQTWWgL99dRcVZQJO1zZyI-HEU6cTgN-YEiXbqpbRZe0LqqC7bKp38y4i901ZuEnOdNXWyNVGNlfOGKG4z571bvFgX7qeVhH8VqsfP_ueAsCyLd9whzNZ-5KdsnR_nYvxO847cVKDMMFJpu347XFXo_QIaZK-Y4RLJAxa7Vv5E6OSrimV6zedPzkwp8yl7FvHbP-QLZ_lbQWZX-Lw6gTBAHiaoAkY',
'https://lh3.googleusercontent.com/aida-public/AB6AXuCOlUeqiUla7LkapcfcrnlTRF-bvdnD2tGTS8zjFgnxr6MNEwmTehjldThx6SCikcIP4-uUK4fbm1EFxj7XKKckJnQr8AunGsdWdgOlH5Fex0ML3uFw5fCnp997fuXQa2ceXdqXfiGDM17AdqB7tx9kxLoxEUXDxROSiH7I2-KFOweIR1-dBljEbeih1fQ1y_HACne_STdXKwGfrkPsHOXz-Ls7-MBW8uD1i5Mz64d3I8z4sO036qIlTNd2Iz4pqPxp7ucNkhrtQoc',
'https://lh3.googleusercontent.com/aida-public/AB6AXuA7hmGyvHzZaWVIskqdD5YU8lZM79hZ0JQjlKk75lRwcbonNCkKqS1EmRqbRzgcdq4AF6nOitcS23NvUZJ4aq_kt_pC2tG875KcVuro1hpXzdRixXHg5p0Dj0WTAaHyfc7GRWqFwOG3Sj0WOyXxULWDvKCR92rySu5iZz7hM6j73uP9i5QRRrkukQIzJWyx_KKmBc_uHX6v0MRn05_uttHQCtBeMUiabXwujqea0pay9fk7jC2mWHS5DaweeVv7SYuXSvypdJRZggs',
],
specs: {
purchaseDate: '2023-10',
condition: 'Mint (S-Grade)',
},
},
{
id: 3,
title: 'iPhone 3 Pro',
price: 750000,
currency: '₩',
category: 'Tech',
status: '판매중', // 판매중, Sold
description: 'Sierra Blue, 256GB, Pristine condition.',
fullDescription: 'Pristine condition, used for less than 2 months. Battery health 99%.',
images: [
'https://lh3.googleusercontent.com/aida-public/AB6AXuCJW9hNp1uNfX6KZ1fyWZtxOEYdMb7hzRHsDrey6r63fcoisTxQTWWgL99dRcVZQJO1zZyI-HEU6cTgN-YEiXbqpbRZe0LqqC7bKp38y4i901ZuEnOdNXWyNVGNlfOGKG4z571bvFgX7qeVhH8VqsfP_ueAsCyLd9whzNZ-5KdsnR_nYvxO847cVKDMMFJpu347XFXo_QIaZK-Y4RLJAxa7Vv5E6OSrimV6zedPzkwp8yl7FvHbP-QLZ_lbQWZX-Lw6gTBAHiaoAkY',
'https://lh3.googleusercontent.com/aida-public/AB6AXuCOlUeqiUla7LkapcfcrnlTRF-bvdnD2tGTS8zjFgnxr6MNEwmTehjldThx6SCikcIP4-uUK4fbm1EFxj7XKKckJnQr8AunGsdWdgOlH5Fex0ML3uFw5fCnp997fuXQa2ceXdqXfiGDM17AdqB7tx9kxLoxEUXDxROSiH7I2-KFOweIR1-dBljEbeih1fQ1y_HACne_STdXKwGfrkPsHOXz-Ls7-MBW8uD1i5Mz64d3I8z4sO036qIlTNd2Iz4pqPxp7ucNkhrtQoc',
'https://lh3.googleusercontent.com/aida-public/AB6AXuA7hmGyvHzZaWVIskqdD5YU8lZM79hZ0JQjlKk75lRwcbonNCkKqS1EmRqbRzgcdq4AF6nOitcS23NvUZJ4aq_kt_pC2tG875KcVuro1hpXzdRixXHg5p0Dj0WTAaHyfc7GRWqFwOG3Sj0WOyXxULWDvKCR92rySu5iZz7hM6j73uP9i5QRRrkukQIzJWyx_KKmBc_uHX6v0MRn05_uttHQCtBeMUiabXwujqea0pay9fk7jC2mWHS5DaweeVv7SYuXSvypdJRZggs',
],
specs: {
purchaseDate: '2023-10',
condition: 'Mint (S-Grade)',
},
},
{
id: 2,
title: 'iPhone 2 Pro',
price: 750000,
currency: '₩',
category: 'Tech',
status: '판매중', // 판매중, Sold
description: 'Sierra Blue, 256GB, Pristine condition.',
fullDescription: 'Pristine condition, used for less than 2 months. Battery health 99%.',
images: [
'https://lh3.googleusercontent.com/aida-public/AB6AXuCJW9hNp1uNfX6KZ1fyWZtxOEYdMb7hzRHsDrey6r63fcoisTxQTWWgL99dRcVZQJO1zZyI-HEU6cTgN-YEiXbqpbRZe0LqqC7bKp38y4i901ZuEnOdNXWyNVGNlfOGKG4z571bvFgX7qeVhH8VqsfP_ueAsCyLd9whzNZ-5KdsnR_nYvxO847cVKDMMFJpu347XFXo_QIaZK-Y4RLJAxa7Vv5E6OSrimV6zedPzkwp8yl7FvHbP-QLZ_lbQWZX-Lw6gTBAHiaoAkY',
'https://lh3.googleusercontent.com/aida-public/AB6AXuCOlUeqiUla7LkapcfcrnlTRF-bvdnD2tGTS8zjFgnxr6MNEwmTehjldThx6SCikcIP4-uUK4fbm1EFxj7XKKckJnQr8AunGsdWdgOlH5Fex0ML3uFw5fCnp997fuXQa2ceXdqXfiGDM17AdqB7tx9kxLoxEUXDxROSiH7I2-KFOweIR1-dBljEbeih1fQ1y_HACne_STdXKwGfrkPsHOXz-Ls7-MBW8uD1i5Mz64d3I8z4sO036qIlTNd2Iz4pqPxp7ucNkhrtQoc',
'https://lh3.googleusercontent.com/aida-public/AB6AXuA7hmGyvHzZaWVIskqdD5YU8lZM79hZ0JQjlKk75lRwcbonNCkKqS1EmRqbRzgcdq4AF6nOitcS23NvUZJ4aq_kt_pC2tG875KcVuro1hpXzdRixXHg5p0Dj0WTAaHyfc7GRWqFwOG3Sj0WOyXxULWDvKCR92rySu5iZz7hM6j73uP9i5QRRrkukQIzJWyx_KKmBc_uHX6v0MRn05_uttHQCtBeMUiabXwujqea0pay9fk7jC2mWHS5DaweeVv7SYuXSvypdJRZggs',
],
specs: {
purchaseDate: '2023-10',
condition: 'Mint (S-Grade)',
},
},
{
id: 1,
title: 'iPhone 13 Pro',
price: 750000,
currency: '₩',
category: 'Tech',
status: '판매예정', // 판매중, Sold
description: 'Sierra Blue, 256GB, Pristine condition.',
fullDescription: 'Pristine condition, used for less than 2 months. Battery health 99%.',
images: [
'https://lh3.googleusercontent.com/aida-public/AB6AXuCJW9hNp1uNfX6KZ1fyWZtxOEYdMb7hzRHsDrey6r63fcoisTxQTWWgL99dRcVZQJO1zZyI-HEU6cTgN-YEiXbqpbRZe0LqqC7bKp38y4i901ZuEnOdNXWyNVGNlfOGKG4z571bvFgX7qeVhH8VqsfP_ueAsCyLd9whzNZ-5KdsnR_nYvxO847cVKDMMFJpu347XFXo_QIaZK-Y4RLJAxa7Vv5E6OSrimV6zedPzkwp8yl7FvHbP-QLZ_lbQWZX-Lw6gTBAHiaoAkY',
'https://lh3.googleusercontent.com/aida-public/AB6AXuCOlUeqiUla7LkapcfcrnlTRF-bvdnD2tGTS8zjFgnxr6MNEwmTehjldThx6SCikcIP4-uUK4fbm1EFxj7XKKckJnQr8AunGsdWdgOlH5Fex0ML3uFw5fCnp997fuXQa2ceXdqXfiGDM17AdqB7tx9kxLoxEUXDxROSiH7I2-KFOweIR1-dBljEbeih1fQ1y_HACne_STdXKwGfrkPsHOXz-Ls7-MBW8uD1i5Mz64d3I8z4sO036qIlTNd2Iz4pqPxp7ucNkhrtQoc',
'https://lh3.googleusercontent.com/aida-public/AB6AXuA7hmGyvHzZaWVIskqdD5YU8lZM79hZ0JQjlKk75lRwcbonNCkKqS1EmRqbRzgcdq4AF6nOitcS23NvUZJ4aq_kt_pC2tG875KcVuro1hpXzdRixXHg5p0Dj0WTAaHyfc7GRWqFwOG3Sj0WOyXxULWDvKCR92rySu5iZz7hM6j73uP9i5QRRrkukQIzJWyx_KKmBc_uHX6v0MRn05_uttHQCtBeMUiabXwujqea0pay9fk7jC2mWHS5DaweeVv7SYuXSvypdJRZggs',
],
specs: {
purchaseDate: '2023-10',
condition: 'Mint (S-Grade)',
},
},
// ... 추가 상품 데이터 (8~12개 이상)
];
export default products;

60
data/furniture.js Normal file
View File

@@ -0,0 +1,60 @@
const furniture = [
{
id: 'h2j5k8l1',
title: 'Artek Stool 60 Birch',
price: 280000,
currency: '₩',
category: 'Furniture',
status: '판매중',
description: '알바 알토 디자인, 핀란드 정품, 비치 내츄럴',
fullDescription: [
'북유럽 디자인의 아이콘, 아르텍 스툴 60입니다.',
'편집숍에서 구매한 핀란드 생산 정품입니다.',
'',
'상태:',
'• 상판 미세한 생활 기스 외 찍힘 없음',
'• 다리 연결부 흔들림 없이 견고함',
'',
'인테리어용으로만 두어 실제 앉은 횟수는 적습니다.',
],
images: ['/images/furniture/h2j5k8l1_01.jpg', '/images/furniture/h2j5k8l1_02.jpg'],
customTag: '정품',
specs: {
purchaseDate: '2023-05',
condition: 'Used (Good)',
isVerified: true,
},
tags: ['Chair', 'Finland', 'Iconic'],
createdAt: '2025-02-01',
updatedAt: '2025-02-01',
},
{
id: 'f9d3s7a4',
title: 'Hermer Miller Sayl Chair',
price: 650000,
currency: '₩',
category: 'Furniture',
status: '판매중',
description: '화이트 프레임, 오션블루 메쉬, 풀기능형',
fullDescription: [
'허먼밀러 세일 체어 풀옵션 모델입니다.',
'포워드 틸팅 및 팔걸이 조절 기능이 모두 포함되어 있습니다.',
'',
'판매 사유:',
'이사 후 방 분위기와 맞지 않아 다른 의자로 교체하게 되었습니다.',
'',
'좌판 오염 방지를 위해 항상 방석을 깔고 사용했습니다.',
],
images: ['/images/furniture/f9d3s7a4_01.jpg', '/images/furniture/f9d3s7a4_02.jpg'],
customTag: '풀옵션',
specs: {
purchaseDate: '2022-09',
condition: 'Used (Mint)',
isVerified: true,
},
tags: ['Office', 'HermanMiller', 'Chair'],
createdAt: '2025-02-03',
updatedAt: '2025-02-03',
}
];
export default furniture;

47
data/games.js Normal file
View File

@@ -0,0 +1,47 @@
const games = [
{
// [1] 시스템 및 메타 정보 (가장 먼저 확인하게 되는 고유값)
id: 'i3zgj4zl',
createdAt: '2024-05-20',
updatedAt: '2024-05-20',
// [2] 기본 판매 정보 (리스트 카드에 바로 노출될 핵심 정보)
title: '플로럴 플로우러브',
price: 60000,
currency: '₩',
category: 'Games',
status: '판매중',
customTag: '완전생산한정판', // 카드 위에 띄울 뱃지용
// [3] 분류 및 필터 정보 (중복 선택 및 검색용)
tags: ['Switch', 'Limited Edition', 'JP'],
// [4] 시각 및 요약 정보
images: ['/images/games/i3zgj4zl_01.jpg', '/images/games/i3zgj4zl_02.jpg', '/images/games/i3zgj4zl_03.jpg', '/images/games/i3zgj4zl_04.jpg'],
description: '미개봉, 한정판, 일본판, 한글미지원',
// [5] 상세 스펙 및 본문 (데이터 양이 가장 많으므로 하단 배치)
specs: {
purchaseDate: '',
condition: 'Brand New (미개봉)',
isVerified: true,
},
fullDescription: [
'닌텐도 스위치 일본 내수용(JP) 패키지입니다.',
'인게임 한국어 자막을 공식 지원합니다.',
'',
'『완전생산한정판』 구성품:',
'• 특제 일러스트 아우터 박스',
'• 오리지널 사운드트랙 CD (미개봉)',
'• 풀컬러 아트북 (48P)',
'',
'보관용으로 구매하여 슈링크(비닐) 상태 매우 깨끗하며,',
'암소 보관하여 박스 변색이나 모서리 눌림 없습니다.',
'',
'',
'',
'',
],
},
];
export default games;

15
data/index.js Normal file
View File

@@ -0,0 +1,15 @@
import games from './games.js';
import tech from './tech.js';
import furniture from './furniture.js';
// 1. 모든 배열을 하나로 합치기
const allData = [...games, ...tech, ...furniture];
// 2. 날짜순(최신순) 정렬: createdAt이 같은 경우 id로 2차 정렬
const products = allData.sort((a, b) => {
const dateDiff = new Date(b.createdAt) - new Date(a.createdAt);
if (dateDiff !== 0) return dateDiff;
return b.id.localeCompare(a.id);
});
export default products;

62
data/tech.js Normal file
View File

@@ -0,0 +1,62 @@
const tech = [
{
id: 'k7r2p9xm',
title: 'Keychron Q1 Knob Version',
price: 185000,
currency: '₩',
category: 'Tech',
status: '판매중',
description: '풀윤활 작업 완료, 노브 버전, 블루 스위치',
fullDescription: [
'키크론 Q1 QMK 커스텀 기계식 키보드입니다.',
'모든 스위치와 스테빌라이저 풀윤활 작업을 마쳐 서걱임이 없습니다.',
'',
'특징:',
'• CNC 알루미늄 바디 (네이비 컬러)',
'• 사우스페이싱 RGB LED',
'• 가스켓 마운트 구조로 쫀득한 타건감',
'',
'실사용 기간이 짧아 하우징에 스크래치 전혀 없으며,',
'풀박스 구성품 그대로 보관 중입니다.',
],
images: ['/images/tech/k7r2p9xm_01.jpg', '/images/tech/k7r2p9xm_02.jpg'],
customTag: '풀윤활완료',
specs: {
purchaseDate: '2024-01',
condition: 'Like New (S-Grade)',
isVerified: true,
},
tags: ['Keyboard', 'Mechanical', 'Custom'],
createdAt: '2025-01-15',
updatedAt: '2025-01-15',
},
{
id: 'n3m8v2ws',
title: 'Sony WH-1000XM5 Black',
price: 320000,
currency: '₩',
category: 'Tech',
status: '판매완료',
description: '정품 등록 가능, 배터리 상태 최상',
fullDescription: [
'소니의 최신 노이즈 캔슬링 헤드폰 XM5 블랙입니다.',
'실내에서만 가끔 사용하여 이어패드 갈라짐이나 오염 없습니다.',
'',
'구성품:',
'• 헤드폰 본체',
'• 전용 하드 케이스',
'• 미사용 오디오 케이블 및 충전 케이블',
],
images: ['/images/tech/n3m8v2ws_01.jpg', '/images/tech/n3m8v2ws_02.jpg', '/images/tech/n3m8v2ws_03.jpg'],
customTag: '급매',
specs: {
purchaseDate: '2023-11',
condition: 'Mint (A-Grade)',
isVerified: true,
},
tags: ['Audio', 'Headphones', 'Sony'],
createdAt: '2025-01-20',
updatedAt: '2025-01-20',
}
];
export default tech;

View File

@@ -1,4 +1,8 @@
import products from '/data.js';
// scripts/app.js 상단
import products from '../data/index.js';
// 이제 products는 모든 카테고리가 합쳐지고 날짜순으로 정렬된 상태입니다.
console.log('Total products loaded:', products.length);
const ITEMS_PER_PAGE = 20;
let currentPage = 1;
@@ -81,7 +85,6 @@ let activeStatuses = new Set(
.map(([status]) => status),
);
// openModal 함수 내부에 추가하거나 전역으로 설정
const copyBtn = document.getElementById('copy-link-btn');
const copyBtnText = document.getElementById('copy-btn-text');
@@ -89,13 +92,13 @@ const copyBtnText = document.getElementById('copy-btn-text');
copyBtn.onclick = () => {
// 현재 도메인 + 제품 ID 쿼리 조합
const shareUrl = `${window.location.origin}${window.location.pathname}?id=${product.id}`;
navigator.clipboard.writeText(shareUrl).then(() => {
copyBtnText.textContent = "링크가 복사되었습니다!";
copyBtnText.textContent = '링크가 복사되었습니다!';
copyBtn.classList.replace('bg-slate-900', 'bg-green-600');
setTimeout(() => {
copyBtnText.textContent = "상품 링크 복사하기";
copyBtnText.textContent = '상품 링크 복사하기';
copyBtn.classList.replace('bg-green-600', 'bg-slate-900');
}, 2000);
});
@@ -258,25 +261,34 @@ window.openModal = (id) => {
// --- 1. 이미지 및 UI 초기화 로직 ---
const loopImages = [images[images.length - 1], ...images, images[0]];
const mainImagesHtml = loopImages
.map(img => `
.map(
(img) => `
<div class="flex-shrink-0 w-full h-full snap-center flex items-center justify-center p-4 select-none">
<img src="${img}" draggable="false" class="max-w-full max-h-full object-contain pointer-events-none shadow-sm rounded-lg">
</div>
`).join('');
`,
)
.join('');
const thumbnailsHtml = product.images
.map((img, idx) => `
.map(
(img, idx) => `
<div onclick="scrollToImage(${idx})"
class="modal-thumb-item size-16 rounded-lg border-2 ${idx === 0 ? 'border-primary' : 'border-transparent'}
bg-cover bg-center overflow-hidden cursor-pointer ${idx === 0 ? 'opacity-100' : 'opacity-70'}
hover:opacity-100 transition-all flex-shrink-0"
style="background-image: url('${img}');"></div>
`).join('');
`,
)
.join('');
const dotsHtml = product.images
.map((_, idx) => `
.map(
(_, idx) => `
<div class="modal-dot-item ${idx === 0 ? 'w-4 bg-primary' : 'w-2 bg-gray-300 dark:bg-gray-700'} h-2 rounded-full transition-all"></div>
`).join('');
`,
)
.join('');
// --- 2. 데이터 주입 ---
document.getElementById('modal-main-carousel').innerHTML = mainImagesHtml;
@@ -313,7 +325,7 @@ window.openModal = (id) => {
// 상세 설명
const modalDesc = document.getElementById('modal-desc');
if (modalDesc) {
modalDesc.innerHTML = Array.isArray(product.fullDescription) ? product.fullDescription.join('<br>') : (product.fullDescription || '');
modalDesc.innerHTML = Array.isArray(product.fullDescription) ? product.fullDescription.join('<br>') : product.fullDescription || '';
}
// --- 3. [핵심] 링크 복사 버튼 이벤트 바인딩 ---
@@ -323,10 +335,10 @@ window.openModal = (id) => {
copyBtn.onclick = () => {
const shareUrl = `${window.location.origin}${window.location.pathname}?id=${product.id}`;
navigator.clipboard.writeText(shareUrl).then(() => {
if (copyBtnText) copyBtnText.textContent = "링크가 복사되었습니다!";
copyBtn.classList.add('!bg-green-600');
if (copyBtnText) copyBtnText.textContent = '링크가 복사되었습니다!';
copyBtn.classList.add('!bg-green-600');
setTimeout(() => {
if (copyBtnText) copyBtnText.textContent = "상품 링크 복사하기";
if (copyBtnText) copyBtnText.textContent = '상품 링크 복사하기';
copyBtn.classList.remove('!bg-green-600');
}, 2000);
});
@@ -351,7 +363,7 @@ window.openModal = (id) => {
window.closeModal = () => {
document.getElementById('product-modal').classList.add('hidden');
document.body.style.overflow = 'auto';
const cleanUrl = window.location.origin + window.location.pathname;
window.history.replaceState(null, '', cleanUrl);
};
@@ -627,15 +639,14 @@ document.addEventListener('DOMContentLoaded', () => {
checkUrlAndOpenModal();
});
function checkUrlAndOpenModal() {
const params = new URLSearchParams(window.location.search);
const productId = params.get('id'); // URL에서 가져온 ID (문자열)
if (productId) {
// 데이터의 id와 URL의 id를 모두 문자열로 변환하여 비교
const product = products.find((p) => String(p.id) === productId);
if (product) {
// DOM 렌더링 시간을 고려해 약간의 지연 후 모달 오픈
setTimeout(() => openModal(product.id), 100);
@@ -643,8 +654,7 @@ function checkUrlAndOpenModal() {
}
}
// [최종 ID 생성기] 매번 완전히 새로운 8자리 난수 출력
const newId = Math.random().toString(36).substring(2, 10);
console.log(`%c[NEW ID for data.js]: ${newId}`, "color: #137fec; font-weight: bold; border: 1px solid #137fec; padding: 2px 5px; border-radius: 4px;");
console.log(`%c[NEW ID for data.js]: ${newId}`, 'color: #137fec; font-weight: bold; border: 1px solid #137fec; padding: 2px 5px; border-radius: 4px;');