From d22c58aacb2ca8807267aa4e51da710d3af916f1 Mon Sep 17 00:00:00 2001 From: dongseop Date: Mon, 3 Nov 2025 11:03:02 +0900 Subject: [PATCH] =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 + .prettierrc | 8 + app.js | 20 + middlewares/errorHandler.js | 5 + middlewares/upload.js | 16 + middlewares/validation.js | 7 + package-lock.json | 1799 +++++++++++++++++ package.json | 24 + .../migrations/20251028023250_/migration.sql | 61 + .../migrations/20251028054044/migration.sql | 22 + prisma/migrations/migration_lock.toml | 3 + prisma/mock.js | 69 + prisma/schema.prisma | 63 + prisma/seed.js | 92 + routes/articles.js | 88 + routes/comments.js | 112 + routes/products.js | 124 ++ structs.js | 23 + uploads/LG.jpg | Bin 0 -> 32387 bytes "uploads/\354\202\274\354\204\261.jpg" | Bin 0 -> 42613 bytes "uploads/\354\225\240\355\224\214.jpg" | Bin 0 -> 36776 bytes 21 files changed, 2540 insertions(+) create mode 100644 .gitignore create mode 100644 .prettierrc create mode 100644 app.js create mode 100644 middlewares/errorHandler.js create mode 100644 middlewares/upload.js create mode 100644 middlewares/validation.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 prisma/migrations/20251028023250_/migration.sql create mode 100644 prisma/migrations/20251028054044/migration.sql create mode 100644 prisma/migrations/migration_lock.toml create mode 100644 prisma/mock.js create mode 100644 prisma/schema.prisma create mode 100644 prisma/seed.js create mode 100644 routes/articles.js create mode 100644 routes/comments.js create mode 100644 routes/products.js create mode 100644 structs.js create mode 100644 uploads/LG.jpg create mode 100644 "uploads/\354\202\274\354\204\261.jpg" create mode 100644 "uploads/\354\225\240\355\224\214.jpg" diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..17ab8b0e --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +node_modules/ +.env +__http__ +/generated/prisma diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 00000000..351ac92b --- /dev/null +++ b/.prettierrc @@ -0,0 +1,8 @@ +{ + "singleQuote": true, + "trailingComma": "all", + "semi": true, + "printWidth": 100, + "endOfLine": "auto", + "arrowParens": "always" +} diff --git a/app.js b/app.js new file mode 100644 index 00000000..d7aa5483 --- /dev/null +++ b/app.js @@ -0,0 +1,20 @@ +import express from 'express'; +import cors from 'cors'; +import { errorHandler } from './middlewares/errorHandler.js'; +import productRouter from './routes/products.js'; +import articleRouter from './routes/articles.js'; +import commentRouter from './routes/comments.js'; + +const app = express(); +app.use(cors()); +app.use(express.json()); +app.use('/uploads', express.static('uploads')); // 이미지 접근 +app.use('/products', productRouter); +app.use('/articles', articleRouter); +app.use('/comments', commentRouter); + +app.use(errorHandler); + +app.listen(process.env.PORT || 3000, () => { + console.log('Server running...'); +}); diff --git a/middlewares/errorHandler.js b/middlewares/errorHandler.js new file mode 100644 index 00000000..4a04fe54 --- /dev/null +++ b/middlewares/errorHandler.js @@ -0,0 +1,5 @@ +export const errorHandler = (err, req, res, next) => { + console.error(err); + if (res.headersSent) return next(err); + res.status(err.status || 500).json({ error: err.message || 'Internal Server Error' }); +}; diff --git a/middlewares/upload.js b/middlewares/upload.js new file mode 100644 index 00000000..c1f1f5b6 --- /dev/null +++ b/middlewares/upload.js @@ -0,0 +1,16 @@ +import multer from 'multer'; +import path from 'path'; +import fs from 'fs'; + +const uploadDir = 'uploads/'; + +if (!fs.existsSync(uploadDir)) { + fs.mkdirSync(uploadDir); +} + +const storage = multer.diskStorage({ + destination: (req, file, cb) => cb(null, uploadDir), + filename: (req, file, cb) => cb(null, Date.now() + path.extname(file.originalname)), +}); + +export const upload = multer({ storage }); diff --git a/middlewares/validation.js b/middlewares/validation.js new file mode 100644 index 00000000..97394edd --- /dev/null +++ b/middlewares/validation.js @@ -0,0 +1,7 @@ +export const validate = (struct) => (req, res, next) => { + const [error] = struct.validate(req.body); + if (error) { + return res.status(400).json({ error: error.message }); + } + next(); +}; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..600e1c96 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1799 @@ +{ + "name": "6-sprint-mission", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "@prisma/client": "^6.18.0", + "cors": "^2.8.5", + "dotenv": "^16.3.1", + "express": "^4.21.2", + "is-email": "^1.0.2", + "is-uuid": "^1.0.2", + "multer": "^2.0.2", + "superstruct": "^1.0.4" + }, + "devDependencies": { + "nodemon": "^3.0.1", + "prisma": "^6.18.0" + } + }, + "node_modules/@prisma/client": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.18.0.tgz", + "integrity": "sha512-jnL2I9gDnPnw4A+4h5SuNn8Gc+1mL1Z79U/3I9eE2gbxJG1oSA+62ByPW4xkeDgwE0fqMzzpAZ7IHxYnLZ4iQA==", + "hasInstallScript": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "peerDependencies": { + "prisma": "*", + "typescript": ">=5.1.0" + }, + "peerDependenciesMeta": { + "prisma": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@prisma/config": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.18.0.tgz", + "integrity": "sha512-rgFzspCpwsE+q3OF/xkp0fI2SJ3PfNe9LLMmuSVbAZ4nN66WfBiKqJKo/hLz3ysxiPQZf8h1SMf2ilqPMeWATQ==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "c12": "3.1.0", + "deepmerge-ts": "7.1.5", + "effect": "3.18.4", + "empathic": "2.0.0" + } + }, + "node_modules/@prisma/debug": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.18.0.tgz", + "integrity": "sha512-PMVPMmxPj0ps1VY75DIrT430MoOyQx9hmm174k6cmLZpcI95rAPXOQ+pp8ANQkJtNyLVDxnxVJ0QLbrm/ViBcg==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@prisma/engines": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.18.0.tgz", + "integrity": "sha512-i5RzjGF/ex6AFgqEe2o1IW8iIxJGYVQJVRau13kHPYEL1Ck8Zvwuzamqed/1iIljs5C7L+Opiz5TzSsUebkriA==", + "devOptional": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.18.0", + "@prisma/engines-version": "6.18.0-8.34b5a692b7bd79939a9a2c3ef97d816e749cda2f", + "@prisma/fetch-engine": "6.18.0", + "@prisma/get-platform": "6.18.0" + } + }, + "node_modules/@prisma/engines-version": { + "version": "6.18.0-8.34b5a692b7bd79939a9a2c3ef97d816e749cda2f", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.18.0-8.34b5a692b7bd79939a9a2c3ef97d816e749cda2f.tgz", + "integrity": "sha512-T7Af4QsJQnSgWN1zBbX+Cha5t4qjHRxoeoWpK4JugJzG/ipmmDMY5S+O0N1ET6sCBNVkf6lz+Y+ZNO9+wFU8pQ==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@prisma/fetch-engine": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.18.0.tgz", + "integrity": "sha512-TdaBvTtBwP3IoqVYoGIYpD4mWlk0pJpjTJjir/xLeNWlwog7Sl3bD2J0jJ8+5+q/6RBg+acb9drsv5W6lqae7A==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.18.0", + "@prisma/engines-version": "6.18.0-8.34b5a692b7bd79939a9a2c3ef97d816e749cda2f", + "@prisma/get-platform": "6.18.0" + } + }, + "node_modules/@prisma/get-platform": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.18.0.tgz", + "integrity": "sha512-uXNJCJGhxTCXo2B25Ta91Rk1/Nmlqg9p7G9GKh8TPhxvAyXCvMNQoogj4JLEUy+3ku8g59cpyQIKFhqY2xO2bg==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.18.0" + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==", + "license": "MIT" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/c12": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/c12/-/c12-3.1.0.tgz", + "integrity": "sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.3", + "confbox": "^0.2.2", + "defu": "^6.1.4", + "dotenv": "^16.6.1", + "exsolve": "^1.0.7", + "giget": "^2.0.0", + "jiti": "^2.4.2", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^1.0.0", + "pkg-types": "^2.2.0", + "rc9": "^2.1.2" + }, + "peerDependencies": { + "magicast": "^0.3.5" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } + } + }, + "node_modules/c12/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/c12/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "engines": [ + "node >= 6.0" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/confbox": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/deepmerge-ts": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-7.1.5.tgz", + "integrity": "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==", + "devOptional": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/effect": { + "version": "3.18.4", + "resolved": "https://registry.npmjs.org/effect/-/effect-3.18.4.tgz", + "integrity": "sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "fast-check": "^3.23.1" + } + }, + "node_modules/empathic": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz", + "integrity": "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/exsolve": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.7.tgz", + "integrity": "sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/fast-check": { + "version": "3.23.2", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.23.2.tgz", + "integrity": "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==", + "devOptional": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT", + "dependencies": { + "pure-rand": "^6.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/giget": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz", + "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.6", + "nypm": "^0.6.0", + "pathe": "^2.0.3" + }, + "bin": { + "giget": "dist/cli.mjs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true, + "license": "ISC" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-email": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-email/-/is-email-1.0.2.tgz", + "integrity": "sha512-UojUgD2EhDTBQ2SGKwrK9edce5phRzgLsP+V5+Uu2Swi+uvjVXgH3zduM3HhT9iaC/9Kq19/TYUbP0jPoi6ioA==", + "license": "SEE LICENSE IN LICENSE" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-uuid": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-uuid/-/is-uuid-1.0.2.tgz", + "integrity": "sha512-tCByphFcJgf2qmiMo5hMCgNAquNSagOetVetDvBXswGkNfoyEMvGH1yDlF8cbZbKnbVBr4Y5/rlpMz9umxyBkQ==", + "license": "MIT" + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "devOptional": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/multer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/multer/-/multer-2.0.2.tgz", + "integrity": "sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw==", + "license": "MIT", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.6.0", + "concat-stream": "^2.0.0", + "mkdirp": "^0.5.6", + "object-assign": "^4.1.1", + "type-is": "^1.6.18", + "xtend": "^4.0.2" + }, + "engines": { + "node": ">= 10.16.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/nodemon": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.10.tgz", + "integrity": "sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nypm": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.2.tgz", + "integrity": "sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.2", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "tinyexec": "^1.0.1" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": "^14.16.0 || >=16.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, + "node_modules/prisma": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.18.0.tgz", + "integrity": "sha512-bXWy3vTk8mnRmT+SLyZBQoC2vtV9Z8u7OHvEu+aULYxwiop/CPiFZ+F56KsNRNf35jw+8wcu8pmLsjxpBxAO9g==", + "devOptional": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/config": "6.18.0", + "@prisma/engines": "6.18.0" + }, + "bin": { + "prisma": "build/index.js" + }, + "engines": { + "node": ">=18.18" + }, + "peerDependencies": { + "typescript": ">=5.1.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true, + "license": "MIT" + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "devOptional": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "defu": "^6.1.4", + "destr": "^2.0.3" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/superstruct": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-1.0.4.tgz", + "integrity": "sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tinyexec": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", + "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "dev": true, + "license": "ISC", + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true, + "license": "MIT" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..47f9f74b --- /dev/null +++ b/package.json @@ -0,0 +1,24 @@ +{ + "dependencies": { + "@prisma/client": "^6.18.0", + "cors": "^2.8.5", + "dotenv": "^16.3.1", + "express": "^4.21.2", + "is-email": "^1.0.2", + "is-uuid": "^1.0.2", + "multer": "^2.0.2", + "superstruct": "^1.0.4" + }, + "devDependencies": { + "nodemon": "^3.0.1", + "prisma": "^6.18.0" + }, + "type": "module", + "scripts": { + "dev": "nodemon app.js", + "start": "node app.js" + }, + "prisma": { + "seed": "node prisma/seed.js" + } +} diff --git a/prisma/migrations/20251028023250_/migration.sql b/prisma/migrations/20251028023250_/migration.sql new file mode 100644 index 00000000..676c8f57 --- /dev/null +++ b/prisma/migrations/20251028023250_/migration.sql @@ -0,0 +1,61 @@ +-- CreateTable +CREATE TABLE "Product" ( + "id" SERIAL NOT NULL, + "name" TEXT NOT NULL, + "description" TEXT NOT NULL, + "price" DOUBLE PRECISION NOT NULL, + "tags" TEXT[], + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Product_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Article" ( + "id" SERIAL NOT NULL, + "title" TEXT NOT NULL, + "content" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Article_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ProductComment" ( + "id" SERIAL NOT NULL, + "content" TEXT NOT NULL, + "productId" INTEGER NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "ProductComment_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ArticleComment" ( + "id" SERIAL NOT NULL, + "content" TEXT NOT NULL, + "articleId" INTEGER NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "ArticleComment_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Image" ( + "id" SERIAL NOT NULL, + "url" TEXT NOT NULL, + "productId" INTEGER, + + CONSTRAINT "Image_pkey" PRIMARY KEY ("id") +); + +-- AddForeignKey +ALTER TABLE "ProductComment" ADD CONSTRAINT "ProductComment_productId_fkey" FOREIGN KEY ("productId") REFERENCES "Product"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ArticleComment" ADD CONSTRAINT "ArticleComment_articleId_fkey" FOREIGN KEY ("articleId") REFERENCES "Article"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Image" ADD CONSTRAINT "Image_productId_fkey" FOREIGN KEY ("productId") REFERENCES "Product"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/prisma/migrations/20251028054044/migration.sql b/prisma/migrations/20251028054044/migration.sql new file mode 100644 index 00000000..06a41382 --- /dev/null +++ b/prisma/migrations/20251028054044/migration.sql @@ -0,0 +1,22 @@ +/* + Warnings: + + - You are about to alter the column `price` on the `Product` table. The data in that column could be lost. The data in that column will be cast from `DoublePrecision` to `Integer`. + - Added the required column `updatedAt` to the `ArticleComment` table without a default value. This is not possible if the table is not empty. + - Made the column `productId` on table `Image` required. This step will fail if there are existing NULL values in that column. + - Added the required column `updatedAt` to the `ProductComment` table without a default value. This is not possible if the table is not empty. + +*/ +-- AlterTable +ALTER TABLE "ArticleComment" ADD COLUMN "updatedAt" TIMESTAMP(3) NOT NULL; + +-- AlterTable +ALTER TABLE "Image" ADD COLUMN "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, +ALTER COLUMN "productId" SET NOT NULL; + +-- AlterTable +ALTER TABLE "Product" ALTER COLUMN "price" SET DATA TYPE INTEGER, +ALTER COLUMN "tags" SET DEFAULT ARRAY[]::TEXT[]; + +-- AlterTable +ALTER TABLE "ProductComment" ADD COLUMN "updatedAt" TIMESTAMP(3) NOT NULL; diff --git a/prisma/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml new file mode 100644 index 00000000..044d57cd --- /dev/null +++ b/prisma/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (e.g., Git) +provider = "postgresql" diff --git a/prisma/mock.js b/prisma/mock.js new file mode 100644 index 00000000..78bdb7fd --- /dev/null +++ b/prisma/mock.js @@ -0,0 +1,69 @@ +export const PRODUCTS = [ + { + name: 'MacBook Pro 16"', + description: 'Apple M3 Pro 탑재 전문가용 노트북. 고해상도 디스플레이와 긴 배터리.', + price: 3990000, + tags: ['laptop', 'apple', 'macbook', 'pro'], + }, + { + name: 'Galaxy S24 Ultra', + description: '삼성 플래그십 스마트폰. 뛰어난 카메라와 S펜 지원.', + price: 1890000, + tags: ['smartphone', 'samsung', 'android'], + }, + { + name: 'LG UltraFine 5K Monitor', + description: '5K 해상도를 지원하는 고해상도 모니터. 사진/영상 편집용으로 적합.', + price: 1490000, + tags: ['monitor', 'display', 'lg', '5k'], + }, +]; + +export const ARTICLES = [ + { + title: '맥북 프로 16" 개발자와 크리에이터를 위한 최고의 선택', + content: + 'Apple M3 Pro 칩이 탑재된 맥북 프로 16"는 무거운 개발 환경이나 영상 편집에도 거뜬한 성능을 제공합니다. 긴 배터리 수명과 고해상도 디스플레이 덕분에 이동 중 작업에도 최적화되어 있습니다. macOS의 안정성과 다양한 개발 도구 호환성 역시 큰 장점입니다.', + }, + { + title: '갤럭시 S24 울트라 스마트폰을 넘어선 생산성 도구', + content: + 'Galaxy S24 Ultra는 탁월한 카메라 성능뿐만 아니라 S펜을 통한 필기 및 드로잉 기능으로 크리에이티브 워크플로우를 확장시킵니다. 또한 One UI의 향상된 멀티태스킹 기능 덕분에 업무용 기기로도 손색이 없습니다.', + }, + { + title: 'LG UltraFine 5K 모니터 정확한 색감이 필요한 전문가를 위한 디스플레이', + content: + '사진, 영상, 디자인 작업에서는 색 정확도가 무엇보다 중요합니다. LG UltraFine 5K 모니터는 macOS와 완벽히 호환되며, 높은 해상도와 색재현율 덕분에 세밀한 작업에 적합합니다. 특히 맥북 사용자에게 추천할 만한 모니터입니다.', + }, + { + title: '맥북 + LG 모니터로 완성하는 최강 작업 환경', + content: + 'MacBook Pro 16"와 LG UltraFine 5K 모니터를 함께 사용하면, 휴대성과 데스크톱급 작업 환경을 모두 누릴 수 있습니다. 썬더볼트 연결을 통해 전원과 데이터 전송을 동시에 처리할 수 있어 케이블 정리도 깔끔합니다.', + }, + { + title: '스마트폰과 노트북의 경계가 사라진다', + content: + 'Galaxy S24 Ultra와 MacBook Pro 같은 고성능 기기들이 등장하면서 모바일과 데스크톱의 경계가 점점 모호해지고 있습니다. 클라우드 서비스와 연동하면, 어떤 기기에서든 동일한 작업을 이어갈 수 있는 시대가 되었습니다.', + }, +]; + +export const IMAGES = [ + { url: '/uploads/애플.jpg' }, + { url: '/uploads/애플.jpg' }, + + { url: '/uploads/삼성.jpg' }, + { url: '/uploads/삼성.jpg' }, + + { url: '/uploads/LG.jpg' }, +]; + +export const PRODUCT_COMMENTS = [ + { content: '상태는 어떠한가요?' }, + { content: '직거래 가능할까요?' }, + { content: '배송비 포함인가요?' }, +]; + +export const ARTICLE_COMMENTS = [ + { content: '좋은 글 감사합니다!' }, + { content: '공감됩니다. 저도 비슷한 경험이 있어요.' }, +]; diff --git a/prisma/schema.prisma b/prisma/schema.prisma new file mode 100644 index 00000000..35068b7f --- /dev/null +++ b/prisma/schema.prisma @@ -0,0 +1,63 @@ +// This is your Prisma schema file, +// learn more about it in the docs: https://pris.ly/d/prisma-schema + +// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions? +// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model Product { + id Int @id @default(autoincrement()) + name String + description String + + price Int + + tags String[] @default([]) + images Image[] @relation("ProductImages") + productComments ProductComment[] @relation("ProductComments") + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model Image { + id Int @id @default(autoincrement()) + url String + product Product @relation("ProductImages", fields: [productId], references: [id], onDelete: Cascade) + productId Int + createdAt DateTime @default(now()) +} + +model ProductComment { + id Int @id @default(autoincrement()) + content String + product Product @relation("ProductComments", fields: [productId], references: [id], onDelete: Cascade) + productId Int + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model Article { + id Int @id @default(autoincrement()) + title String + content String + articleComments ArticleComment[] @relation("ArticleComments") + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model ArticleComment { + id Int @id @default(autoincrement()) + content String + article Article @relation("ArticleComments", fields: [articleId], references: [id], onDelete: Cascade) + articleId Int + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} diff --git a/prisma/seed.js b/prisma/seed.js new file mode 100644 index 00000000..dde65947 --- /dev/null +++ b/prisma/seed.js @@ -0,0 +1,92 @@ +import { PrismaClient } from '@prisma/client'; +import { PRODUCTS, ARTICLES, IMAGES, PRODUCT_COMMENTS, ARTICLE_COMMENTS } from './mock.js'; + +const prisma = new PrismaClient(); + +async function main() { + console.log('Start seeding...'); + + const createdProducts = []; + for (const p of PRODUCTS) { + const product = await prisma.product.create({ + data: { + name: p.name, + description: p.description, + price: p.price, + tags: p.tags, + }, + }); + createdProducts.push(product); + console.log(`Created product ${product.id} - ${product.name}`); + } + + let imageIndex = 0; + for (const product of createdProducts) { + const imagesForProduct = []; + + const assignCount = Math.min(2, IMAGES.length - imageIndex) || 1; + for (let i = 0; i < assignCount; i++) { + const img = IMAGES[imageIndex++]; + if (!img) break; + imagesForProduct.push(img); + } + for (const img of imagesForProduct) { + await prisma.image.create({ + data: { + url: img.url, + productId: product.id, + }, + }); + console.log(` - Image added for product ${product.id}: ${img.url}`); + } + } + + for (let i = 0; i < createdProducts.length; i++) { + const product = createdProducts[i]; + const comment = PRODUCT_COMMENTS[i % PRODUCT_COMMENTS.length]; + await prisma.productComment.create({ + data: { + content: comment.content, + productId: product.id, + }, + }); + console.log(` - Comment added for product ${product.id}`); + } + + // Articles 생성 + const createdArticles = []; + for (const a of ARTICLES) { + const article = await prisma.article.create({ + data: { + title: a.title, + content: a.content, + }, + }); + createdArticles.push(article); + console.log(`Created article ${article.id} - ${article.title}`); + } + + // ArticleComments: 각 게시글에 댓글 추가 + for (let i = 0; i < createdArticles.length; i++) { + const article = createdArticles[i]; + const comment = ARTICLE_COMMENTS[i % ARTICLE_COMMENTS.length]; + await prisma.articleComment.create({ + data: { + content: comment.content, + articleId: article.id, + }, + }); + console.log(` - Comment added for article ${article.id}`); + } + + console.log('Seeding finished!'); +} + +main() + .catch((e) => { + console.error('Seeding failed:', e); + process.exit(1); + }) + .finally(async () => { + await prisma.$disconnect(); + }); diff --git a/routes/articles.js b/routes/articles.js new file mode 100644 index 00000000..bf133617 --- /dev/null +++ b/routes/articles.js @@ -0,0 +1,88 @@ +import express from 'express'; +import { PrismaClient } from '@prisma/client'; +import { validate } from '../middlewares/validation.js'; +import { CreateArticle, PatchArticle } from '../structs.js'; + +const prisma = new PrismaClient(); +const router = express.Router(); + +// 게시글 생성 +router.post('/', validate(CreateArticle), async (req, res, next) => { + try { + const { title, content } = req.body; + const article = await prisma.article.create({ + data: { title, content }, + include: { articleComments: true }, + }); + res.status(201).json(article); + } catch (err) { + next(err); + } +}); + +// 게시글 상세 조회 (댓글 포함) +router.get('/:id', async (req, res, next) => { + try { + const article = await prisma.article.findUnique({ + where: { id: Number(req.params.id) }, + include: { + articleComments: { + orderBy: { createdAt: 'desc' }, + }, + }, + }); + if (!article) return res.status(404).json({ error: 'Article not found' }); + res.json(article); + } catch (err) { + next(err); + } +}); + +// 게시글 수정 +router.patch('/:id', validate(PatchArticle), async (req, res, next) => { + try { + const article = await prisma.article.update({ + where: { id: Number(req.params.id) }, + data: req.body, + include: { articleComments: true }, + }); + res.json(article); + } catch (err) { + next(err); + } +}); + +// 게시글 삭제 +router.delete('/:id', async (req, res, next) => { + try { + await prisma.article.delete({ where: { id: Number(req.params.id) } }); + res.status(204).send(); + } catch (err) { + next(err); + } +}); + +// 게시글 목록 조회 (offset 방식 페이지네이션 + 검색 + 댓글 포함) +router.get('/', async (req, res, next) => { + try { + const { offset = 0, limit = 10, search, sort = 'desc' } = req.query; + const articles = await prisma.article.findMany({ + skip: Number(offset), + take: Number(limit), + where: search + ? { OR: [{ title: { contains: search } }, { content: { contains: search } }] } + : undefined, + orderBy: { createdAt: sort }, + include: { + articleComments: { + orderBy: { createdAt: 'desc' }, + }, + }, + }); + res.json(articles); + } catch (err) { + next(err); + } +}); + +export default router; diff --git a/routes/comments.js b/routes/comments.js new file mode 100644 index 00000000..73bf8e7d --- /dev/null +++ b/routes/comments.js @@ -0,0 +1,112 @@ +import express from 'express'; +import { PrismaClient } from '@prisma/client'; +import { validate } from '../middlewares/validation.js'; +import { CreateComment, PatchComment } from '../structs.js'; + +const prisma = new PrismaClient(); +const router = express.Router(); + +// 상품 댓글 + +router.post('/product/:productId', validate(CreateComment), async (req, res, next) => { + try { + const { content } = req.body; + const comment = await prisma.productComment.create({ + data: { content, productId: Number(req.params.productId) }, + }); + res.status(201).json(comment); + } catch (err) { + next(err); + } +}); + +router.patch('/product/:id', validate(PatchComment), async (req, res, next) => { + try { + const comment = await prisma.productComment.update({ + where: { id: Number(req.params.id) }, + data: req.body, + }); + res.json(comment); + } catch (err) { + next(err); + } +}); + +router.delete('/product/:id', async (req, res, next) => { + try { + await prisma.productComment.delete({ where: { id: Number(req.params.id) } }); + res.status(204).send(); + } catch (err) { + next(err); + } +}); + +// 상품 댓글 목록 조회 (커서 방식 페이지네이션) +router.get('/product/:productId', async (req, res, next) => { + try { + const { lastId, limit = 10 } = req.query; + const comments = await prisma.productComment.findMany({ + where: { productId: Number(req.params.productId) }, + take: Number(limit), + skip: lastId ? 1 : 0, + ...(lastId ? { cursor: { id: Number(lastId) } } : {}), + orderBy: { createdAt: 'desc' }, + }); + res.json(comments); + } catch (err) { + next(err); + } +}); + +// 게시글 댓글 +router.post('/article/:articleId', validate(CreateComment), async (req, res, next) => { + try { + const { content } = req.body; + const comment = await prisma.articleComment.create({ + data: { content, articleId: Number(req.params.articleId) }, + }); + res.status(201).json(comment); + } catch (err) { + next(err); + } +}); + +router.patch('/article/:id', validate(PatchComment), async (req, res, next) => { + try { + const comment = await prisma.articleComment.update({ + where: { id: Number(req.params.id) }, + data: req.body, + }); + res.json(comment); + } catch (err) { + next(err); + } +}); + +router.delete('/article/:id', async (req, res, next) => { + try { + await prisma.articleComment.delete({ where: { id: Number(req.params.id) } }); + res.status(204).send(); + } catch (err) { + next(err); + } +}); + +// 게시글 댓글 목록 조회 (커서 방식 페이지네이션) +router.get('/article/:articleId', async (req, res, next) => { + try { + const { lastId, limit = 10 } = req.query; + const comments = await prisma.articleComment.findMany({ + where: { articleId: Number(req.params.articleId) }, + take: Number(limit), + skip: lastId ? 1 : 0, + ...(lastId ? { cursor: { id: Number(lastId) } } : {}), + orderBy: { createdAt: 'desc' }, + }); + res.json(comments); + } catch (err) { + next(err); + } +}); + +export default router; diff --git a/routes/products.js b/routes/products.js new file mode 100644 index 00000000..9b5f29f3 --- /dev/null +++ b/routes/products.js @@ -0,0 +1,124 @@ +import express from 'express'; +import { PrismaClient } from '@prisma/client'; +import { validate } from '../middlewares/validation.js'; +import { CreateProduct, PatchProduct } from '../structs.js'; +import { upload } from '../middlewares/upload.js'; + +const prisma = new PrismaClient(); +const router = express.Router(); + +// 상품 생성 +router.post('/', upload.array('images'), validate(CreateProduct), async (req, res, next) => { + try { + const { name, description, price, tags } = req.body; + + const parsedTags = + typeof tags === 'string' + ? tags + .split(',') + .map((t) => t.trim()) + .filter(Boolean) + : tags; + + const product = await prisma.product.create({ + data: { name, description, price: Number(price), tags: parsedTags || [] }, + include: { images: true, productComments: true }, + }); + + // 이미지 저장 + if (req.files) { + for (const file of req.files) { + await prisma.image.create({ + data: { url: `/uploads/${file.filename}`, productId: product.id }, + }); + } + } + + const fullProduct = await prisma.product.findUnique({ + where: { id: product.id }, + include: { images: true, productComments: true }, + }); + + res.status(201).json(fullProduct); + } catch (err) { + next(err); + } +}); + +// 상품 상세 조회 (이미지 + 댓글 포함) +router.get('/:id', async (req, res, next) => { + try { + const product = await prisma.product.findUnique({ + where: { id: Number(req.params.id) }, + include: { + images: true, + productComments: { + orderBy: { createdAt: 'desc' }, + }, + }, + }); + if (!product) return res.status(404).json({ error: 'Product not found' }); + res.json(product); + } catch (err) { + next(err); + } +}); + +// 상품 수정 +router.patch('/:id', validate(PatchProduct), async (req, res, next) => { + try { + const { tags } = req.body; + const parsedTags = + typeof tags === 'string' + ? tags + .split(',') + .map((t) => t.trim()) + .filter(Boolean) + : tags; + + const product = await prisma.product.update({ + where: { id: Number(req.params.id) }, + data: { ...req.body, ...(parsedTags ? { tags: parsedTags } : {}) }, + include: { images: true, productComments: true }, + }); + res.json(product); + } catch (err) { + next(err); + } +}); + +// 상품 삭제 +router.delete('/:id', async (req, res, next) => { + try { + await prisma.product.delete({ where: { id: Number(req.params.id) } }); + res.status(204).send(); + } catch (err) { + next(err); + } +}); + +// 상품 목록 조회 (페이지네이션, 검색 가능, 이미지 + 댓글 포함) +router.get('/', async (req, res, next) => { + try { + const { offset = 0, limit = 10, search, sort = 'desc' } = req.query; + const products = await prisma.product.findMany({ + skip: Number(offset), + take: Number(limit), + where: search + ? { OR: [{ name: { contains: search } }, { description: { contains: search } }] } + : undefined, + orderBy: { createdAt: sort }, + include: { + images: true, + productComments: { + orderBy: { createdAt: 'desc' }, + }, + }, + }); + res.json(products); + } catch (err) { + next(err); + } +}); + +export default router; diff --git a/structs.js b/structs.js new file mode 100644 index 00000000..38f8889b --- /dev/null +++ b/structs.js @@ -0,0 +1,23 @@ +import * as s from 'superstruct'; + +export const CreateProduct = s.object({ + name: s.size(s.string(), 1, 60), + description: s.string(), + price: s.min(s.number(), 0), + tags: s.array(s.string()), +}); + +export const PatchProduct = s.partial(CreateProduct); + +export const CreateArticle = s.object({ + title: s.size(s.string(), 1, 100), + content: s.string(), +}); + +export const PatchArticle = s.partial(CreateArticle); + +export const CreateComment = s.object({ + content: s.size(s.string(), 1, 500), +}); + +export const PatchComment = s.partial(CreateComment); diff --git a/uploads/LG.jpg b/uploads/LG.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b6813a61a0fd7353700ed4b7f3003c9201a2472c GIT binary patch literal 32387 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 H{;vK%%U1$N literal 0 HcmV?d00001 diff --git "a/uploads/\354\202\274\354\204\261.jpg" "b/uploads/\354\202\274\354\204\261.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..e533c0d727b1429d63bff8731d4505f2d44deaba GIT binary patch literal 42613 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

aTgo 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 literal 0 HcmV?d00001 diff --git "a/uploads/\354\225\240\355\224\214.jpg" "b/uploads/\354\225\240\355\224\214.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..2acc00ff8255ad156929784e7b03681ddbedfd08 GIT binary patch literal 36776 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 FO#q^I&&vP+ literal 0 HcmV?d00001