From d58b0babd2261fc4bb1f535701379b5985e4eb71 Mon Sep 17 00:00:00 2001 From: eneller Date: Fri, 6 Mar 2026 10:24:47 +0100 Subject: [PATCH] begin sequelize --- package-lock.json | 110 ++++++++++++++++++++++++++- server/package.json | 5 +- server/src/util.ts | 2 +- server/tsconfig.json | 2 + shared/src/interfaces/transaction.ts | 1 + shared/src/model/user.ts | 18 +++++ shared/tsconfig.json | 2 +- 7 files changed, 133 insertions(+), 7 deletions(-) create mode 100644 shared/src/model/user.ts diff --git a/package-lock.json b/package-lock.json index 579c89e..5e4274c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4364,9 +4364,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.3.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.2.tgz", - "integrity": "sha512-RpV6r/ij22zRRdyBPcxDeKAzH43phWVKEjL2iksqo1Vz3CuBUrgmPpPhALKiRfU7OMCmeeO9vECBMsV0hMTG8Q==", + "version": "25.3.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.5.tgz", + "integrity": "sha512-oX8xrhvpiyRCQkG1MFchB09f+cXftgIXb3a7UUa4Y3wpmZPw5tyZGTLWhlESOLq1Rq6oDlc8npVU2/9xiCuXMA==", "license": "MIT", "dependencies": { "undici-types": "~7.18.0" @@ -5333,6 +5333,12 @@ "dev": true, "license": "MIT" }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, "node_modules/concurrently": { "version": "9.2.1", "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz", @@ -6628,6 +6634,12 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -7030,6 +7042,17 @@ ], "license": "MIT" }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -8718,6 +8741,15 @@ "node": ">=8" } }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -9711,6 +9743,73 @@ "node": ">= 10.0.0" } }, + "node_modules/sequelize-typescript": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/sequelize-typescript/-/sequelize-typescript-2.1.6.tgz", + "integrity": "sha512-Vc2N++3en346RsbGjL3h7tgAl2Y7V+2liYTAOZ8XL0KTw3ahFHsyAUzOwct51n+g70I1TOUDgs06Oh6+XGcFkQ==", + "license": "MIT", + "dependencies": { + "glob": "7.2.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "@types/validator": "*", + "reflect-metadata": "*", + "sequelize": ">=6.20.1" + } + }, + "node_modules/sequelize-typescript/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/sequelize-typescript/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/sequelize-typescript/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sequelize-typescript/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/serve-static": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", @@ -11167,14 +11266,17 @@ "express": "^5.2.1", "pg": "^8.20.0", "pg-hstore": "^2.3.4", + "reflect-metadata": "^0.2.2", "sequelize": "^6.37.7", + "sequelize-typescript": "^2.1.6", "winston": "^3.19.0" }, "devDependencies": { "@types/cors": "^2.8.19", "@types/express": "^5.0.6", - "@types/node": "^25.3.2", + "@types/node": "^25.3.5", "@types/pg": "^8.16.0", + "@types/validator": "^13.15.10", "concurrently": "^9.2.1", "eslint": "^10.0.2", "nodemon": "^3.1.14", diff --git a/server/package.json b/server/package.json index 815aa1e..f6cf9e2 100644 --- a/server/package.json +++ b/server/package.json @@ -22,14 +22,17 @@ "express": "^5.2.1", "pg": "^8.20.0", "pg-hstore": "^2.3.4", + "reflect-metadata": "^0.2.2", "sequelize": "^6.37.7", + "sequelize-typescript": "^2.1.6", "winston": "^3.19.0" }, "devDependencies": { "@types/cors": "^2.8.19", "@types/express": "^5.0.6", - "@types/node": "^25.3.2", + "@types/node": "^25.3.5", "@types/pg": "^8.16.0", + "@types/validator": "^13.15.10", "concurrently": "^9.2.1", "eslint": "^10.0.2", "nodemon": "^3.1.14", diff --git a/server/src/util.ts b/server/src/util.ts index 57b1e59..4382109 100644 --- a/server/src/util.ts +++ b/server/src/util.ts @@ -25,7 +25,7 @@ const db = new Sequelize({ database: process.env.DB_NAME || 'postgres', username: process.env.DB_USER || 'postgres', password: process.env.DB_PASSWORD || 'pass', - logging: false, // Disable logging in production + logging: logger.debug.bind(logger), }); // Test the connection diff --git a/server/tsconfig.json b/server/tsconfig.json index 49bc721..3147013 100644 --- a/server/tsconfig.json +++ b/server/tsconfig.json @@ -5,6 +5,8 @@ "esModuleInterop": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true, + "experimentalDecorators": true, + "emitDecoratorMetadata": true, "module": "nodenext", "moduleResolution": "nodenext" diff --git a/shared/src/interfaces/transaction.ts b/shared/src/interfaces/transaction.ts index d09c625..dcf4823 100644 --- a/shared/src/interfaces/transaction.ts +++ b/shared/src/interfaces/transaction.ts @@ -1,3 +1,4 @@ + export interface Transaction { id: string; partner: string; diff --git a/shared/src/model/user.ts b/shared/src/model/user.ts new file mode 100644 index 0000000..b7c471a --- /dev/null +++ b/shared/src/model/user.ts @@ -0,0 +1,18 @@ +import { Table, Column, Model, CreatedAt, DataType} from 'sequelize-typescript'; + +@Table +export class User extends Model{ + + @Column({primaryKey: true, unique: true, allowNull: false}) + userID: string; + + @Column + displayName: string; + + @Column(dataType: DataType.DECIMAL(20,2)) + balance: number; + + @CreatedAt + creationDate: Date; + +} \ No newline at end of file diff --git a/shared/tsconfig.json b/shared/tsconfig.json index e76eaa0..73c85e4 100644 --- a/shared/tsconfig.json +++ b/shared/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../tsconfig.json", "compilerOptions": { - "outDir": "../../dist/out-tsc/shared", + "outDir": "../dist/out-tsc/shared", "declaration": true, "module": "es2020" },