From d4ccc616a702138aa08ba1ed58f775145fb332e0 Mon Sep 17 00:00:00 2001 From: zenn Date: Wed, 4 Feb 2026 11:25:24 +0900 Subject: [PATCH] =?UTF-8?q?[260204]=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20?= =?UTF-8?q?=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC=EB=B3=84=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data.js | 207 ---------------------------------------------- data/furniture.js | 60 ++++++++++++++ data/games.js | 47 +++++++++++ data/index.js | 15 ++++ data/tech.js | 62 ++++++++++++++ scripts/app.js | 54 +++++++----- 6 files changed, 216 insertions(+), 229 deletions(-) delete mode 100644 data.js create mode 100644 data/furniture.js create mode 100644 data/games.js create mode 100644 data/index.js create mode 100644 data/tech.js diff --git a/data.js b/data.js deleted file mode 100644 index fbe8182..0000000 --- a/data.js +++ /dev/null @@ -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; diff --git a/data/furniture.js b/data/furniture.js new file mode 100644 index 0000000..9ede82d --- /dev/null +++ b/data/furniture.js @@ -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; \ No newline at end of file diff --git a/data/games.js b/data/games.js new file mode 100644 index 0000000..30ae835 --- /dev/null +++ b/data/games.js @@ -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; diff --git a/data/index.js b/data/index.js new file mode 100644 index 0000000..3ed6a0c --- /dev/null +++ b/data/index.js @@ -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; \ No newline at end of file diff --git a/data/tech.js b/data/tech.js new file mode 100644 index 0000000..1da1bbd --- /dev/null +++ b/data/tech.js @@ -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; \ No newline at end of file diff --git a/scripts/app.js b/scripts/app.js index 03e4cba..db42404 100644 --- a/scripts/app.js +++ b/scripts/app.js @@ -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) => `
- `).join(''); + `, + ) + .join(''); const thumbnailsHtml = product.images - .map((img, idx) => ` + .map( + (img, idx) => ` - `).join(''); + `, + ) + .join(''); const dotsHtml = product.images - .map((_, idx) => ` + .map( + (_, idx) => ` - `).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('
') : (product.fullDescription || ''); + modalDesc.innerHTML = Array.isArray(product.fullDescription) ? product.fullDescription.join('
') : 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;"); \ No newline at end of file +console.log(`%c[NEW ID for data.js]: ${newId}`, 'color: #137fec; font-weight: bold; border: 1px solid #137fec; padding: 2px 5px; border-radius: 4px;');