From 49b4ef3a9a063c3e9044a331f72cbd190edb0e77 Mon Sep 17 00:00:00 2001 From: treejamie Date: Tue, 8 Apr 2025 15:57:45 +0100 Subject: [PATCH 1/4] Allow bcrypt to be built --- .gitignore | 3 +- app-router/nextjs-dashboard/.env.example | 13 -- .../app/lib/placeholder-data.ts | 147 ------------------ app-router/nextjs-dashboard/package-lock.json | 6 +- app-router/nextjs-dashboard/pnpm-lock.yaml | 110 ++++++------- .../nextjs-dashboard/pnpm-workspace.yaml | 3 + 6 files changed, 53 insertions(+), 229 deletions(-) delete mode 100644 app-router/nextjs-dashboard/.env.example delete mode 100644 app-router/nextjs-dashboard/app/lib/placeholder-data.ts create mode 100644 app-router/nextjs-dashboard/pnpm-workspace.yaml diff --git a/.gitignore b/.gitignore index 1380c2e..d9ee72c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules -.next \ No newline at end of file +.next +.env \ No newline at end of file diff --git a/app-router/nextjs-dashboard/.env.example b/app-router/nextjs-dashboard/.env.example deleted file mode 100644 index 8a85ba7..0000000 --- a/app-router/nextjs-dashboard/.env.example +++ /dev/null @@ -1,13 +0,0 @@ -# Copy from .env.local on the Vercel dashboard -# https://nextjs.org/learn/dashboard-app/setting-up-your-database#create-a-postgres-database -POSTGRES_URL= -POSTGRES_PRISMA_URL= -POSTGRES_URL_NON_POOLING= -POSTGRES_USER= -POSTGRES_HOST= -POSTGRES_PASSWORD= -POSTGRES_DATABASE= - -# `openssl rand -base64 32` -AUTH_SECRET= -AUTH_URL=http://localhost:3000/api/auth \ No newline at end of file diff --git a/app-router/nextjs-dashboard/app/lib/placeholder-data.ts b/app-router/nextjs-dashboard/app/lib/placeholder-data.ts deleted file mode 100644 index 257fb14..0000000 --- a/app-router/nextjs-dashboard/app/lib/placeholder-data.ts +++ /dev/null @@ -1,147 +0,0 @@ -// This file contains placeholder data that you'll be replacing with real data in the Data Fetching chapter: -// https://nextjs.org/learn/dashboard-app/fetching-data -const users = [ - { - id: '410544b2-4001-4271-9855-fec4b6a6442a', - name: 'User', - email: 'user@nextmail.com', - password: '123456', - }, -]; - -const customers = [ - { - id: 'd6e15727-9fe1-4961-8c5b-ea44a9bd81aa', - name: 'Evil Rabbit', - email: 'evil@rabbit.com', - image_url: '/customers/evil-rabbit.png', - }, - { - id: '3958dc9e-712f-4377-85e9-fec4b6a6442a', - name: 'Delba de Oliveira', - email: 'delba@oliveira.com', - image_url: '/customers/delba-de-oliveira.png', - }, - { - id: '3958dc9e-742f-4377-85e9-fec4b6a6442a', - name: 'Lee Robinson', - email: 'lee@robinson.com', - image_url: '/customers/lee-robinson.png', - }, - { - id: '76d65c26-f784-44a2-ac19-586678f7c2f2', - name: 'Michael Novotny', - email: 'michael@novotny.com', - image_url: '/customers/michael-novotny.png', - }, - { - id: 'CC27C14A-0ACF-4F4A-A6C9-D45682C144B9', - name: 'Amy Burns', - email: 'amy@burns.com', - image_url: '/customers/amy-burns.png', - }, - { - id: '13D07535-C59E-4157-A011-F8D2EF4E0CBB', - name: 'Balazs Orban', - email: 'balazs@orban.com', - image_url: '/customers/balazs-orban.png', - }, -]; - -const invoices = [ - { - customer_id: customers[0].id, - amount: 15795, - status: 'pending', - date: '2022-12-06', - }, - { - customer_id: customers[1].id, - amount: 20348, - status: 'pending', - date: '2022-11-14', - }, - { - customer_id: customers[4].id, - amount: 3040, - status: 'paid', - date: '2022-10-29', - }, - { - customer_id: customers[3].id, - amount: 44800, - status: 'paid', - date: '2023-09-10', - }, - { - customer_id: customers[5].id, - amount: 34577, - status: 'pending', - date: '2023-08-05', - }, - { - customer_id: customers[2].id, - amount: 54246, - status: 'pending', - date: '2023-07-16', - }, - { - customer_id: customers[0].id, - amount: 666, - status: 'pending', - date: '2023-06-27', - }, - { - customer_id: customers[3].id, - amount: 32545, - status: 'paid', - date: '2023-06-09', - }, - { - customer_id: customers[4].id, - amount: 1250, - status: 'paid', - date: '2023-06-17', - }, - { - customer_id: customers[5].id, - amount: 8546, - status: 'paid', - date: '2023-06-07', - }, - { - customer_id: customers[1].id, - amount: 500, - status: 'paid', - date: '2023-08-19', - }, - { - customer_id: customers[5].id, - amount: 8945, - status: 'paid', - date: '2023-06-03', - }, - { - customer_id: customers[2].id, - amount: 1000, - status: 'paid', - date: '2022-06-05', - }, -]; - -const revenue = [ - { month: 'Jan', revenue: 2000 }, - { month: 'Feb', revenue: 1800 }, - { month: 'Mar', revenue: 2200 }, - { month: 'Apr', revenue: 2500 }, - { month: 'May', revenue: 2300 }, - { month: 'Jun', revenue: 3200 }, - { month: 'Jul', revenue: 3500 }, - { month: 'Aug', revenue: 3700 }, - { month: 'Sep', revenue: 2500 }, - { month: 'Oct', revenue: 2800 }, - { month: 'Nov', revenue: 3000 }, - { month: 'Dec', revenue: 4800 }, -]; - -export { users, customers, invoices, revenue }; diff --git a/app-router/nextjs-dashboard/package-lock.json b/app-router/nextjs-dashboard/package-lock.json index 0923125..804a386 100644 --- a/app-router/nextjs-dashboard/package-lock.json +++ b/app-router/nextjs-dashboard/package-lock.json @@ -1,5 +1,5 @@ { - "name": "next-js-learn", + "name": "nextjs-dashboard", "lockfileVersion": 3, "requires": true, "packages": { @@ -14,8 +14,8 @@ "next-auth": "5.0.0-beta.25", "postcss": "8.5.1", "postgres": "^3.4.5", - "react": "*", - "react-dom": "*", + "react": "latest", + "react-dom": "latest", "tailwindcss": "3.4.17", "typescript": "5.7.3", "use-debounce": "^10.0.4", diff --git a/app-router/nextjs-dashboard/pnpm-lock.yaml b/app-router/nextjs-dashboard/pnpm-lock.yaml index 541f60d..713d33f 100644 --- a/app-router/nextjs-dashboard/pnpm-lock.yaml +++ b/app-router/nextjs-dashboard/pnpm-lock.yaml @@ -52,7 +52,7 @@ importers: version: 10.0.4(react@19.1.0) zod: specifier: ^3.24.1 - version: 3.24.1 + version: 3.24.2 devDependencies: '@types/bcrypt': specifier: ^5.0.2 @@ -406,9 +406,6 @@ packages: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - caniuse-lite@1.0.30001695: - resolution: {integrity: sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==} - caniuse-lite@1.0.30001712: resolution: {integrity: sha512-MBqPpGYYdQ7/hfKiet9SCI+nmN5/hp4ZzveOJubl5DTAMa5oggjAuoi0Z4onBpKPFI2ePGnQuQIzF3VxDjDJig==} @@ -496,8 +493,8 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.5.83: - resolution: {integrity: sha512-LcUDPqSt+V0QmI47XLzZrz5OqILSMGsPFkDYus22rIbgorSvBYEFqq854ltTmUdHkY92FSdAAvsh4jWEULMdfQ==} + electron-to-chromium@1.5.134: + resolution: {integrity: sha512-zSwzrLg3jNP3bwsLqWHmS5z2nIOQ5ngMnfMZOWWtXnqqQkPVyOipxK98w+1beLw1TB+EImPNcG8wVP/cLVs2Og==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -513,15 +510,15 @@ packages: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} - fastq@1.18.0: - resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==} + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - foreground-child@3.3.0: - resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} fraction.js@4.3.7: @@ -618,8 +615,8 @@ packages: resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true - jose@5.9.6: - resolution: {integrity: sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==} + jose@5.10.0: + resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} lilconfig@3.1.3: resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} @@ -686,11 +683,6 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@3.3.8: - resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - next-auth@5.0.0-beta.25: resolution: {integrity: sha512-2dJJw1sHQl2qxCrRk+KTQbeH+izFbGFPuJj5eGgBZFYyiYYtvlrBeUw1E/OJJxTRjuxbSYGnCTkUIRsIIW0bog==} peerDependencies: @@ -760,8 +752,8 @@ packages: resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} deprecated: This package is no longer supported. - oauth4webapi@3.1.4: - resolution: {integrity: sha512-eVfN3nZNbok2s/ROifO0UAc5G8nRoLSbrcKJ09OqmucgnhXEfdIQOR4gq1eJH1rN3gV7rNw62bDEgftsgFtBEg==} + oauth4webapi@3.4.0: + resolution: {integrity: sha512-5lcbectYuzQHvh0Ni7Epvc13sMVq7BxWUlHEYHaNko64OA1hcats0Huq30vZjqCZULcVE/PZxAGGPansfRAWKQ==} object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} @@ -803,8 +795,8 @@ packages: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + pirates@4.0.7: + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} postcss-import@15.1.0: @@ -895,8 +887,8 @@ packages: engines: {node: '>= 0.4'} hasBin: true - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} rimraf@3.0.2: @@ -917,11 +909,6 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} - engines: {node: '>=10'} - hasBin: true - semver@7.7.1: resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} engines: {node: '>=10'} @@ -1038,8 +1025,8 @@ packages: undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} - update-browserslist-db@1.1.2: - resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -1081,13 +1068,13 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@2.7.0: - resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} + yaml@2.7.1: + resolution: {integrity: sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==} engines: {node: '>= 14'} hasBin: true - zod@3.24.1: - resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} + zod@3.24.2: + resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} snapshots: @@ -1098,8 +1085,8 @@ snapshots: '@panva/hkdf': 1.2.1 '@types/cookie': 0.6.0 cookie: 0.7.1 - jose: 5.9.6 - oauth4webapi: 3.1.4 + jose: 5.10.0 + oauth4webapi: 3.4.0 preact: 10.11.3 preact-render-to-string: 5.2.3(preact@10.11.3) @@ -1222,7 +1209,7 @@ snapshots: nopt: 5.0.0 npmlog: 5.0.1 rimraf: 3.0.2 - semver: 7.6.3 + semver: 7.7.1 tar: 6.2.1 transitivePeerDependencies: - encoding @@ -1264,7 +1251,7 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.18.0 + fastq: 1.19.1 '@panva/hkdf@1.2.1': {} @@ -1337,7 +1324,7 @@ snapshots: autoprefixer@10.4.20(postcss@8.5.1): dependencies: browserslist: 4.24.4 - caniuse-lite: 1.0.30001695 + caniuse-lite: 1.0.30001712 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -1371,10 +1358,10 @@ snapshots: browserslist@4.24.4: dependencies: - caniuse-lite: 1.0.30001695 - electron-to-chromium: 1.5.83 + caniuse-lite: 1.0.30001712 + electron-to-chromium: 1.5.134 node-releases: 2.0.19 - update-browserslist-db: 1.1.2(browserslist@4.24.4) + update-browserslist-db: 1.1.3(browserslist@4.24.4) busboy@1.6.0: dependencies: @@ -1382,8 +1369,6 @@ snapshots: camelcase-css@2.0.1: {} - caniuse-lite@1.0.30001695: {} - caniuse-lite@1.0.30001712: {} chokidar@3.6.0: @@ -1456,7 +1441,7 @@ snapshots: eastasianwidth@0.2.0: {} - electron-to-chromium@1.5.83: {} + electron-to-chromium@1.5.134: {} emoji-regex@8.0.0: {} @@ -1472,15 +1457,15 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.8 - fastq@1.18.0: + fastq@1.19.1: dependencies: - reusify: 1.0.4 + reusify: 1.1.0 fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 - foreground-child@3.3.0: + foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 signal-exit: 4.1.0 @@ -1520,7 +1505,7 @@ snapshots: glob@10.4.5: dependencies: - foreground-child: 3.3.0 + foreground-child: 3.3.1 jackspeak: 3.4.3 minimatch: 9.0.5 minipass: 7.1.2 @@ -1587,7 +1572,7 @@ snapshots: jiti@1.21.7: {} - jose@5.9.6: {} + jose@5.10.0: {} lilconfig@3.1.3: {} @@ -1641,8 +1626,6 @@ snapshots: nanoid@3.3.11: {} - nanoid@3.3.8: {} - next-auth@5.0.0-beta.25(next@15.2.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0): dependencies: '@auth/core': 0.37.2 @@ -1697,7 +1680,7 @@ snapshots: gauge: 3.0.2 set-blocking: 2.0.0 - oauth4webapi@3.1.4: {} + oauth4webapi@3.4.0: {} object-assign@4.1.1: {} @@ -1726,7 +1709,7 @@ snapshots: pify@2.3.0: {} - pirates@4.0.6: {} + pirates@4.0.7: {} postcss-import@15.1.0(postcss@8.5.1): dependencies: @@ -1743,7 +1726,7 @@ snapshots: postcss-load-config@4.0.2(postcss@8.5.1): dependencies: lilconfig: 3.1.3 - yaml: 2.7.0 + yaml: 2.7.1 optionalDependencies: postcss: 8.5.1 @@ -1767,7 +1750,7 @@ snapshots: postcss@8.5.1: dependencies: - nanoid: 3.3.8 + nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -1811,7 +1794,7 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - reusify@1.0.4: {} + reusify@1.1.0: {} rimraf@3.0.2: dependencies: @@ -1827,10 +1810,7 @@ snapshots: semver@6.3.1: {} - semver@7.6.3: {} - - semver@7.7.1: - optional: true + semver@7.7.1: {} set-blocking@2.0.0: {} @@ -1916,7 +1896,7 @@ snapshots: glob: 10.4.5 lines-and-columns: 1.2.4 mz: 2.7.0 - pirates: 4.0.6 + pirates: 4.0.7 ts-interface-checker: 0.1.13 supports-preserve-symlinks-flag@1.0.0: {} @@ -1979,7 +1959,7 @@ snapshots: undici-types@6.20.0: {} - update-browserslist-db@1.1.2(browserslist@4.24.4): + update-browserslist-db@1.1.3(browserslist@4.24.4): dependencies: browserslist: 4.24.4 escalade: 3.2.0 @@ -2022,6 +2002,6 @@ snapshots: yallist@4.0.0: {} - yaml@2.7.0: {} + yaml@2.7.1: {} - zod@3.24.1: {} + zod@3.24.2: {} diff --git a/app-router/nextjs-dashboard/pnpm-workspace.yaml b/app-router/nextjs-dashboard/pnpm-workspace.yaml new file mode 100644 index 0000000..c23045a --- /dev/null +++ b/app-router/nextjs-dashboard/pnpm-workspace.yaml @@ -0,0 +1,3 @@ +onlyBuiltDependencies: + - bcrypt + - sharp From 71732013d8ca789ccf1b5927518437df773d7683 Mon Sep 17 00:00:00 2001 From: treejamie Date: Tue, 8 Apr 2025 16:05:24 +0100 Subject: [PATCH 2/4] the database stuff is done, I think someone may need to mention the pnpm thing about workspaces --- .../nextjs-dashboard/app/query/route.ts | 37 +++++++++---------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/app-router/nextjs-dashboard/app/query/route.ts b/app-router/nextjs-dashboard/app/query/route.ts index 0701b73..458ff7f 100644 --- a/app-router/nextjs-dashboard/app/query/route.ts +++ b/app-router/nextjs-dashboard/app/query/route.ts @@ -1,26 +1,23 @@ -// import postgres from 'postgres'; +import postgres from 'postgres'; -// const sql = postgres(process.env.POSTGRES_URL!, { ssl: 'require' }); +const sql = postgres(process.env.POSTGRES_URL!, { ssl: 'require' }); -// async function listInvoices() { -// const data = await sql` -// SELECT invoices.amount, customers.name -// FROM invoices -// JOIN customers ON invoices.customer_id = customers.id -// WHERE invoices.amount = 666; -// `; +async function listInvoices() { + const data = await sql` + SELECT invoices.amount, customers.name + FROM invoices + JOIN customers ON invoices.customer_id = customers.id + WHERE invoices.amount = 666; + `; -// return data; -// } + return data; +} export async function GET() { - return Response.json({ - message: - 'Uncomment this file and remove this line. You can delete this file when you are finished.', - }); - // try { - // return Response.json(await listInvoices()); - // } catch (error) { - // return Response.json({ error }, { status: 500 }); - // } + + try { + return Response.json(await listInvoices()); + } catch (error) { + return Response.json({ error }, { status: 500 }); + } } From 45c4e38eb628b92f94141d378ce16db0ccd5c3a2 Mon Sep 17 00:00:00 2001 From: treejamie Date: Tue, 8 Apr 2025 16:20:29 +0100 Subject: [PATCH 3/4] unpicking the seed stuff is a bit thorny. It said delete the file, but it is baked in there --- app-router/nextjs-dashboard/app/seed/route.ts | 2 +- app-router/nextjs-dashboard/tsconfig.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app-router/nextjs-dashboard/app/seed/route.ts b/app-router/nextjs-dashboard/app/seed/route.ts index c6428b2..2886fe9 100644 --- a/app-router/nextjs-dashboard/app/seed/route.ts +++ b/app-router/nextjs-dashboard/app/seed/route.ts @@ -1,6 +1,6 @@ import bcrypt from 'bcrypt'; import postgres from 'postgres'; -import { invoices, customers, revenue, users } from '../lib/placeholder-data'; + const sql = postgres(process.env.POSTGRES_URL!, { ssl: 'require' }); diff --git a/app-router/nextjs-dashboard/tsconfig.json b/app-router/nextjs-dashboard/tsconfig.json index cbd9b64..89c7747 100644 --- a/app-router/nextjs-dashboard/tsconfig.json +++ b/app-router/nextjs-dashboard/tsconfig.json @@ -28,8 +28,8 @@ "**/*.ts", "**/*.tsx", ".next/types/**/*.ts", - "app/lib/placeholder-data.ts", - "scripts/seed.js" + // "app/lib/placeholder-data.ts", + // "scripts/seed.js" ], "exclude": ["node_modules"] } From fa71f266696a573b732bb39c646eb0b85064b99d Mon Sep 17 00:00:00 2001 From: treejamie Date: Tue, 8 Apr 2025 16:22:49 +0100 Subject: [PATCH 4/4] removed seed directory --- app-router/nextjs-dashboard/app/seed/route.ts | 117 ------------------ 1 file changed, 117 deletions(-) delete mode 100644 app-router/nextjs-dashboard/app/seed/route.ts diff --git a/app-router/nextjs-dashboard/app/seed/route.ts b/app-router/nextjs-dashboard/app/seed/route.ts deleted file mode 100644 index 2886fe9..0000000 --- a/app-router/nextjs-dashboard/app/seed/route.ts +++ /dev/null @@ -1,117 +0,0 @@ -import bcrypt from 'bcrypt'; -import postgres from 'postgres'; - - -const sql = postgres(process.env.POSTGRES_URL!, { ssl: 'require' }); - -async function seedUsers() { - await sql`CREATE EXTENSION IF NOT EXISTS "uuid-ossp"`; - await sql` - CREATE TABLE IF NOT EXISTS users ( - id UUID DEFAULT uuid_generate_v4() PRIMARY KEY, - name VARCHAR(255) NOT NULL, - email TEXT NOT NULL UNIQUE, - password TEXT NOT NULL - ); - `; - - const insertedUsers = await Promise.all( - users.map(async (user) => { - const hashedPassword = await bcrypt.hash(user.password, 10); - return sql` - INSERT INTO users (id, name, email, password) - VALUES (${user.id}, ${user.name}, ${user.email}, ${hashedPassword}) - ON CONFLICT (id) DO NOTHING; - `; - }), - ); - - return insertedUsers; -} - -async function seedInvoices() { - await sql`CREATE EXTENSION IF NOT EXISTS "uuid-ossp"`; - - await sql` - CREATE TABLE IF NOT EXISTS invoices ( - id UUID DEFAULT uuid_generate_v4() PRIMARY KEY, - customer_id UUID NOT NULL, - amount INT NOT NULL, - status VARCHAR(255) NOT NULL, - date DATE NOT NULL - ); - `; - - const insertedInvoices = await Promise.all( - invoices.map( - (invoice) => sql` - INSERT INTO invoices (customer_id, amount, status, date) - VALUES (${invoice.customer_id}, ${invoice.amount}, ${invoice.status}, ${invoice.date}) - ON CONFLICT (id) DO NOTHING; - `, - ), - ); - - return insertedInvoices; -} - -async function seedCustomers() { - await sql`CREATE EXTENSION IF NOT EXISTS "uuid-ossp"`; - - await sql` - CREATE TABLE IF NOT EXISTS customers ( - id UUID DEFAULT uuid_generate_v4() PRIMARY KEY, - name VARCHAR(255) NOT NULL, - email VARCHAR(255) NOT NULL, - image_url VARCHAR(255) NOT NULL - ); - `; - - const insertedCustomers = await Promise.all( - customers.map( - (customer) => sql` - INSERT INTO customers (id, name, email, image_url) - VALUES (${customer.id}, ${customer.name}, ${customer.email}, ${customer.image_url}) - ON CONFLICT (id) DO NOTHING; - `, - ), - ); - - return insertedCustomers; -} - -async function seedRevenue() { - await sql` - CREATE TABLE IF NOT EXISTS revenue ( - month VARCHAR(4) NOT NULL UNIQUE, - revenue INT NOT NULL - ); - `; - - const insertedRevenue = await Promise.all( - revenue.map( - (rev) => sql` - INSERT INTO revenue (month, revenue) - VALUES (${rev.month}, ${rev.revenue}) - ON CONFLICT (month) DO NOTHING; - `, - ), - ); - - return insertedRevenue; -} - -export async function GET() { - try { - const result = await sql.begin((sql) => [ - seedUsers(), - seedCustomers(), - seedInvoices(), - seedRevenue(), - ]); - - return Response.json({ message: 'Database seeded successfully' }); - } catch (error) { - return Response.json({ error }, { status: 500 }); - } -}