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