From 4c8fdcc84ebaf4aebfa6f5b04b911de2954f4e92 Mon Sep 17 00:00:00 2001 From: Omer Sabic Date: Sat, 8 Jun 2024 14:36:42 +0200 Subject: [PATCH] move over to neon db --- package-lock.json | 64 +++++++++++++++++++++++++++++------------------ package.json | 2 +- src/db/index.js | 13 +++------- yarn.lock | 17 +++++++++---- 4 files changed, 56 insertions(+), 40 deletions(-) diff --git a/package-lock.json b/package-lock.json index c1e3991..e2f4876 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,13 +13,13 @@ "@fastify/cors": "^8.4.2", "@fastify/multipart": "^8.2.0", "@fastify/oauth2": "^7.8.0", + "@neondatabase/serverless": "^0.9.3", "drizzle-orm": "^0.31.1", "fastify": "^4.25.0", "fastify-plugin": "^4.5.1", "googleapis": "^134.0.0", "mailtrap": "^3.3.0", "openai": "^4.38.5", - "pg": "^8.11.3", "redis": "^4.6.11", "simple-get": "^4.0.1", "stripe": "^15.7.0", @@ -986,6 +986,14 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@neondatabase/serverless": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@neondatabase/serverless/-/serverless-0.9.3.tgz", + "integrity": "sha512-6ZBK8asl2Z3+ADEaELvbaVVGVlmY1oAzkxxZfpmXPKFuJhbDN+5fU3zYBamsahS/Ch1zE+CVWB3R+8QEI2LMSw==", + "dependencies": { + "@types/pg": "8.11.6" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1220,29 +1228,19 @@ "license": "MIT" }, "node_modules/@types/pg": { - "version": "8.10.9", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.10.9.tgz", - "integrity": "sha512-UksbANNE/f8w0wOMxVKKIrLCbEMV+oM1uKejmwXr39olg4xqcfBDbXxObJAt6XxHbDa4XTKOlUEcEltXDX+XLQ==", - "devOptional": true, - "license": "MIT", + "version": "8.11.6", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.6.tgz", + "integrity": "sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==", "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^4.0.1" } }, - "node_modules/@types/pg/node_modules/@types/node": { - "version": "20.2.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.5.tgz", - "integrity": "sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==", - "devOptional": true, - "license": "MIT" - }, "node_modules/@types/pg/node_modules/pg-types": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-4.0.1.tgz", "integrity": "sha512-hRCSDuLII9/LE3smys1hRHcu5QGcLs9ggT7I/TCs0IE+2Eesxi9+9RWAAwZ0yaGjxoWICF/YHLOEjydGujoJ+g==", - "devOptional": true, "license": "MIT", "dependencies": { "pg-int8": "1.0.1", @@ -1261,7 +1259,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.2.tgz", "integrity": "sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==", - "devOptional": true, "license": "MIT", "engines": { "node": ">=12" @@ -1271,7 +1268,6 @@ "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, "license": "MIT", "dependencies": { "obuf": "~1.1.2" @@ -1284,7 +1280,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-2.0.1.tgz", "integrity": "sha512-YtMKdsDt5Ojv1wQRvUhnyDJNSr2dGIC96mQVKz7xufp07nfuFONzdaowrMHjlAzY6GDLd4f+LUHHAAM1h4MdUw==", - "devOptional": true, "license": "MIT", "engines": { "node": ">=12" @@ -1294,7 +1289,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-3.0.0.tgz", "integrity": "sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==", - "devOptional": true, "license": "MIT", "engines": { "node": ">=12" @@ -2219,6 +2213,8 @@ "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=4" } @@ -6852,7 +6848,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "devOptional": true, "license": "MIT" }, "node_modules/on-exit-leak-free": { @@ -7023,7 +7018,9 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==", - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/parent-module": { "version": "1.0.1", @@ -7109,6 +7106,8 @@ "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.3.tgz", "integrity": "sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "buffer-writer": "2.0.0", "packet-reader": "1.0.0", @@ -7138,13 +7137,16 @@ "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", "license": "MIT", - "optional": true + "optional": true, + "peer": true }, "node_modules/pg-connection-string": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz", "integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==", - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/pg-int8": { "version": "1.0.1", @@ -7159,7 +7161,6 @@ "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, "license": "ISC", "engines": { "node": ">=4" @@ -7170,6 +7171,8 @@ "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.1.tgz", "integrity": "sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==", "license": "MIT", + "optional": true, + "peer": true, "peerDependencies": { "pg": ">=8.0" } @@ -7185,6 +7188,8 @@ "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", @@ -7201,6 +7206,8 @@ "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "split2": "^4.1.0" } @@ -7317,6 +7324,8 @@ "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=4" } @@ -7326,6 +7335,8 @@ "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -7335,6 +7346,8 @@ "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -7344,6 +7357,8 @@ "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "xtend": "^4.0.0" }, @@ -7355,7 +7370,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/postgres-range/-/postgres-range-1.1.3.tgz", "integrity": "sha512-VdlZoocy5lCP0c/t66xAfclglEapXPCIVhqqJRncYpvbCgImF0w67aPKfbqUMr72tO2k5q0TdTZwCLjPTI6C9g==", - "devOptional": true, "license": "MIT" }, "node_modules/prelude-ls": { @@ -9421,6 +9435,8 @@ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=0.4" } diff --git a/package.json b/package.json index 61f0e70..91b817a 100644 --- a/package.json +++ b/package.json @@ -33,13 +33,13 @@ "@fastify/cors": "^8.4.2", "@fastify/multipart": "^8.2.0", "@fastify/oauth2": "^7.8.0", + "@neondatabase/serverless": "^0.9.3", "drizzle-orm": "^0.31.1", "fastify": "^4.25.0", "fastify-plugin": "^4.5.1", "googleapis": "^134.0.0", "mailtrap": "^3.3.0", "openai": "^4.38.5", - "pg": "^8.11.3", "redis": "^4.6.11", "simple-get": "^4.0.1", "stripe": "^15.7.0", diff --git a/src/db/index.js b/src/db/index.js index 46178ce..f04efd0 100644 --- a/src/db/index.js +++ b/src/db/index.js @@ -2,21 +2,14 @@ import * as schema from "./schemas.js"; import { env, Logger } from "../utils/index.js"; import { drizzle } from "drizzle-orm/node-postgres"; import { migrate } from "drizzle-orm/node-postgres/migrator"; -import pgpkg from 'pg'; -const { Pool } = pgpkg; +import { neon } from '@neondatabase/serverless'; + /** @type {ReturnType>} */ export let db; export const initDb = async () => { - const client = new Pool({ - connectionString: env.DATABASE_URL, - ssl: false, - idleTimeoutMillis: 0, - connectionTimeoutMillis: 0 - }); - - await client.connect(); + const client = neon(env.DATABASE_URL); db = drizzle(client, { schema, diff --git a/yarn.lock b/yarn.lock index aef26d3..f4a8a78 100644 --- a/yarn.lock +++ b/yarn.lock @@ -265,6 +265,13 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@neondatabase/serverless@^0.9.3", "@neondatabase/serverless@>=0.1": + version "0.9.3" + resolved "https://registry.npmjs.org/@neondatabase/serverless/-/serverless-0.9.3.tgz" + integrity sha512-6ZBK8asl2Z3+ADEaELvbaVVGVlmY1oAzkxxZfpmXPKFuJhbDN+5fU3zYBamsahS/Ch1zE+CVWB3R+8QEI2LMSw== + dependencies: + "@types/pg" "8.11.6" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" @@ -412,10 +419,10 @@ resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz" integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== -"@types/pg@*", "@types/pg@^8.10.9": - version "8.10.9" - resolved "https://registry.npmjs.org/@types/pg/-/pg-8.10.9.tgz" - integrity sha512-UksbANNE/f8w0wOMxVKKIrLCbEMV+oM1uKejmwXr39olg4xqcfBDbXxObJAt6XxHbDa4XTKOlUEcEltXDX+XLQ== +"@types/pg@*", "@types/pg@^8.10.9", "@types/pg@8.11.6": + version "8.11.6" + resolved "https://registry.npmjs.org/@types/pg/-/pg-8.11.6.tgz" + integrity sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ== dependencies: "@types/node" "*" pg-protocol "*" @@ -3508,7 +3515,7 @@ pg-types@^4.0.1: postgres-interval "^3.0.0" postgres-range "^1.1.1" -pg@^8.11.3, pg@>=8, pg@>=8.0: +pg@>=8, pg@>=8.0: version "8.11.3" resolved "https://registry.npmjs.org/pg/-/pg-8.11.3.tgz" integrity sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==