api: add prisma pg adapters and requirements

Pedro Lucas Porcellis porcellis@eletrotupi.com 2 months ago 76fe3a3c176623f40e7fef881515a0d904392c0b
Parents: 3e2d237
3 file(s) changed
  • api/package-lock.json +205 -10
  • api/package.json +8 -4
  • api/src/lib/prisma.ts +3 -3
api/package-lock.json
@@ -10,6 +10,7 @@ "version": "0.0.0",
10 10 "license": "ISC",
11 11 "dependencies": {
12 12 "@prisma/adapter-better-sqlite3": "^7.5.0",
13 + "@prisma/adapter-pg": "^7.7.0",
13 14 "@prisma/client": "^7.5.0",
14 15 "@types/cors": "^2.8.19",
15 16 "@types/jsonwebtoken": "^9.0.10",
@@ -19,19 +20,21 @@ "cors": "^2.8.6",
19 20 "date-fns": "^4.1.0",
20 21 "express": "^5.2.1",
21 22 "jsonwebtoken": "^9.0.3",
22 - "morgan": "^1.10.1"
23 + "morgan": "^1.10.1",
24 + "pg": "^8.20.0"
23 25 },
24 26 "devDependencies": {
25 27 "@types/better-sqlite3": "^7.6.13",
26 28 "@types/express": "^5.0.6",
27 29 "@types/morgan": "^1.9.10",
28 - "@types/node": "^25.5.0",
30 + "@types/node": "^25.5.2",
29 31 "ava": "^6.4.1",
30 32 "prisma": "^7.5.0",
31 33 "supertest": "^7.1.4",
32 34 "ts-node": "^10.9.2",
33 35 "tsc-alias": "^1.8.16",
34 - "tsconfig-paths": "^4.2.0"
36 + "tsconfig-paths": "^4.2.0",
37 + "typescript": "^6.0.2"
35 38 }
36 39 },
37 40 "node_modules/@chevrotain/cst-dts-gen": {
@@ -329,6 +332,33 @@ "@prisma/driver-adapter-utils": "7.5.0",
329 332 "better-sqlite3": "^12.6.0"
330 333 }
331 334 },
335 + "node_modules/@prisma/adapter-pg": {
336 + "version": "7.7.0",
337 + "resolved": "https://registry.npmjs.org/@prisma/adapter-pg/-/adapter-pg-7.7.0.tgz",
338 + "integrity": "sha512-q33Ta8sKbgzEpAy0lx45tAq//yMv0qcb+8nj+TCA3P4wiAY+OBFEFk/NDkZncAfHaNJeGo5WJpJdpbL+ijYx8g==",
339 + "license": "Apache-2.0",
340 + "dependencies": {
341 + "@prisma/driver-adapter-utils": "7.7.0",
342 + "@types/pg": "^8.16.0",
343 + "pg": "^8.16.3",
344 + "postgres-array": "3.0.4"
345 + }
346 + },
347 + "node_modules/@prisma/adapter-pg/node_modules/@prisma/debug": {
348 + "version": "7.7.0",
349 + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.7.0.tgz",
350 + "integrity": "sha512-12J62XdqCmpiwJHhHdQxZeY3ckVCWIFmcJP8hg5dPTceeiQ0wiojXGFYTluKqFQfu46fRLgb/rLALZMAx3+dTA==",
351 + "license": "Apache-2.0"
352 + },
353 + "node_modules/@prisma/adapter-pg/node_modules/@prisma/driver-adapter-utils": {
354 + "version": "7.7.0",
355 + "resolved": "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-7.7.0.tgz",
356 + "integrity": "sha512-gZXREeu6mOk7zXfGFJgh86p7Vhj0sXNKp+4Cg1tWYo7V2dfncP2qxS2BiTmbIIha8xPqItkl0WSw38RuSq1HoQ==",
357 + "license": "Apache-2.0",
358 + "dependencies": {
359 + "@prisma/debug": "7.7.0"
360 + }
361 + },
332 362 "node_modules/@prisma/client": {
333 363 "version": "7.5.0",
334 364 "resolved": "https://registry.npmjs.org/@prisma/client/-/client-7.5.0.tgz",
@@ -683,12 +713,23 @@ "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
683 713 "license": "MIT"
684 714 },
685 715 "node_modules/@types/node": {
686 - "version": "25.5.0",
687 - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz",
688 - "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==",
716 + "version": "25.5.2",
717 + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz",
718 + "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==",
689 719 "license": "MIT",
690 720 "dependencies": {
691 721 "undici-types": "~7.18.0"
722 + }
723 + },
724 + "node_modules/@types/pg": {
725 + "version": "8.20.0",
726 + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.20.0.tgz",
727 + "integrity": "sha512-bEPFOaMAHTEP1EzpvHTbmwR8UsFyHSKsRisLIHVMXnpNefSbGA1bD6CVy+qKjGSqmZqNqBDV2azOBo8TgkcVow==",
728 + "license": "MIT",
729 + "dependencies": {
730 + "@types/node": "*",
731 + "pg-protocol": "*",
732 + "pg-types": "^2.2.0"
692 733 }
693 734 },
694 735 "node_modules/@types/qs": {
@@ -3829,6 +3870,104 @@ "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==",
3829 3870 "devOptional": true,
3830 3871 "license": "MIT"
3831 3872 },
3873 + "node_modules/pg": {
3874 + "version": "8.20.0",
3875 + "resolved": "https://registry.npmjs.org/pg/-/pg-8.20.0.tgz",
3876 + "integrity": "sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA==",
3877 + "license": "MIT",
3878 + "dependencies": {
3879 + "pg-connection-string": "^2.12.0",
3880 + "pg-pool": "^3.13.0",
3881 + "pg-protocol": "^1.13.0",
3882 + "pg-types": "2.2.0",
3883 + "pgpass": "1.0.5"
3884 + },
3885 + "engines": {
3886 + "node": ">= 16.0.0"
3887 + },
3888 + "optionalDependencies": {
3889 + "pg-cloudflare": "^1.3.0"
3890 + },
3891 + "peerDependencies": {
3892 + "pg-native": ">=3.0.1"
3893 + },
3894 + "peerDependenciesMeta": {
3895 + "pg-native": {
3896 + "optional": true
3897 + }
3898 + }
3899 + },
3900 + "node_modules/pg-cloudflare": {
3901 + "version": "1.3.0",
3902 + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.3.0.tgz",
3903 + "integrity": "sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ==",
3904 + "license": "MIT",
3905 + "optional": true
3906 + },
3907 + "node_modules/pg-connection-string": {
3908 + "version": "2.12.0",
3909 + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.12.0.tgz",
3910 + "integrity": "sha512-U7qg+bpswf3Cs5xLzRqbXbQl85ng0mfSV/J0nnA31MCLgvEaAo7CIhmeyrmJpOr7o+zm0rXK+hNnT5l9RHkCkQ==",
3911 + "license": "MIT"
3912 + },
3913 + "node_modules/pg-int8": {
3914 + "version": "1.0.1",
3915 + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz",
3916 + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==",
3917 + "license": "ISC",
3918 + "engines": {
3919 + "node": ">=4.0.0"
3920 + }
3921 + },
3922 + "node_modules/pg-pool": {
3923 + "version": "3.13.0",
3924 + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.13.0.tgz",
3925 + "integrity": "sha512-gB+R+Xud1gLFuRD/QgOIgGOBE2KCQPaPwkzBBGC9oG69pHTkhQeIuejVIk3/cnDyX39av2AxomQiyPT13WKHQA==",
3926 + "license": "MIT",
3927 + "peerDependencies": {
3928 + "pg": ">=8.0"
3929 + }
3930 + },
3931 + "node_modules/pg-protocol": {
3932 + "version": "1.13.0",
3933 + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.13.0.tgz",
3934 + "integrity": "sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w==",
3935 + "license": "MIT"
3936 + },
3937 + "node_modules/pg-types": {
3938 + "version": "2.2.0",
3939 + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz",
3940 + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==",
3941 + "license": "MIT",
3942 + "dependencies": {
3943 + "pg-int8": "1.0.1",
3944 + "postgres-array": "~2.0.0",
3945 + "postgres-bytea": "~1.0.0",
3946 + "postgres-date": "~1.0.4",
3947 + "postgres-interval": "^1.1.0"
3948 + },
3949 + "engines": {
3950 + "node": ">=4"
3951 + }
3952 + },
3953 + "node_modules/pg-types/node_modules/postgres-array": {
3954 + "version": "2.0.0",
3955 + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz",
3956 + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==",
3957 + "license": "MIT",
3958 + "engines": {
3959 + "node": ">=4"
3960 + }
3961 + },
3962 + "node_modules/pgpass": {
3963 + "version": "1.0.5",
3964 + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz",
3965 + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==",
3966 + "license": "MIT",
3967 + "dependencies": {
3968 + "split2": "^4.1.0"
3969 + }
3970 + },
3832 3971 "node_modules/picomatch": {
3833 3972 "version": "4.0.3",
3834 3973 "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
@@ -3897,6 +4036,45 @@ "type": "individual",
3897 4036 "url": "https://github.com/sponsors/porsager"
3898 4037 }
3899 4038 },
4039 + "node_modules/postgres-array": {
4040 + "version": "3.0.4",
4041 + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.4.tgz",
4042 + "integrity": "sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==",
4043 + "license": "MIT",
4044 + "engines": {
4045 + "node": ">=12"
4046 + }
4047 + },
4048 + "node_modules/postgres-bytea": {
4049 + "version": "1.0.1",
4050 + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.1.tgz",
4051 + "integrity": "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==",
4052 + "license": "MIT",
4053 + "engines": {
4054 + "node": ">=0.10.0"
4055 + }
4056 + },
4057 + "node_modules/postgres-date": {
4058 + "version": "1.0.7",
4059 + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz",
4060 + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==",
4061 + "license": "MIT",
4062 + "engines": {
4063 + "node": ">=0.10.0"
4064 + }
4065 + },
4066 + "node_modules/postgres-interval": {
4067 + "version": "1.2.0",
4068 + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz",
4069 + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==",
4070 + "license": "MIT",
4071 + "dependencies": {
4072 + "xtend": "^4.0.0"
4073 + },
4074 + "engines": {
4075 + "node": ">=0.10.0"
4076 + }
4077 + },
3900 4078 "node_modules/prebuild-install": {
3901 4079 "version": "7.1.3",
3902 4080 "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz",
@@ -4596,6 +4774,15 @@ "funding": {
4596 4774 "url": "https://github.com/chalk/slice-ansi?sponsor=1"
4597 4775 }
4598 4776 },
4777 + "node_modules/split2": {
4778 + "version": "4.2.0",
4779 + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
4780 + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
4781 + "license": "ISC",
4782 + "engines": {
4783 + "node": ">= 10.x"
4784 + }
4785 + },
4599 4786 "node_modules/sprintf-js": {
4600 4787 "version": "1.0.3",
4601 4788 "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@@ -5172,12 +5359,11 @@ "node": ">= 0.6"
5172 5359 }
5173 5360 },
5174 5361 "node_modules/typescript": {
5175 - "version": "5.9.3",
5176 - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
5177 - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
5362 + "version": "6.0.2",
5363 + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz",
5364 + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==",
5178 5365 "devOptional": true,
5179 5366 "license": "Apache-2.0",
5180 - "peer": true,
5181 5367 "bin": {
5182 5368 "tsc": "bin/tsc",
5183 5369 "tsserver": "bin/tsserver"
@@ -5446,6 +5632,15 @@ "signal-exit": "^4.0.1"
5446 5632 },
5447 5633 "engines": {
5448 5634 "node": "^18.17.0 || >=20.5.0"
5635 + }
5636 + },
5637 + "node_modules/xtend": {
5638 + "version": "4.0.2",
5639 + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
5640 + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
5641 + "license": "MIT",
5642 + "engines": {
5643 + "node": ">=0.4"
5449 5644 }
5450 5645 },
5451 5646 "node_modules/y18n": {
api/package.json
@@ -11,10 +11,12 @@ },
11 11 "scripts": {
12 12 "build": "tsc && tsc-alias",
13 13 "start": "ts-node -r tsconfig-paths/register src/index.ts",
14 - "test": "npx ava"
14 + "test": "npx ava",
15 + "dev": "prisma generate && prisma migrate deploy && npm run start"
15 16 },
16 17 "dependencies": {
17 18 "@prisma/adapter-better-sqlite3": "^7.5.0",
19 + "@prisma/adapter-pg": "^7.7.0",
18 20 "@prisma/client": "^7.5.0",
19 21 "@types/cors": "^2.8.19",
20 22 "@types/jsonwebtoken": "^9.0.10",
@@ -24,18 +26,20 @@ "cors": "^2.8.6",
24 26 "date-fns": "^4.1.0",
25 27 "express": "^5.2.1",
26 28 "jsonwebtoken": "^9.0.3",
27 - "morgan": "^1.10.1"
29 + "morgan": "^1.10.1",
30 + "pg": "^8.20.0"
28 31 },
29 32 "devDependencies": {
30 33 "@types/better-sqlite3": "^7.6.13",
31 34 "@types/express": "^5.0.6",
32 35 "@types/morgan": "^1.9.10",
33 - "@types/node": "^25.5.0",
36 + "@types/node": "^25.5.2",
34 37 "ava": "^6.4.1",
35 38 "prisma": "^7.5.0",
36 39 "supertest": "^7.1.4",
37 40 "ts-node": "^10.9.2",
38 41 "tsc-alias": "^1.8.16",
39 - "tsconfig-paths": "^4.2.0"
42 + "tsconfig-paths": "^4.2.0",
43 + "typescript": "^6.0.2"
40 44 }
41 45 }
api/src/lib/prisma.ts
@@ -1,10 +1,10 @@
1 1 import "dotenv/config"
2 - import { PrismaBetterSqlite3 } from '@prisma/adapter-better-sqlite3';
2 + import { PrismaPg } from '@prisma/adapter-pg';
3 3 import { PrismaClient } from '@prisma/client';
4 4
5 - const connectionStr = `${process.env.DATABASE_URL}`;
5 + const connectionString = `${process.env.DATABASE_URL}`;
6 6
7 - const adapter = new PrismaBetterSqlite3({ url: connectionStr });
7 + const adapter = new PrismaPg({ connectionString });
8 8 const prisma = new PrismaClient({ adapter });
9 9
10 10 export {