From 1399073b94d3885a05d0e34e4b11b84b437bc34f Mon Sep 17 00:00:00 2001 From: Ulung32 <13521122@mahasiswa.itb.ac.id> Date: Sat, 4 Nov 2023 15:30:41 +0700 Subject: [PATCH] add prisma model --- .gitignore | 1 + package-lock.json | 80 +++++++++++++++++++++++++++++++++++++++++++- package.json | 4 ++- prisma/schema.prisma | 58 ++++++++++++++++++++++++++++++++ 4 files changed, 141 insertions(+), 2 deletions(-) create mode 100644 prisma/schema.prisma diff --git a/.gitignore b/.gitignore index 1b9599d..6a0e798 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ node_modules/ dist/ .env mysql +prisma/migrations/ \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 62aecea..0c0013d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,12 +9,14 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "@prisma/client": "^5.5.2", "@types/express": "^4.17.20", - "@types/node": "^20.8.10", "express": "^4.18.2" }, "devDependencies": { + "@types/node": "^20.8.10", "nodemon": "^3.0.1", + "prisma": "^5.5.2", "ts-node": "^10.9.1", "typescript": "^5.2.2" } @@ -56,6 +58,38 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@prisma/client": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.5.2.tgz", + "integrity": "sha512-54XkqR8M+fxbzYqe+bIXimYnkkcGqgOh0dn0yWtIk6CQT4IUCAvNFNcQZwk2KqaLU+/1PHTSWrcHtx4XjluR5w==", + "hasInstallScript": true, + "dependencies": { + "@prisma/engines-version": "5.5.1-1.aebc046ce8b88ebbcb45efe31cbe7d06fd6abc0a" + }, + "engines": { + "node": ">=16.13" + }, + "peerDependencies": { + "prisma": "*" + }, + "peerDependenciesMeta": { + "prisma": { + "optional": true + } + } + }, + "node_modules/@prisma/engines": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.5.2.tgz", + "integrity": "sha512-Be5hoNF8k+lkB3uEMiCHbhbfF6aj1GnrTBnn5iYFT7GEr3TsOEp1soviEcBR0tYCgHbxjcIxJMhdbvxALJhAqg==", + "devOptional": true, + "hasInstallScript": true + }, + "node_modules/@prisma/engines-version": { + "version": "5.5.1-1.aebc046ce8b88ebbcb45efe31cbe7d06fd6abc0a", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.5.1-1.aebc046ce8b88ebbcb45efe31cbe7d06fd6abc0a.tgz", + "integrity": "sha512-O+qHFnZvAyOFk1tUco2/VdiqS0ym42a3+6CYLScllmnpbyiTplgyLt2rK/B9BTjYkSHjrgMhkG47S0oqzdIckA==" + }, "node_modules/@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -944,6 +978,22 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/prisma": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.5.2.tgz", + "integrity": "sha512-WQtG6fevOL053yoPl6dbHV+IWgKo25IRN4/pwAGqcWmg7CrtoCzvbDbN9fXUc7QS2KK0LimHIqLsaCOX/vHl8w==", + "devOptional": true, + "hasInstallScript": true, + "dependencies": { + "@prisma/engines": "5.5.2" + }, + "bin": { + "prisma": "build/index.js" + }, + "engines": { + "node": ">=16.13" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -1344,6 +1394,25 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "@prisma/client": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.5.2.tgz", + "integrity": "sha512-54XkqR8M+fxbzYqe+bIXimYnkkcGqgOh0dn0yWtIk6CQT4IUCAvNFNcQZwk2KqaLU+/1PHTSWrcHtx4XjluR5w==", + "requires": { + "@prisma/engines-version": "5.5.1-1.aebc046ce8b88ebbcb45efe31cbe7d06fd6abc0a" + } + }, + "@prisma/engines": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.5.2.tgz", + "integrity": "sha512-Be5hoNF8k+lkB3uEMiCHbhbfF6aj1GnrTBnn5iYFT7GEr3TsOEp1soviEcBR0tYCgHbxjcIxJMhdbvxALJhAqg==", + "devOptional": true + }, + "@prisma/engines-version": { + "version": "5.5.1-1.aebc046ce8b88ebbcb45efe31cbe7d06fd6abc0a", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.5.1-1.aebc046ce8b88ebbcb45efe31cbe7d06fd6abc0a.tgz", + "integrity": "sha512-O+qHFnZvAyOFk1tUco2/VdiqS0ym42a3+6CYLScllmnpbyiTplgyLt2rK/B9BTjYkSHjrgMhkG47S0oqzdIckA==" + }, "@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -2027,6 +2096,15 @@ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, + "prisma": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.5.2.tgz", + "integrity": "sha512-WQtG6fevOL053yoPl6dbHV+IWgKo25IRN4/pwAGqcWmg7CrtoCzvbDbN9fXUc7QS2KK0LimHIqLsaCOX/vHl8w==", + "devOptional": true, + "requires": { + "@prisma/engines": "5.5.2" + } + }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", diff --git a/package.json b/package.json index dca2d04..9cefdbf 100644 --- a/package.json +++ b/package.json @@ -21,12 +21,14 @@ }, "homepage": "https://github.com/IF3110-2023-02-36/REST-Service#readme", "dependencies": { + "@prisma/client": "^5.5.2", "@types/express": "^4.17.20", - "@types/node": "^20.8.10", "express": "^4.18.2" }, "devDependencies": { + "@types/node": "^20.8.10", "nodemon": "^3.0.1", + "prisma": "^5.5.2", "ts-node": "^10.9.1", "typescript": "^5.2.2" } diff --git a/prisma/schema.prisma b/prisma/schema.prisma new file mode 100644 index 0000000..a4c5e1c --- /dev/null +++ b/prisma/schema.prisma @@ -0,0 +1,58 @@ +// This is your Prisma schema file, +// learn more about it in the docs: https://pris.ly/d/prisma-schema + +generator client { + provider = "prisma-client-js" +} + +datasource db { + provider = "mysql" + url = env("DATABASE_URL") +} + +model User { + id Int @id @default(autoincrement()) + username String + password String + category Category + isMembership Boolean @default(false) + saldo Float @default(0.0) + histories History[] + promo userPromo[] +} + +model History { + id Int @id @default(autoincrement()) + user_id Int + user User @relation(fields: [user_id], references: [id]) + jenis TypeTransaction + nominal Int +} + +model Promo{ + id Int @id @default(autoincrement()) + nama_promo String + percentage Float + promo userPromo[] +} + +model userPromo{ + id Int @id @default(autoincrement()) + user User @relation(fields: [user_id], references: [id]) + promo Promo @relation(fields: [promo_id], references: [id]) + user_id Int + promo_id Int +} + +enum Category { + ADMIN + USER + MODERATOR +} + +enum TypeTransaction{ + TOPUP + BAYAR + Transfer_in + Transfer_out +} -- GitLab