From 1d27bcc20ad97b6909d66903d61fcffd48d42595 Mon Sep 17 00:00:00 2001 From: Don Starwsburg Date: Mon, 18 Nov 2024 23:48:33 -0500 Subject: [PATCH 1/8] bunches of database modeling and drizzle setup --- drizzle.config.ts | 10 + package-lock.json | 1240 +++++++++++++++++++++++- package.json | 5 + src/db/index.ts | 3 + src/db/schema.ts | 7 + src/db/schema/accounts.ts | 10 + src/db/schema/columns.helpers.ts | 14 + src/db/schema/lipseyCatalog.ts | 88 ++ src/db/schema/relations.ts | 3 + src/drizzle/0000_right_arclight.sql | 136 +++ src/drizzle/0001_sweet_night_nurse.sql | 87 ++ src/drizzle/meta/0001_snapshot.json | 560 +++++++++++ src/drizzle/meta/_journal.json | 20 + src/drizzle/schema/lipseyCatalog.ts | 0 14 files changed, 2181 insertions(+), 2 deletions(-) create mode 100644 drizzle.config.ts create mode 100644 src/db/index.ts create mode 100644 src/db/schema.ts create mode 100644 src/db/schema/accounts.ts create mode 100644 src/db/schema/columns.helpers.ts create mode 100644 src/db/schema/lipseyCatalog.ts create mode 100644 src/db/schema/relations.ts create mode 100644 src/drizzle/0000_right_arclight.sql create mode 100644 src/drizzle/0001_sweet_night_nurse.sql create mode 100644 src/drizzle/meta/0001_snapshot.json create mode 100644 src/drizzle/meta/_journal.json create mode 100644 src/drizzle/schema/lipseyCatalog.ts diff --git a/drizzle.config.ts b/drizzle.config.ts new file mode 100644 index 0000000..fb87a06 --- /dev/null +++ b/drizzle.config.ts @@ -0,0 +1,10 @@ +import 'dotenv/config'; +import { defineConfig } from 'drizzle-kit'; +export default defineConfig({ + out: './src/drizzle', + schema: './src/db/schema/', + dialect: 'postgresql', + dbCredentials: { + url: process.env.DATABASE_URL!, + }, +}); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 15186fa..bad3871 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,15 +17,20 @@ "@mui/system": "^6.1.7", "@mui/x-data-grid": "^7.22.2", "@prisma/client": "^5.22.0", + "dotenv": "^16.4.5", + "drizzle-orm": "^0.36.3", "fontsource-roboto": "^4.0.0", "next": "15.0.3", + "pg": "^8.13.1", "react": "18.2.0", "react-dom": "18.2.0" }, "devDependencies": { "@types/node": "^20.17.6", + "@types/pg": "^8.11.10", "@types/react": "^18", "@types/react-dom": "^18", + "drizzle-kit": "^0.28.1", "eslint": "^8", "eslint-config-next": "15.0.3", "postcss": "^8", @@ -178,6 +183,12 @@ "node": ">=6.9.0" } }, + "node_modules/@drizzle-team/brocli": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@drizzle-team/brocli/-/brocli-0.10.2.tgz", + "integrity": "sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==", + "dev": true + }, "node_modules/@emnapi/runtime": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", @@ -320,6 +331,417 @@ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==" }, + "node_modules/@esbuild-kit/core-utils": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.3.2.tgz", + "integrity": "sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==", + "deprecated": "Merged into tsx: https://tsx.is", + "dev": true, + "dependencies": { + "esbuild": "~0.18.20", + "source-map-support": "^0.5.21" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/@esbuild-kit/esm-loader": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@esbuild-kit/esm-loader/-/esm-loader-2.6.5.tgz", + "integrity": "sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==", + "deprecated": "Merged into tsx: https://tsx.is", + "dev": true, + "dependencies": { + "@esbuild-kit/core-utils": "^3.3.2", + "get-tsconfig": "^4.7.0" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.23.1", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", @@ -2126,7 +2548,7 @@ "version": "20.17.6", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.6.tgz", "integrity": "sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==", - "dev": true, + "devOptional": true, "dependencies": { "undici-types": "~6.19.2" } @@ -2136,6 +2558,74 @@ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" }, + "node_modules/@types/pg": { + "version": "8.11.10", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.10.tgz", + "integrity": "sha512-LczQUW4dbOQzsH2RQ5qoeJ6qJPdrcM/DcMLoqWQkMLMsq83J5lAX3LXjdkWdpscFy67JSOWDnh7Ny/sPFykmkg==", + "devOptional": true, + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^4.0.1" + } + }, + "node_modules/@types/pg/node_modules/pg-types": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-4.0.2.tgz", + "integrity": "sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==", + "devOptional": true, + "dependencies": { + "pg-int8": "1.0.1", + "pg-numeric": "1.0.2", + "postgres-array": "~3.0.1", + "postgres-bytea": "~3.0.0", + "postgres-date": "~2.1.0", + "postgres-interval": "^3.0.0", + "postgres-range": "^1.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@types/pg/node_modules/postgres-array": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.2.tgz", + "integrity": "sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==", + "devOptional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@types/pg/node_modules/postgres-bytea": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-3.0.0.tgz", + "integrity": "sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==", + "devOptional": true, + "dependencies": { + "obuf": "~1.1.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/pg/node_modules/postgres-date": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-2.1.0.tgz", + "integrity": "sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==", + "devOptional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@types/pg/node_modules/postgres-interval": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-3.0.0.tgz", + "integrity": "sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==", + "devOptional": true, + "engines": { + "node": ">=12" + } + }, "node_modules/@types/prop-types": { "version": "15.7.13", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", @@ -2751,6 +3241,12 @@ "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==", + "dev": true + }, "node_modules/busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -3161,6 +3657,562 @@ "csstype": "^3.0.2" } }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/drizzle-kit": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/drizzle-kit/-/drizzle-kit-0.28.1.tgz", + "integrity": "sha512-JimOV+ystXTWMgZkLHYHf2w3oS28hxiH1FR0dkmJLc7GHzdGJoJAQtQS5DRppnabsRZwE2U1F6CuezVBgmsBBQ==", + "dev": true, + "dependencies": { + "@drizzle-team/brocli": "^0.10.2", + "@esbuild-kit/esm-loader": "^2.5.5", + "esbuild": "^0.19.7", + "esbuild-register": "^3.5.0" + }, + "bin": { + "drizzle-kit": "bin.cjs" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/drizzle-kit/node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "node_modules/drizzle-orm": { + "version": "0.36.3", + "resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.36.3.tgz", + "integrity": "sha512-ffQB7CcyCTvQBK6xtRLMl/Jsd5xFTBs+UTHrgs1hbk68i5TPkbsoCPbKEwiEsQZfq2I7VH632XJpV1g7LS2H9Q==", + "peerDependencies": { + "@aws-sdk/client-rds-data": ">=3", + "@cloudflare/workers-types": ">=3", + "@electric-sql/pglite": ">=0.2.0", + "@libsql/client": ">=0.10.0", + "@libsql/client-wasm": ">=0.10.0", + "@neondatabase/serverless": ">=0.1", + "@op-engineering/op-sqlite": ">=2", + "@opentelemetry/api": "^1.4.1", + "@planetscale/database": ">=1", + "@prisma/client": "*", + "@tidbcloud/serverless": "*", + "@types/better-sqlite3": "*", + "@types/pg": "*", + "@types/react": ">=18", + "@types/sql.js": "*", + "@vercel/postgres": ">=0.8.0", + "@xata.io/client": "*", + "better-sqlite3": ">=7", + "bun-types": "*", + "expo-sqlite": ">=14.0.0", + "knex": "*", + "kysely": "*", + "mysql2": ">=2", + "pg": ">=8", + "postgres": ">=3", + "react": ">=18", + "sql.js": ">=1", + "sqlite3": ">=5" + }, + "peerDependenciesMeta": { + "@aws-sdk/client-rds-data": { + "optional": true + }, + "@cloudflare/workers-types": { + "optional": true + }, + "@electric-sql/pglite": { + "optional": true + }, + "@libsql/client": { + "optional": true + }, + "@libsql/client-wasm": { + "optional": true + }, + "@neondatabase/serverless": { + "optional": true + }, + "@op-engineering/op-sqlite": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@prisma/client": { + "optional": true + }, + "@tidbcloud/serverless": { + "optional": true + }, + "@types/better-sqlite3": { + "optional": true + }, + "@types/pg": { + "optional": true + }, + "@types/react": { + "optional": true + }, + "@types/sql.js": { + "optional": true + }, + "@vercel/postgres": { + "optional": true + }, + "@xata.io/client": { + "optional": true + }, + "better-sqlite3": { + "optional": true + }, + "bun-types": { + "optional": true + }, + "expo-sqlite": { + "optional": true + }, + "knex": { + "optional": true + }, + "kysely": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "pg": { + "optional": true + }, + "postgres": { + "optional": true + }, + "prisma": { + "optional": true + }, + "react": { + "optional": true + }, + "sql.js": { + "optional": true + }, + "sqlite3": { + "optional": true + } + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -3397,6 +4449,18 @@ "@esbuild/win32-x64": "0.23.1" } }, + "node_modules/esbuild-register": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz", + "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "peerDependencies": { + "esbuild": ">=0.12 <1" + } + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -5352,6 +6416,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "devOptional": true + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -5498,6 +6568,96 @@ "node": ">=8" } }, + "node_modules/pg": { + "version": "8.13.1", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.13.1.tgz", + "integrity": "sha512-OUir1A0rPNZlX//c7ksiu7crsGZTKSOXJPgtNiHGIlC9H0lO+NC6ZDYksSgBYY/thSWhnSRBv8w1lieNNGATNQ==", + "dependencies": { + "pg-connection-string": "^2.7.0", + "pg-pool": "^3.7.0", + "pg-protocol": "^1.7.0", + "pg-types": "^2.1.0", + "pgpass": "1.x" + }, + "engines": { + "node": ">= 8.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.1.1" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", + "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.7.0.tgz", + "integrity": "sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA==" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-numeric": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pg-numeric/-/pg-numeric-1.0.2.tgz", + "integrity": "sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==", + "devOptional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pg-pool": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.7.0.tgz", + "integrity": "sha512-ZOBQForurqh4zZWjrgSwwAtzJ7QiRX0ovFkZr2klsen3Nm0aoh33Ls0fzfv3imeH/nw/O27cjdz5kzYJfeGp/g==", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.7.0.tgz", + "integrity": "sha512-hTK/mE36i8fDDhgDFjy6xNOG+LCorxLG3WO17tku+ij6sVHXh1jQUJ8hYAnRhNla4QVD2H8er/FOjc/+EgC6yQ==" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "dependencies": { + "split2": "^4.1.0" + } + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -5697,6 +6857,47 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-range": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/postgres-range/-/postgres-range-1.1.4.tgz", + "integrity": "sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==", + "devOptional": true + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -6161,6 +7362,33 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "engines": { + "node": ">= 10.x" + } + }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -6768,7 +7996,7 @@ "version": "6.19.8", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true + "devOptional": true }, "node_modules/uri-js": { "version": "4.4.1", @@ -6988,6 +8216,14 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, "node_modules/yaml": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz", diff --git a/package.json b/package.json index 394eb62..9250a43 100644 --- a/package.json +++ b/package.json @@ -18,15 +18,20 @@ "@mui/system": "^6.1.7", "@mui/x-data-grid": "^7.22.2", "@prisma/client": "^5.22.0", + "dotenv": "^16.4.5", + "drizzle-orm": "^0.36.3", "fontsource-roboto": "^4.0.0", "next": "15.0.3", + "pg": "^8.13.1", "react": "18.2.0", "react-dom": "18.2.0" }, "devDependencies": { "@types/node": "^20.17.6", + "@types/pg": "^8.11.10", "@types/react": "^18", "@types/react-dom": "^18", + "drizzle-kit": "^0.28.1", "eslint": "^8", "eslint-config-next": "15.0.3", "postcss": "^8", diff --git a/src/db/index.ts b/src/db/index.ts new file mode 100644 index 0000000..3306f2a --- /dev/null +++ b/src/db/index.ts @@ -0,0 +1,3 @@ +import 'dotenv/config'; +import { drizzle } from 'drizzle-orm/node-postgres'; +const db = drizzle(process.env.DATABASE_URL!); \ No newline at end of file diff --git a/src/db/schema.ts b/src/db/schema.ts new file mode 100644 index 0000000..755e0f8 --- /dev/null +++ b/src/db/schema.ts @@ -0,0 +1,7 @@ +import { integer, pgTable, varchar } from "drizzle-orm/pg-core"; +export const usersTable = pgTable("users", { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + name: varchar({ length: 255 }).notNull(), + age: integer().notNull(), + email: varchar({ length: 255 }).notNull().unique(), +}); \ No newline at end of file diff --git a/src/db/schema/accounts.ts b/src/db/schema/accounts.ts new file mode 100644 index 0000000..aeb8e6e --- /dev/null +++ b/src/db/schema/accounts.ts @@ -0,0 +1,10 @@ +import { pgTable, integer, varchar } from "drizzle-orm/pg-core"; +import { sql } from "drizzle-orm"; +import { timestamps } from "./columns.helpers"; + +export const accounts = pgTable("bal_accounts", { + id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "accountsid_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }), + first_name: varchar({ length: 40 }), + last_name: varchar({ length: 40 }), + ...timestamps +}) \ No newline at end of file diff --git a/src/db/schema/columns.helpers.ts b/src/db/schema/columns.helpers.ts new file mode 100644 index 0000000..1cc74da --- /dev/null +++ b/src/db/schema/columns.helpers.ts @@ -0,0 +1,14 @@ +import { timestamp } from "drizzle-orm/pg-core"; + +// columns.helpers.ts +export const timestamps = { + updated_at: timestamp().defaultNow().notNull(), + created_at: timestamp().defaultNow().notNull(), + deleted_at: timestamp(), +} + +export const timestampsAllowNulls = { + updated_at: timestamp().defaultNow(), + created_at: timestamp().defaultNow(), + deleted_at: timestamp(), +} \ No newline at end of file diff --git a/src/db/schema/lipseyCatalog.ts b/src/db/schema/lipseyCatalog.ts new file mode 100644 index 0000000..aa374df --- /dev/null +++ b/src/db/schema/lipseyCatalog.ts @@ -0,0 +1,88 @@ +import { pgTable, integer, varchar, text, doublePrecision, timestamp } from "drizzle-orm/pg-core" +import { sql } from "drizzle-orm" +import { timestamps } from "./columns.helpers"; + + +export const lipseycatalog = pgTable("lipseycatalog", { + id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "lipseycatalog_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }), + itemno: varchar({ length: 20 }).notNull(), + description1: text(), + description2: text(), + upc: varchar({ length: 20 }), + manufacturermodelno: varchar({ length: 30 }), + msrp: doublePrecision(), + model: text(), + calibergauge: text(), + manufacturer: text(), + type: text(), + action: text(), + barrellength: text(), + capacity: text(), + finish: text(), + overalllength: text(), + receiver: text(), + safety: text(), + sights: text(), + stockframegrips: text(), + magazine: text(), + weight: text(), + imagename: text(), + chamber: text(), + drilledandtapped: text(), + rateoftwist: text(), + itemtype: text(), + additionalfeature1: text(), + additionalfeature2: text(), + additionalfeature3: text(), + shippingweight: text(), + boundbookmanufacturer: text(), + boundbookmodel: text(), + boundbooktype: text(), + nfathreadpattern: text(), + nfaattachmentmethod: text(), + nfabaffletype: text(), + silencercanbedisassembled: text(), + silencerconstructionmaterial: text(), + nfadbreduction: text(), + silenceroutsidediameter: text(), + nfaform3Caliber: text(), + opticmagnification: text(), + maintubesize: text(), + adjustableobjective: text(), + objectivesize: text(), + opticadjustments: text(), + illuminatedreticle: text(), + reticle: text(), + exclusive: text(), + quantity: varchar({ length: 10 }).default(sql`NULL`), + allocated: text(), + onsale: text(), + price: doublePrecision(), + currentprice: doublePrecision(), + retailmap: doublePrecision(), + fflrequired: text(), + sotrequired: text(), + exclusivetype: text(), + scopecoverincluded: text(), + special: text(), + sightstype: text(), + case: text(), + choke: text(), + dbreduction: text(), + family: text(), + finishtype: text(), + frame: text(), + griptype: varchar({ length: 30 }), + handgunslidematerial: text(), + countryoforigin: varchar({ length: 4 }), + itemlength: text(), + itemwidth: text(), + itemheight: text(), + packagelength: doublePrecision(), + packagewidth: doublePrecision(), + packageheight: doublePrecision(), + itemgroup: varchar({ length: 40 }), + ...timestamps +}); + +; diff --git a/src/db/schema/relations.ts b/src/db/schema/relations.ts new file mode 100644 index 0000000..d0ed933 --- /dev/null +++ b/src/db/schema/relations.ts @@ -0,0 +1,3 @@ +import { relations } from "drizzle-orm/relations"; +import { } from "./lipseyCatalog"; + diff --git a/src/drizzle/0000_right_arclight.sql b/src/drizzle/0000_right_arclight.sql new file mode 100644 index 0000000..39aba31 --- /dev/null +++ b/src/drizzle/0000_right_arclight.sql @@ -0,0 +1,136 @@ +-- Current sql file was generated after introspecting the database +-- If you want to run this migration please uncomment this code before executing migrations +/* +CREATE TABLE IF NOT EXISTS "_prisma_migrations" ( + "id" varchar(36) PRIMARY KEY NOT NULL, + "checksum" varchar(64) NOT NULL, + "finished_at" timestamp with time zone, + "migration_name" varchar(255) NOT NULL, + "logs" text, + "rolled_back_at" timestamp with time zone, + "started_at" timestamp with time zone DEFAULT now() NOT NULL, + "applied_steps_count" integer DEFAULT 0 NOT NULL +); +--> statement-breakpoint +CREATE TABLE IF NOT EXISTS "User" ( + "id" serial PRIMARY KEY NOT NULL, + "email" text NOT NULL, + "name" text +); +--> statement-breakpoint +CREATE TABLE IF NOT EXISTS "Post" ( + "id" serial PRIMARY KEY NOT NULL, + "createdAt" timestamp(3) DEFAULT CURRENT_TIMESTAMP NOT NULL, + "updatedAt" timestamp(3) NOT NULL, + "title" text, + "content" text, + "published" boolean DEFAULT false NOT NULL, + "authorId" integer NOT NULL +); +--> statement-breakpoint +CREATE TABLE IF NOT EXISTS "Profile" ( + "id" serial PRIMARY KEY NOT NULL, + "bio" text, + "userId" integer NOT NULL +); +--> statement-breakpoint +CREATE TABLE IF NOT EXISTS "lipseycatalog" ( + "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "lipseycatalog_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1), + "itemno" varchar(20) NOT NULL, + "description1" text, + "description2" text, + "upc" varchar(20), + "manufacturermodelno" varchar(30), + "msrp" double precision, + "model" text, + "calibergauge" text, + "manufacturer" text, + "type" text, + "action" text, + "barrellength" text, + "capacity" text, + "finish" text, + "overalllength" text, + "receiver" text, + "safety" text, + "sights" text, + "stockframegrips" text, + "magazine" text, + "weight" text, + "imagename" text, + "chamber" text, + "drilledandtapped" text, + "rateoftwist" text, + "itemtype" text, + "additionalfeature1" text, + "additionalfeature2" text, + "additionalfeature3" text, + "shippingweight" text, + "boundbookmanufacturer" text, + "boundbookmodel" text, + "boundbooktype" text, + "nfathreadpattern" text, + "nfaattachmentmethod" text, + "nfabaffletype" text, + "silencercanbedisassembled" text, + "silencerconstructionmaterial" text, + "nfadbreduction" text, + "silenceroutsidediameter" text, + "nfaform3caliber" text, + "opticmagnification" text, + "maintubesize" text, + "adjustableobjective" text, + "objectivesize" text, + "opticadjustments" text, + "illuminatedreticle" text, + "reticle" text, + "exclusive" text, + "quantity" varchar(10) DEFAULT NULL, + "allocated" text, + "onsale" text, + "price" double precision, + "currentprice" double precision, + "retailmap" double precision, + "fflrequired" text, + "sotrequired" text, + "exclusivetype" text, + "scopecoverincluded" text, + "special" text, + "sightstype" text, + "case" text, + "choke" text, + "dbreduction" text, + "family" text, + "finishtype" text, + "frame" text, + "griptype" varchar(30), + "handgunslidematerial" text, + "countryoforigin" varchar(4), + "itemlength" text, + "itemwidth" text, + "itemheight" text, + "packagelength" double precision, + "packagewidth" double precision, + "packageheight" double precision, + "itemgroup" varchar(40), + "createdon" timestamp +); +--> statement-breakpoint +DO $$ BEGIN + ALTER TABLE "Post" ADD CONSTRAINT "Post_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "public"."User"("id") ON DELETE restrict ON UPDATE cascade; +EXCEPTION + WHEN duplicate_object THEN null; +END $$; +--> statement-breakpoint +DO $$ BEGIN + ALTER TABLE "Profile" ADD CONSTRAINT "Profile_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE restrict ON UPDATE cascade; +EXCEPTION + WHEN duplicate_object THEN null; +END $$; +--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "User_email_key" ON "User" USING btree ("email" text_ops);--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "User_id_idx" ON "User" USING btree ("id" int4_ops);--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "Post_id_idx" ON "Post" USING btree ("id" int4_ops);--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "Profile_id_idx" ON "Profile" USING btree ("id" int4_ops);--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "Profile_userId_key" ON "Profile" USING btree ("userId" int4_ops); +*/ \ No newline at end of file diff --git a/src/drizzle/0001_sweet_night_nurse.sql b/src/drizzle/0001_sweet_night_nurse.sql new file mode 100644 index 0000000..6269d27 --- /dev/null +++ b/src/drizzle/0001_sweet_night_nurse.sql @@ -0,0 +1,87 @@ +CREATE TABLE IF NOT EXISTS "bal_accounts" ( + "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "accountsid_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1), + "first_name" varchar(40), + "createdon" timestamp +); +--> statement-breakpoint +CREATE TABLE IF NOT EXISTS "lipseycatalog" ( + "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "lipseycatalog_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1), + "itemno" varchar(20) NOT NULL, + "description1" text, + "description2" text, + "upc" varchar(20), + "manufacturermodelno" varchar(30), + "msrp" double precision, + "model" text, + "calibergauge" text, + "manufacturer" text, + "type" text, + "action" text, + "barrellength" text, + "capacity" text, + "finish" text, + "overalllength" text, + "receiver" text, + "safety" text, + "sights" text, + "stockframegrips" text, + "magazine" text, + "weight" text, + "imagename" text, + "chamber" text, + "drilledandtapped" text, + "rateoftwist" text, + "itemtype" text, + "additionalfeature1" text, + "additionalfeature2" text, + "additionalfeature3" text, + "shippingweight" text, + "boundbookmanufacturer" text, + "boundbookmodel" text, + "boundbooktype" text, + "nfathreadpattern" text, + "nfaattachmentmethod" text, + "nfabaffletype" text, + "silencercanbedisassembled" text, + "silencerconstructionmaterial" text, + "nfadbreduction" text, + "silenceroutsidediameter" text, + "nfaform3Caliber" text, + "opticmagnification" text, + "maintubesize" text, + "adjustableobjective" text, + "objectivesize" text, + "opticadjustments" text, + "illuminatedreticle" text, + "reticle" text, + "exclusive" text, + "quantity" varchar(10) DEFAULT NULL, + "allocated" text, + "onsale" text, + "price" double precision, + "currentprice" double precision, + "retailmap" double precision, + "fflrequired" text, + "sotrequired" text, + "exclusivetype" text, + "scopecoverincluded" text, + "special" text, + "sightstype" text, + "case" text, + "choke" text, + "dbreduction" text, + "family" text, + "finishtype" text, + "frame" text, + "griptype" varchar(30), + "handgunslidematerial" text, + "countryoforigin" varchar(4), + "itemlength" text, + "itemwidth" text, + "itemheight" text, + "packagelength" double precision, + "packagewidth" double precision, + "packageheight" double precision, + "itemgroup" varchar(40), + "createdon" timestamp +); diff --git a/src/drizzle/meta/0001_snapshot.json b/src/drizzle/meta/0001_snapshot.json new file mode 100644 index 0000000..b97e889 --- /dev/null +++ b/src/drizzle/meta/0001_snapshot.json @@ -0,0 +1,560 @@ +{ + "id": "b292aaa5-0ccd-465e-aa88-fc01fe30739d", + "prevId": "00000000-0000-0000-0000-000000000000", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.bal_accounts": { + "name": "bal_accounts", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "identity": { + "type": "always", + "name": "accountsid_seq", + "schema": "public", + "increment": "1", + "startWith": "1", + "minValue": "1", + "maxValue": "2147483647", + "cache": "1", + "cycle": false + } + }, + "first_name": { + "name": "first_name", + "type": "varchar(40)", + "primaryKey": false, + "notNull": false + }, + "createdon": { + "name": "createdon", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.lipseycatalog": { + "name": "lipseycatalog", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "identity": { + "type": "always", + "name": "lipseycatalog_id_seq", + "schema": "public", + "increment": "1", + "startWith": "1", + "minValue": "1", + "maxValue": "2147483647", + "cache": "1", + "cycle": false + } + }, + "itemno": { + "name": "itemno", + "type": "varchar(20)", + "primaryKey": false, + "notNull": true + }, + "description1": { + "name": "description1", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description2": { + "name": "description2", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "upc": { + "name": "upc", + "type": "varchar(20)", + "primaryKey": false, + "notNull": false + }, + "manufacturermodelno": { + "name": "manufacturermodelno", + "type": "varchar(30)", + "primaryKey": false, + "notNull": false + }, + "msrp": { + "name": "msrp", + "type": "double precision", + "primaryKey": false, + "notNull": false + }, + "model": { + "name": "model", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "calibergauge": { + "name": "calibergauge", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "manufacturer": { + "name": "manufacturer", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "action": { + "name": "action", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "barrellength": { + "name": "barrellength", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "capacity": { + "name": "capacity", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "finish": { + "name": "finish", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "overalllength": { + "name": "overalllength", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "receiver": { + "name": "receiver", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "safety": { + "name": "safety", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sights": { + "name": "sights", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "stockframegrips": { + "name": "stockframegrips", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "magazine": { + "name": "magazine", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "weight": { + "name": "weight", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "imagename": { + "name": "imagename", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "chamber": { + "name": "chamber", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "drilledandtapped": { + "name": "drilledandtapped", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "rateoftwist": { + "name": "rateoftwist", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "itemtype": { + "name": "itemtype", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "additionalfeature1": { + "name": "additionalfeature1", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "additionalfeature2": { + "name": "additionalfeature2", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "additionalfeature3": { + "name": "additionalfeature3", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "shippingweight": { + "name": "shippingweight", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "boundbookmanufacturer": { + "name": "boundbookmanufacturer", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "boundbookmodel": { + "name": "boundbookmodel", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "boundbooktype": { + "name": "boundbooktype", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "nfathreadpattern": { + "name": "nfathreadpattern", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "nfaattachmentmethod": { + "name": "nfaattachmentmethod", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "nfabaffletype": { + "name": "nfabaffletype", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "silencercanbedisassembled": { + "name": "silencercanbedisassembled", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "silencerconstructionmaterial": { + "name": "silencerconstructionmaterial", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "nfadbreduction": { + "name": "nfadbreduction", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "silenceroutsidediameter": { + "name": "silenceroutsidediameter", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "nfaform3Caliber": { + "name": "nfaform3Caliber", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "opticmagnification": { + "name": "opticmagnification", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "maintubesize": { + "name": "maintubesize", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "adjustableobjective": { + "name": "adjustableobjective", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "objectivesize": { + "name": "objectivesize", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "opticadjustments": { + "name": "opticadjustments", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "illuminatedreticle": { + "name": "illuminatedreticle", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "reticle": { + "name": "reticle", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "exclusive": { + "name": "exclusive", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "quantity": { + "name": "quantity", + "type": "varchar(10)", + "primaryKey": false, + "notNull": false, + "default": "NULL" + }, + "allocated": { + "name": "allocated", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "onsale": { + "name": "onsale", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "price": { + "name": "price", + "type": "double precision", + "primaryKey": false, + "notNull": false + }, + "currentprice": { + "name": "currentprice", + "type": "double precision", + "primaryKey": false, + "notNull": false + }, + "retailmap": { + "name": "retailmap", + "type": "double precision", + "primaryKey": false, + "notNull": false + }, + "fflrequired": { + "name": "fflrequired", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sotrequired": { + "name": "sotrequired", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "exclusivetype": { + "name": "exclusivetype", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "scopecoverincluded": { + "name": "scopecoverincluded", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "special": { + "name": "special", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sightstype": { + "name": "sightstype", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "case": { + "name": "case", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "choke": { + "name": "choke", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dbreduction": { + "name": "dbreduction", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "family": { + "name": "family", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "finishtype": { + "name": "finishtype", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "frame": { + "name": "frame", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "griptype": { + "name": "griptype", + "type": "varchar(30)", + "primaryKey": false, + "notNull": false + }, + "handgunslidematerial": { + "name": "handgunslidematerial", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "countryoforigin": { + "name": "countryoforigin", + "type": "varchar(4)", + "primaryKey": false, + "notNull": false + }, + "itemlength": { + "name": "itemlength", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "itemwidth": { + "name": "itemwidth", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "itemheight": { + "name": "itemheight", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "packagelength": { + "name": "packagelength", + "type": "double precision", + "primaryKey": false, + "notNull": false + }, + "packagewidth": { + "name": "packagewidth", + "type": "double precision", + "primaryKey": false, + "notNull": false + }, + "packageheight": { + "name": "packageheight", + "type": "double precision", + "primaryKey": false, + "notNull": false + }, + "itemgroup": { + "name": "itemgroup", + "type": "varchar(40)", + "primaryKey": false, + "notNull": false + }, + "createdon": { + "name": "createdon", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": {}, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/src/drizzle/meta/_journal.json b/src/drizzle/meta/_journal.json new file mode 100644 index 0000000..e0e29fa --- /dev/null +++ b/src/drizzle/meta/_journal.json @@ -0,0 +1,20 @@ +{ + "version": "7", + "dialect": "postgresql", + "entries": [ + { + "idx": 0, + "version": "7", + "when": 1731960469559, + "tag": "0000_right_arclight", + "breakpoints": true + }, + { + "idx": 1, + "version": "7", + "when": 1731986158709, + "tag": "0001_sweet_night_nurse", + "breakpoints": true + } + ] +} \ No newline at end of file diff --git a/src/drizzle/schema/lipseyCatalog.ts b/src/drizzle/schema/lipseyCatalog.ts new file mode 100644 index 0000000..e69de29 From b969d861b22e692e9125fa91c2e317eb70789607 Mon Sep 17 00:00:00 2001 From: Don Starwsburg Date: Tue, 19 Nov 2024 11:03:32 -0500 Subject: [PATCH 2/8] changed db address --- src/db/schema/accounts.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/db/schema/accounts.ts b/src/db/schema/accounts.ts index aeb8e6e..f0e9012 100644 --- a/src/db/schema/accounts.ts +++ b/src/db/schema/accounts.ts @@ -6,5 +6,6 @@ export const accounts = pgTable("bal_accounts", { id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "accountsid_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }), first_name: varchar({ length: 40 }), last_name: varchar({ length: 40 }), + email: varchar({length: 100}), ...timestamps }) \ No newline at end of file From 626be27200a29718c23d41530a05a448ddce3443 Mon Sep 17 00:00:00 2001 From: Don Strawsburg Date: Tue, 19 Nov 2024 13:04:08 -0500 Subject: [PATCH 3/8] adding .env --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index d32cc78..b5e03c3 100644 --- a/.gitignore +++ b/.gitignore @@ -30,7 +30,7 @@ yarn-debug.log* yarn-error.log* # env files (can opt-in for committing if needed) -.env* +# .env* # vercel .vercel From c3643915cecc7243a26dc9580b7b614988b91917 Mon Sep 17 00:00:00 2001 From: Don Starwsburg Date: Tue, 19 Nov 2024 13:05:43 -0500 Subject: [PATCH 4/8] changed db address --- .env | 7 +++++++ .env .development | 7 +++++++ .env.production | 7 +++++++ 3 files changed, 21 insertions(+) create mode 100644 .env create mode 100644 .env .development create mode 100644 .env.production diff --git a/.env b/.env new file mode 100644 index 0000000..4e79d93 --- /dev/null +++ b/.env @@ -0,0 +1,7 @@ +# Environment variables declared in this file are automatically made available to Prisma. +# See the documentation for more detail: https://pris.ly/d/prisma-schema#accessing-environment-variables-from-the-schema + +# Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB. +# See the documentation for all the connection string options: https://pris.ly/d/connection-strings + +DATABASE_URL="postgresql://postgres:cul8rman@portainer.dev.gofwd.group:5433/ballistic?schema=public" diff --git a/.env .development b/.env .development new file mode 100644 index 0000000..b5592d0 --- /dev/null +++ b/.env .development @@ -0,0 +1,7 @@ +# Environment variables declared in this file are automatically made available to Prisma. +# See the documentation for more detail: https://pris.ly/d/prisma-schema#accessing-environment-variables-from-the-schema + +# Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB. +# See the documentation for all the connection string options: https://pris.ly/d/connection-strings + +DATABASE_URL="postgresql://postgres:cul8rman@192.168.11.210:5433/ballistic?schema=public" \ No newline at end of file diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..b5592d0 --- /dev/null +++ b/.env.production @@ -0,0 +1,7 @@ +# Environment variables declared in this file are automatically made available to Prisma. +# See the documentation for more detail: https://pris.ly/d/prisma-schema#accessing-environment-variables-from-the-schema + +# Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB. +# See the documentation for all the connection string options: https://pris.ly/d/connection-strings + +DATABASE_URL="postgresql://postgres:cul8rman@192.168.11.210:5433/ballistic?schema=public" \ No newline at end of file From c2360fddcdeb86cd0b4608684799502a2bb4f8e1 Mon Sep 17 00:00:00 2001 From: Don Strawsburg Date: Tue, 19 Nov 2024 15:21:30 -0500 Subject: [PATCH 5/8] modeling database --- package-lock.json | 1 + src/db/schema/accounts.ts | 5 ++++- src/db/schema/baseTable.ts | 9 +++++++++ src/db/schema/categories.ts | 10 ++++++++++ src/db/schema/lipseyCatalog.ts | 2 +- src/db/schema/product_feeds.ts | 11 +++++++++++ src/db/schema/products.ts | 14 ++++++++++++++ src/db/schema/retailers.ts | 11 +++++++++++ 8 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 src/db/schema/baseTable.ts create mode 100644 src/db/schema/categories.ts create mode 100644 src/db/schema/product_feeds.ts create mode 100644 src/db/schema/products.ts create mode 100644 src/db/schema/retailers.ts diff --git a/package-lock.json b/package-lock.json index bad3871..73bb39d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4093,6 +4093,7 @@ "version": "0.36.3", "resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.36.3.tgz", "integrity": "sha512-ffQB7CcyCTvQBK6xtRLMl/Jsd5xFTBs+UTHrgs1hbk68i5TPkbsoCPbKEwiEsQZfq2I7VH632XJpV1g7LS2H9Q==", + "license": "Apache-2.0", "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=3", diff --git a/src/db/schema/accounts.ts b/src/db/schema/accounts.ts index f0e9012..77141f2 100644 --- a/src/db/schema/accounts.ts +++ b/src/db/schema/accounts.ts @@ -3,9 +3,12 @@ import { sql } from "drizzle-orm"; import { timestamps } from "./columns.helpers"; export const accounts = pgTable("bal_accounts", { - id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "accountsid_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }), + id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "accounts_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }), first_name: varchar({ length: 40 }), last_name: varchar({ length: 40 }), email: varchar({length: 100}), + username: varchar({length:50}).notNull().unique(), + password_hash: varchar({length:255}).notNull().unique(), + ...timestamps }) \ No newline at end of file diff --git a/src/db/schema/baseTable.ts b/src/db/schema/baseTable.ts new file mode 100644 index 0000000..9387682 --- /dev/null +++ b/src/db/schema/baseTable.ts @@ -0,0 +1,9 @@ +import { pgTable, integer, varchar } from "drizzle-orm/pg-core"; +import { sql } from "drizzle-orm"; +import { timestamps } from "./columns.helpers"; + +export const accounts = pgTable("base_table", { + id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "base_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }), + + ...timestamps +}) \ No newline at end of file diff --git a/src/db/schema/categories.ts b/src/db/schema/categories.ts new file mode 100644 index 0000000..81d0184 --- /dev/null +++ b/src/db/schema/categories.ts @@ -0,0 +1,10 @@ +import { pgTable, integer, varchar } from "drizzle-orm/pg-core"; +import { sql } from "drizzle-orm"; +import { timestamps } from "./columns.helpers"; + +export const categories = pgTable("categories", { + id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "categories_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }), + name: varchar({length: 100}).notNull(), + parent_category_id: integer(), + ...timestamps +}) \ No newline at end of file diff --git a/src/db/schema/lipseyCatalog.ts b/src/db/schema/lipseyCatalog.ts index aa374df..916305c 100644 --- a/src/db/schema/lipseyCatalog.ts +++ b/src/db/schema/lipseyCatalog.ts @@ -85,4 +85,4 @@ export const lipseycatalog = pgTable("lipseycatalog", { ...timestamps }); -; + diff --git a/src/db/schema/product_feeds.ts b/src/db/schema/product_feeds.ts new file mode 100644 index 0000000..de10cba --- /dev/null +++ b/src/db/schema/product_feeds.ts @@ -0,0 +1,11 @@ +import { pgTable, integer, varchar, timestamp } from "drizzle-orm/pg-core"; +import { sql } from "drizzle-orm"; +import { timestamps } from "./columns.helpers"; + +export const product_feeds = pgTable("product_feeds", { + id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "productfeeds_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }), + reseller_id: integer().notNull(), + feed_url: varchar({ length:255 }).notNull(), + last_update: timestamp(), + ...timestamps +}) \ No newline at end of file diff --git a/src/db/schema/products.ts b/src/db/schema/products.ts new file mode 100644 index 0000000..ea8537b --- /dev/null +++ b/src/db/schema/products.ts @@ -0,0 +1,14 @@ +import { pgTable, integer, varchar, text, decimal } from "drizzle-orm/pg-core"; +import { sql } from "drizzle-orm"; +import { timestamps } from "./columns.helpers"; + +export const products = pgTable("products", { + id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "products_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }), + name: varchar({length: 255 }).notNull(), + description: text().notNull(), + price: decimal().notNull(), + reseller_id: integer().notNull(), + category_id: integer().notNull(), + stock_qty: integer().default(0), + ...timestamps +}) \ No newline at end of file diff --git a/src/db/schema/retailers.ts b/src/db/schema/retailers.ts new file mode 100644 index 0000000..cf7a770 --- /dev/null +++ b/src/db/schema/retailers.ts @@ -0,0 +1,11 @@ +import { pgTable, integer, varchar } from "drizzle-orm/pg-core"; +import { sql } from "drizzle-orm"; +import { timestamps } from "./columns.helpers"; + +export const resellers = pgTable("bal_resellers", { + id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "resellers_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }), + name: varchar({ length: 100 }).notNull(), + website_url: varchar({ length: 255 }), + contact_email: varchar({length: 100}), + ...timestamps +}) \ No newline at end of file From 08f1a610f7ff669e9abc7f9684b2d0c66867e461 Mon Sep 17 00:00:00 2001 From: Don Strawsburg Date: Tue, 19 Nov 2024 17:24:08 -0500 Subject: [PATCH 6/8] adding --- src/db/index.ts | 11 ++++++++++- src/db/queries/index.ts | 23 +++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 src/db/queries/index.ts diff --git a/src/db/index.ts b/src/db/index.ts index 3306f2a..de44adb 100644 --- a/src/db/index.ts +++ b/src/db/index.ts @@ -1,3 +1,12 @@ import 'dotenv/config'; import { drizzle } from 'drizzle-orm/node-postgres'; -const db = drizzle(process.env.DATABASE_URL!); \ No newline at end of file +import { Pool } from 'pg'; +import { sql } from 'drizzle-orm'; + +// db/index.ts + +const pool = new Pool({ + connectionString: process.env.DATABASE_URL, +}); +export const db = drizzle(pool); + diff --git a/src/db/queries/index.ts b/src/db/queries/index.ts new file mode 100644 index 0000000..24be4b1 --- /dev/null +++ b/src/db/queries/index.ts @@ -0,0 +1,23 @@ +// db/queries.ts +import { accounts } from '../schema/accounts' +import { db } from '../index'; + +// Fetch all accounts +export async function getAllAccounts() { + return await db.select().from(accounts); +} + +// Add a new accounts +export async function addAcounts(name: string) { + return await db.insertInto(User).values({ name }).returning(); +} + +// Update a user +export async function updateUser(id: number, name: string) { + return await db.update(User).set({ name }).where(User.id.equals(id)); +} + +// Delete a user +export async function deleteUser(id: number) { + return await db.deleteFrom(User).where(User.id.equals(id)); +} \ No newline at end of file From 429d6d2b26618f53a68e6ee577f48d90a8e53b18 Mon Sep 17 00:00:00 2001 From: Don Starwsburg Date: Tue, 19 Nov 2024 21:15:15 -0500 Subject: [PATCH 7/8] changing plurals to single and proper-casing --- package-lock.json | 201 ++++++++++++++++-- package.json | 3 +- src/db/index.ts | 2 +- src/db/queries/index.ts | 16 +- src/db/schema/{accounts.ts => Account.ts} | 2 +- src/db/schema/{categories.ts => Category.ts} | 2 +- .../{lipseyCatalog.ts => LipseyCatalog.ts} | 2 +- src/db/schema/{products.ts => Product.ts} | 2 +- .../{product_feeds.ts => Product_feed.ts} | 2 +- src/db/schema/{retailers.ts => Reseller.ts} | 2 +- src/db/schema/relations.ts | 2 +- 11 files changed, 204 insertions(+), 32 deletions(-) rename src/db/schema/{accounts.ts => Account.ts} (91%) rename src/db/schema/{categories.ts => Category.ts} (88%) rename src/db/schema/{lipseyCatalog.ts => LipseyCatalog.ts} (97%) rename src/db/schema/{products.ts => Product.ts} (92%) rename src/db/schema/{product_feeds.ts => Product_feed.ts} (88%) rename src/db/schema/{retailers.ts => Reseller.ts} (89%) diff --git a/package-lock.json b/package-lock.json index 73bb39d..0948e85 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,12 +30,13 @@ "@types/pg": "^8.11.10", "@types/react": "^18", "@types/react-dom": "^18", + "autoprefixer": "^10.4.20", "drizzle-kit": "^0.28.1", "eslint": "^8", "eslint-config-next": "15.0.3", "postcss": "^8", "prisma": "^5.22.0", - "tailwindcss": "^3.4.1", + "tailwindcss": "^3.4.15", "tsx": "^4.19.2", "typescript": "^5.6.3" } @@ -3154,6 +3155,43 @@ "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", "dev": true }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -3241,6 +3279,38 @@ "node": ">=8" } }, + "node_modules/browserslist": { + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -4220,6 +4290,12 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, + "node_modules/electron-to-chromium": { + "version": "1.5.63", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.63.tgz", + "integrity": "sha512-ddeXKuY9BHo/mw145axlyWjlJ1UBt4WK3AlvkT7W2AbqfRQoacVoRUCF6wL3uIx/8wT9oLKXzI+rFqHHscByaA==", + "dev": true + }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -4462,6 +4538,15 @@ "esbuild": ">=0.12 <1" } }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -5077,6 +5162,19 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -6289,6 +6387,12 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -6298,6 +6402,15 @@ "node": ">=0.10.0" } }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -7725,33 +7838,33 @@ } }, "node_modules/tailwindcss": { - "version": "3.4.14", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz", - "integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==", + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.15.tgz", + "integrity": "sha512-r4MeXnfBmSOuKUWmXe6h2CcyfzJCEk4F0pptO5jlnYSIViUkVmsawj80N5h2lO3gwcmSb4n3PuN+e+GC1Guylw==", "dev": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", - "chokidar": "^3.5.3", + "chokidar": "^3.6.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.3.0", + "fast-glob": "^3.3.2", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.21.0", + "jiti": "^1.21.6", "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", + "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", "postcss-import": "^15.1.0", "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" }, "bin": { "tailwind": "lib/cli.js", @@ -7761,6 +7874,34 @@ "node": ">=14.0.0" } }, + "node_modules/tailwindcss/node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/tailwindcss/node_modules/fast-glob/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, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -7999,6 +8140,36 @@ "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "devOptional": true }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", diff --git a/package.json b/package.json index 9250a43..c34dde6 100644 --- a/package.json +++ b/package.json @@ -31,12 +31,13 @@ "@types/pg": "^8.11.10", "@types/react": "^18", "@types/react-dom": "^18", + "autoprefixer": "^10.4.20", "drizzle-kit": "^0.28.1", "eslint": "^8", "eslint-config-next": "15.0.3", "postcss": "^8", "prisma": "^5.22.0", - "tailwindcss": "^3.4.1", + "tailwindcss": "^3.4.15", "tsx": "^4.19.2", "typescript": "^5.6.3" } diff --git a/src/db/index.ts b/src/db/index.ts index de44adb..819ebab 100644 --- a/src/db/index.ts +++ b/src/db/index.ts @@ -1,5 +1,5 @@ import 'dotenv/config'; -import { drizzle } from 'drizzle-orm/node-postgres'; +import { drizzle } from 'drizzle-orm'; import { Pool } from 'pg'; import { sql } from 'drizzle-orm'; diff --git a/src/db/queries/index.ts b/src/db/queries/index.ts index 24be4b1..4ca8b50 100644 --- a/src/db/queries/index.ts +++ b/src/db/queries/index.ts @@ -1,5 +1,5 @@ // db/queries.ts -import { accounts } from '../schema/accounts' +import { accounts } from '../schema/Account' import { db } from '../index'; // Fetch all accounts @@ -9,15 +9,15 @@ export async function getAllAccounts() { // Add a new accounts export async function addAcounts(name: string) { - return await db.insertInto(User).values({ name }).returning(); + return await db.insertInto(accounts).values({ name }).returning(); } -// Update a user -export async function updateUser(id: number, name: string) { - return await db.update(User).set({ name }).where(User.id.equals(id)); +// Update a accounts +export async function updateAcounts(id: number, name: string) { + return await db.update(accounts).set({ name }).where(accounts.id.equals(id)); } -// Delete a user -export async function deleteUser(id: number) { - return await db.deleteFrom(User).where(User.id.equals(id)); +// Delete a accounts +export async function deleteAccount(id: number) { + return await db.deleteFrom(accounts).where(accounts.id.equals(id)); } \ No newline at end of file diff --git a/src/db/schema/accounts.ts b/src/db/schema/Account.ts similarity index 91% rename from src/db/schema/accounts.ts rename to src/db/schema/Account.ts index 77141f2..ed11859 100644 --- a/src/db/schema/accounts.ts +++ b/src/db/schema/Account.ts @@ -2,7 +2,7 @@ import { pgTable, integer, varchar } from "drizzle-orm/pg-core"; import { sql } from "drizzle-orm"; import { timestamps } from "./columns.helpers"; -export const accounts = pgTable("bal_accounts", { +export const Account = pgTable("bal_accounts", { id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "accounts_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }), first_name: varchar({ length: 40 }), last_name: varchar({ length: 40 }), diff --git a/src/db/schema/categories.ts b/src/db/schema/Category.ts similarity index 88% rename from src/db/schema/categories.ts rename to src/db/schema/Category.ts index 81d0184..280d26f 100644 --- a/src/db/schema/categories.ts +++ b/src/db/schema/Category.ts @@ -2,7 +2,7 @@ import { pgTable, integer, varchar } from "drizzle-orm/pg-core"; import { sql } from "drizzle-orm"; import { timestamps } from "./columns.helpers"; -export const categories = pgTable("categories", { +export const Category = pgTable("categories", { id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "categories_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }), name: varchar({length: 100}).notNull(), parent_category_id: integer(), diff --git a/src/db/schema/lipseyCatalog.ts b/src/db/schema/LipseyCatalog.ts similarity index 97% rename from src/db/schema/lipseyCatalog.ts rename to src/db/schema/LipseyCatalog.ts index 916305c..ce87ab7 100644 --- a/src/db/schema/lipseyCatalog.ts +++ b/src/db/schema/LipseyCatalog.ts @@ -3,7 +3,7 @@ import { sql } from "drizzle-orm" import { timestamps } from "./columns.helpers"; -export const lipseycatalog = pgTable("lipseycatalog", { +export const LipseyCatalog = pgTable("lipseycatalog", { id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "lipseycatalog_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }), itemno: varchar({ length: 20 }).notNull(), description1: text(), diff --git a/src/db/schema/products.ts b/src/db/schema/Product.ts similarity index 92% rename from src/db/schema/products.ts rename to src/db/schema/Product.ts index ea8537b..dd3c047 100644 --- a/src/db/schema/products.ts +++ b/src/db/schema/Product.ts @@ -2,7 +2,7 @@ import { pgTable, integer, varchar, text, decimal } from "drizzle-orm/pg-core"; import { sql } from "drizzle-orm"; import { timestamps } from "./columns.helpers"; -export const products = pgTable("products", { +export const Product = pgTable("products", { id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "products_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }), name: varchar({length: 255 }).notNull(), description: text().notNull(), diff --git a/src/db/schema/product_feeds.ts b/src/db/schema/Product_feed.ts similarity index 88% rename from src/db/schema/product_feeds.ts rename to src/db/schema/Product_feed.ts index de10cba..b0c20f5 100644 --- a/src/db/schema/product_feeds.ts +++ b/src/db/schema/Product_feed.ts @@ -2,7 +2,7 @@ import { pgTable, integer, varchar, timestamp } from "drizzle-orm/pg-core"; import { sql } from "drizzle-orm"; import { timestamps } from "./columns.helpers"; -export const product_feeds = pgTable("product_feeds", { +export const Product_feed = pgTable("product_feeds", { id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "productfeeds_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }), reseller_id: integer().notNull(), feed_url: varchar({ length:255 }).notNull(), diff --git a/src/db/schema/retailers.ts b/src/db/schema/Reseller.ts similarity index 89% rename from src/db/schema/retailers.ts rename to src/db/schema/Reseller.ts index cf7a770..16c6e81 100644 --- a/src/db/schema/retailers.ts +++ b/src/db/schema/Reseller.ts @@ -2,7 +2,7 @@ import { pgTable, integer, varchar } from "drizzle-orm/pg-core"; import { sql } from "drizzle-orm"; import { timestamps } from "./columns.helpers"; -export const resellers = pgTable("bal_resellers", { +export const Reseller = pgTable("bal_resellers", { id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "resellers_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }), name: varchar({ length: 100 }).notNull(), website_url: varchar({ length: 255 }), diff --git a/src/db/schema/relations.ts b/src/db/schema/relations.ts index d0ed933..665fba9 100644 --- a/src/db/schema/relations.ts +++ b/src/db/schema/relations.ts @@ -1,3 +1,3 @@ import { relations } from "drizzle-orm/relations"; -import { } from "./lipseyCatalog"; +import { } from "./LipseyCatalog"; From 7ccc6d10e8f054a4bac138b17df6492b8501b74a Mon Sep 17 00:00:00 2001 From: Don Starwsburg Date: Wed, 20 Nov 2024 09:02:38 -0500 Subject: [PATCH 8/8] more database design --- src/db/index.ts | 3 ++- src/db/queries/index.ts | 22 +++++++++---------- src/db/schema.ts | 7 ------ src/db/schema/Account.ts | 2 +- src/db/schema/Build.ts | 11 ++++++++++ src/db/schema/BuildComponent.ts | 10 +++++++++ src/db/schema/Category.ts | 2 +- src/db/schema/LipseyCatalog.ts | 2 +- src/db/schema/Product.ts | 2 +- src/db/schema/Product_feed.ts | 2 +- src/db/schema/Reseller.ts | 2 +- src/db/schema/baseTable.ts | 2 +- .../schema/{ => helpers}/columns.helpers.ts | 0 src/drizzle/schema/lipseyCatalog.ts | 0 14 files changed, 41 insertions(+), 26 deletions(-) delete mode 100644 src/db/schema.ts create mode 100644 src/db/schema/Build.ts create mode 100644 src/db/schema/BuildComponent.ts rename src/db/schema/{ => helpers}/columns.helpers.ts (100%) delete mode 100644 src/drizzle/schema/lipseyCatalog.ts diff --git a/src/db/index.ts b/src/db/index.ts index 819ebab..c2226e6 100644 --- a/src/db/index.ts +++ b/src/db/index.ts @@ -1,5 +1,5 @@ import 'dotenv/config'; -import { drizzle } from 'drizzle-orm'; +import { drizzle } from 'drizzle-orm/node-postgres'; import { Pool } from 'pg'; import { sql } from 'drizzle-orm'; @@ -8,5 +8,6 @@ import { sql } from 'drizzle-orm'; const pool = new Pool({ connectionString: process.env.DATABASE_URL, }); + export const db = drizzle(pool); diff --git a/src/db/queries/index.ts b/src/db/queries/index.ts index 4ca8b50..6a3907e 100644 --- a/src/db/queries/index.ts +++ b/src/db/queries/index.ts @@ -1,23 +1,23 @@ // db/queries.ts -import { accounts } from '../schema/Account' +import { Account } from '../schema/Account' import { db } from '../index'; -// Fetch all accounts +// Fetch all account export async function getAllAccounts() { - return await db.select().from(accounts); + return await db.select().from(Account); } -// Add a new accounts -export async function addAcounts(name: string) { - return await db.insertInto(accounts).values({ name }).returning(); +// Add a new account +export async function addAcount(first_name: string, last_name : string, username : string, password_hash: string ) { + return await db.insert(Account).values({ first_name, last_name, username, password_hash }).returning(); } -// Update a accounts -export async function updateAcounts(id: number, name: string) { - return await db.update(accounts).set({ name }).where(accounts.id.equals(id)); +// Update a account +export async function updateAcount(id: number, first_name: string, last_name : string, username : string, password_hash: string ) { + return await db.update(Account).set({ first_name, last_name, username, password_hash }).where(Account.id.equals(id)); } -// Delete a accounts +// Delete a account export async function deleteAccount(id: number) { - return await db.deleteFrom(accounts).where(accounts.id.equals(id)); + return await db.delete(Account).where(Account.id.equals(id)); } \ No newline at end of file diff --git a/src/db/schema.ts b/src/db/schema.ts deleted file mode 100644 index 755e0f8..0000000 --- a/src/db/schema.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { integer, pgTable, varchar } from "drizzle-orm/pg-core"; -export const usersTable = pgTable("users", { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - name: varchar({ length: 255 }).notNull(), - age: integer().notNull(), - email: varchar({ length: 255 }).notNull().unique(), -}); \ No newline at end of file diff --git a/src/db/schema/Account.ts b/src/db/schema/Account.ts index ed11859..61f1dad 100644 --- a/src/db/schema/Account.ts +++ b/src/db/schema/Account.ts @@ -1,6 +1,6 @@ import { pgTable, integer, varchar } from "drizzle-orm/pg-core"; import { sql } from "drizzle-orm"; -import { timestamps } from "./columns.helpers"; +import { timestamps } from "./helpers/columns.helpers"; export const Account = pgTable("bal_accounts", { id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "accounts_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }), diff --git a/src/db/schema/Build.ts b/src/db/schema/Build.ts new file mode 100644 index 0000000..b190766 --- /dev/null +++ b/src/db/schema/Build.ts @@ -0,0 +1,11 @@ +import { pgTable, integer, varchar, text } from "drizzle-orm/pg-core"; +import { sql } from "drizzle-orm"; +import { timestamps } from "./helpers/columns.helpers"; + +export const Build = pgTable("builds", { + id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "build_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }), + account_id: integer().notNull(), + name: varchar({length:255}).notNull(), + description: text(), + ...timestamps +}) \ No newline at end of file diff --git a/src/db/schema/BuildComponent.ts b/src/db/schema/BuildComponent.ts new file mode 100644 index 0000000..8c850f1 --- /dev/null +++ b/src/db/schema/BuildComponent.ts @@ -0,0 +1,10 @@ +import { pgTable, integer, varchar, text } from "drizzle-orm/pg-core"; +import { sql } from "drizzle-orm"; +import { timestamps } from "./helpers/columns.helpers"; + +export const BuildComponent = pgTable("builds_components", { + id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "build_components_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }), + build_id: integer().notNull(), + product_id: integer().notNull(), + ...timestamps +}) \ No newline at end of file diff --git a/src/db/schema/Category.ts b/src/db/schema/Category.ts index 280d26f..2f59877 100644 --- a/src/db/schema/Category.ts +++ b/src/db/schema/Category.ts @@ -1,6 +1,6 @@ import { pgTable, integer, varchar } from "drizzle-orm/pg-core"; import { sql } from "drizzle-orm"; -import { timestamps } from "./columns.helpers"; +import { timestamps } from "./helpers/columns.helpers"; export const Category = pgTable("categories", { id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "categories_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }), diff --git a/src/db/schema/LipseyCatalog.ts b/src/db/schema/LipseyCatalog.ts index ce87ab7..05ab6eb 100644 --- a/src/db/schema/LipseyCatalog.ts +++ b/src/db/schema/LipseyCatalog.ts @@ -1,6 +1,6 @@ import { pgTable, integer, varchar, text, doublePrecision, timestamp } from "drizzle-orm/pg-core" import { sql } from "drizzle-orm" -import { timestamps } from "./columns.helpers"; +import { timestamps } from "./helpers/columns.helpers"; export const LipseyCatalog = pgTable("lipseycatalog", { diff --git a/src/db/schema/Product.ts b/src/db/schema/Product.ts index dd3c047..85bb63b 100644 --- a/src/db/schema/Product.ts +++ b/src/db/schema/Product.ts @@ -1,6 +1,6 @@ import { pgTable, integer, varchar, text, decimal } from "drizzle-orm/pg-core"; import { sql } from "drizzle-orm"; -import { timestamps } from "./columns.helpers"; +import { timestamps } from "./helpers/columns.helpers"; export const Product = pgTable("products", { id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "products_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }), diff --git a/src/db/schema/Product_feed.ts b/src/db/schema/Product_feed.ts index b0c20f5..0ae9f22 100644 --- a/src/db/schema/Product_feed.ts +++ b/src/db/schema/Product_feed.ts @@ -1,6 +1,6 @@ import { pgTable, integer, varchar, timestamp } from "drizzle-orm/pg-core"; import { sql } from "drizzle-orm"; -import { timestamps } from "./columns.helpers"; +import { timestamps } from "./helpers/columns.helpers"; export const Product_feed = pgTable("product_feeds", { id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "productfeeds_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }), diff --git a/src/db/schema/Reseller.ts b/src/db/schema/Reseller.ts index 16c6e81..786e1d2 100644 --- a/src/db/schema/Reseller.ts +++ b/src/db/schema/Reseller.ts @@ -1,6 +1,6 @@ import { pgTable, integer, varchar } from "drizzle-orm/pg-core"; import { sql } from "drizzle-orm"; -import { timestamps } from "./columns.helpers"; +import { timestamps } from "./helpers/columns.helpers"; export const Reseller = pgTable("bal_resellers", { id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "resellers_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }), diff --git a/src/db/schema/baseTable.ts b/src/db/schema/baseTable.ts index 9387682..16dc233 100644 --- a/src/db/schema/baseTable.ts +++ b/src/db/schema/baseTable.ts @@ -1,6 +1,6 @@ import { pgTable, integer, varchar } from "drizzle-orm/pg-core"; import { sql } from "drizzle-orm"; -import { timestamps } from "./columns.helpers"; +import { timestamps } from "./helpers/columns.helpers"; export const accounts = pgTable("base_table", { id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "base_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }), diff --git a/src/db/schema/columns.helpers.ts b/src/db/schema/helpers/columns.helpers.ts similarity index 100% rename from src/db/schema/columns.helpers.ts rename to src/db/schema/helpers/columns.helpers.ts diff --git a/src/drizzle/schema/lipseyCatalog.ts b/src/drizzle/schema/lipseyCatalog.ts deleted file mode 100644 index e69de29..0000000