lang-database 11.0.1 → 12.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/migrations/{0_init → 20241205175825_init}/migration.sql +89 -79
- package/migrations/migration_lock.toml +1 -1
- package/package.json +36 -36
- package/schema.prisma +207 -175
- package/.env.removed +0 -17
- package/migrations/20240908140633_/migration.sql +0 -8
- package/migrations/20240909130756_removed_reverse_from_answers/migration.sql +0 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
-- CreateEnum
|
|
2
|
-
CREATE TYPE "AchievementType" AS ENUM ('Today15Min', 'Weekly15Min', 'Monthly15Min', 'CardDone', '
|
|
2
|
+
CREATE TYPE "AchievementType" AS ENUM ('Today15Min', 'Weekly15Min', 'Monthly15Min', 'CardDone', 'FiveCardsDone', 'DeckDone', 'DeckAlreadyKnown');
|
|
3
3
|
|
|
4
4
|
-- CreateEnum
|
|
5
5
|
CREATE TYPE "Answer" AS ENUM ('KNOWN', 'ALMOST_KNOWN', 'HARD', 'UNKNOWN');
|
|
@@ -9,85 +9,98 @@ CREATE TYPE "PurchaseStatus" AS ENUM ('PENDING', 'APPROVED');
|
|
|
9
9
|
|
|
10
10
|
-- CreateTable
|
|
11
11
|
CREATE TABLE "cards" (
|
|
12
|
-
"id"
|
|
13
|
-
"packId"
|
|
14
|
-
"front"
|
|
15
|
-
"back"
|
|
12
|
+
"id" TEXT NOT NULL,
|
|
13
|
+
"packId" TEXT NOT NULL,
|
|
14
|
+
"front" TEXT NOT NULL,
|
|
15
|
+
"back" TEXT NOT NULL,
|
|
16
|
+
"info" TEXT NOT NULL DEFAULT '',
|
|
16
17
|
"lastUpdate" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
17
|
-
"speechGenerated"
|
|
18
|
-
"info" STRING NOT NULL DEFAULT '',
|
|
18
|
+
"speechGenerated" BOOLEAN NOT NULL DEFAULT false,
|
|
19
19
|
|
|
20
20
|
CONSTRAINT "cards_pkey" PRIMARY KEY ("id")
|
|
21
21
|
);
|
|
22
22
|
|
|
23
23
|
-- CreateTable
|
|
24
24
|
CREATE TABLE "userCards" (
|
|
25
|
-
"userId"
|
|
26
|
-
"cardId"
|
|
27
|
-
"
|
|
25
|
+
"userId" TEXT NOT NULL,
|
|
26
|
+
"cardId" TEXT NOT NULL,
|
|
27
|
+
"reverse" BOOLEAN NOT NULL,
|
|
28
|
+
"done" BOOLEAN NOT NULL DEFAULT false,
|
|
29
|
+
"currentInterval" INTEGER,
|
|
28
30
|
"dueDate" TIMESTAMP(3),
|
|
29
|
-
"done" BOOL NOT NULL DEFAULT false,
|
|
30
|
-
"reverse" BOOL NOT NULL DEFAULT false,
|
|
31
31
|
|
|
32
32
|
CONSTRAINT "userCards_pkey" PRIMARY KEY ("userId","cardId","reverse")
|
|
33
33
|
);
|
|
34
34
|
|
|
35
|
+
-- CreateTable
|
|
36
|
+
CREATE TABLE "userStats" (
|
|
37
|
+
"userId" TEXT NOT NULL,
|
|
38
|
+
"lastAnswerTimestamp" TIMESTAMP(3) NOT NULL,
|
|
39
|
+
"dailyUsageSec" INTEGER NOT NULL,
|
|
40
|
+
"weeklyUsageSec" INTEGER NOT NULL,
|
|
41
|
+
"monthlyUsageSec" INTEGER NOT NULL,
|
|
42
|
+
"cardsDone" INTEGER NOT NULL,
|
|
43
|
+
|
|
44
|
+
CONSTRAINT "userStats_pkey" PRIMARY KEY ("userId")
|
|
45
|
+
);
|
|
46
|
+
|
|
35
47
|
-- CreateTable
|
|
36
48
|
CREATE TABLE "categories" (
|
|
37
|
-
"id"
|
|
38
|
-
"name"
|
|
49
|
+
"id" TEXT NOT NULL,
|
|
50
|
+
"name" TEXT NOT NULL,
|
|
51
|
+
"order" INTEGER,
|
|
39
52
|
|
|
40
53
|
CONSTRAINT "categories_pkey" PRIMARY KEY ("id")
|
|
41
54
|
);
|
|
42
55
|
|
|
43
56
|
-- CreateTable
|
|
44
57
|
CREATE TABLE "packs" (
|
|
45
|
-
"id"
|
|
46
|
-
"teacherId"
|
|
47
|
-
"name"
|
|
48
|
-
"shortDescription"
|
|
49
|
-
"longDescription"
|
|
50
|
-
"categoryId"
|
|
51
|
-
"published"
|
|
58
|
+
"id" TEXT NOT NULL,
|
|
59
|
+
"teacherId" TEXT NOT NULL,
|
|
60
|
+
"name" TEXT NOT NULL DEFAULT '',
|
|
61
|
+
"shortDescription" TEXT NOT NULL DEFAULT '',
|
|
62
|
+
"longDescription" TEXT NOT NULL DEFAULT '',
|
|
63
|
+
"categoryId" TEXT,
|
|
64
|
+
"published" BOOLEAN NOT NULL DEFAULT false,
|
|
52
65
|
"currentPrice" DECIMAL(65,30) NOT NULL,
|
|
53
|
-
"public"
|
|
66
|
+
"public" BOOLEAN NOT NULL DEFAULT false,
|
|
54
67
|
|
|
55
68
|
CONSTRAINT "packs_pkey" PRIMARY KEY ("id")
|
|
56
69
|
);
|
|
57
70
|
|
|
58
71
|
-- CreateTable
|
|
59
72
|
CREATE TABLE "users" (
|
|
60
|
-
"id"
|
|
61
|
-
"email"
|
|
62
|
-
"name" STRING NOT NULL,
|
|
63
|
-
"password" STRING,
|
|
64
|
-
"teamId" STRING,
|
|
65
|
-
"passwordActivated" BOOL NOT NULL DEFAULT false,
|
|
73
|
+
"id" TEXT NOT NULL,
|
|
74
|
+
"email" TEXT NOT NULL,
|
|
66
75
|
"timestamp" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
76
|
+
"name" TEXT NOT NULL,
|
|
77
|
+
"password" TEXT,
|
|
67
78
|
"subscriptionExpire" TIMESTAMP(3),
|
|
79
|
+
"teamId" TEXT,
|
|
80
|
+
"passwordActivated" BOOLEAN NOT NULL DEFAULT false,
|
|
68
81
|
|
|
69
82
|
CONSTRAINT "users_pkey" PRIMARY KEY ("id")
|
|
70
83
|
);
|
|
71
84
|
|
|
72
85
|
-- CreateTable
|
|
73
86
|
CREATE TABLE "achievements" (
|
|
74
|
-
"id"
|
|
75
|
-
"userId"
|
|
76
|
-
"badge"
|
|
87
|
+
"id" TEXT NOT NULL,
|
|
88
|
+
"userId" TEXT NOT NULL,
|
|
89
|
+
"badge" BOOLEAN NOT NULL,
|
|
77
90
|
"type" "AchievementType" NOT NULL,
|
|
78
|
-
"info"
|
|
91
|
+
"info" TEXT NOT NULL,
|
|
79
92
|
"timestamp" TIMESTAMP(3) NOT NULL,
|
|
80
|
-
"dismissed"
|
|
93
|
+
"dismissed" BOOLEAN NOT NULL DEFAULT false,
|
|
81
94
|
|
|
82
95
|
CONSTRAINT "achievements_pkey" PRIMARY KEY ("id")
|
|
83
96
|
);
|
|
84
97
|
|
|
85
98
|
-- CreateTable
|
|
86
99
|
CREATE TABLE "teams" (
|
|
87
|
-
"id"
|
|
88
|
-
"name"
|
|
89
|
-
"emailPattern"
|
|
90
|
-
"userCount"
|
|
100
|
+
"id" TEXT NOT NULL,
|
|
101
|
+
"name" TEXT NOT NULL,
|
|
102
|
+
"emailPattern" TEXT NOT NULL DEFAULT '',
|
|
103
|
+
"userCount" INTEGER NOT NULL,
|
|
91
104
|
"subscriptionExpire" TIMESTAMP(3),
|
|
92
105
|
|
|
93
106
|
CONSTRAINT "teams_pkey" PRIMARY KEY ("id")
|
|
@@ -95,40 +108,40 @@ CREATE TABLE "teams" (
|
|
|
95
108
|
|
|
96
109
|
-- CreateTable
|
|
97
110
|
CREATE TABLE "teachers" (
|
|
98
|
-
"id"
|
|
99
|
-
"email"
|
|
100
|
-
"name"
|
|
101
|
-
"password"
|
|
111
|
+
"id" TEXT NOT NULL,
|
|
112
|
+
"email" TEXT NOT NULL,
|
|
113
|
+
"name" TEXT NOT NULL,
|
|
114
|
+
"password" TEXT NOT NULL,
|
|
102
115
|
|
|
103
116
|
CONSTRAINT "teachers_pkey" PRIMARY KEY ("id")
|
|
104
117
|
);
|
|
105
118
|
|
|
106
119
|
-- CreateTable
|
|
107
120
|
CREATE TABLE "googleUsers" (
|
|
108
|
-
"id"
|
|
109
|
-
"userId"
|
|
121
|
+
"id" TEXT NOT NULL,
|
|
122
|
+
"userId" TEXT NOT NULL,
|
|
110
123
|
|
|
111
124
|
CONSTRAINT "googleUsers_pkey" PRIMARY KEY ("id")
|
|
112
125
|
);
|
|
113
126
|
|
|
114
127
|
-- CreateTable
|
|
115
128
|
CREATE TABLE "userAnswers" (
|
|
116
|
-
"id"
|
|
117
|
-
"userId"
|
|
118
|
-
"cardId"
|
|
119
|
-
"
|
|
129
|
+
"id" TEXT NOT NULL,
|
|
130
|
+
"userId" TEXT NOT NULL,
|
|
131
|
+
"cardId" TEXT NOT NULL,
|
|
132
|
+
"reverse" BOOLEAN NOT NULL,
|
|
120
133
|
"answer" "Answer" NOT NULL,
|
|
121
|
-
"
|
|
134
|
+
"timestamp" TIMESTAMP(3) NOT NULL,
|
|
122
135
|
|
|
123
136
|
CONSTRAINT "userAnswers_pkey" PRIMARY KEY ("id")
|
|
124
137
|
);
|
|
125
138
|
|
|
126
139
|
-- CreateTable
|
|
127
140
|
CREATE TABLE "purchases" (
|
|
128
|
-
"id"
|
|
129
|
-
"userId"
|
|
130
|
-
"packId"
|
|
131
|
-
"currency"
|
|
141
|
+
"id" TEXT NOT NULL,
|
|
142
|
+
"userId" TEXT NOT NULL,
|
|
143
|
+
"packId" TEXT NOT NULL,
|
|
144
|
+
"currency" TEXT NOT NULL,
|
|
132
145
|
"amount" DECIMAL(65,30) NOT NULL,
|
|
133
146
|
"orderDate" TIMESTAMP(3) NOT NULL,
|
|
134
147
|
"paymentDate" TIMESTAMP(3),
|
|
@@ -138,15 +151,19 @@ CREATE TABLE "purchases" (
|
|
|
138
151
|
);
|
|
139
152
|
|
|
140
153
|
-- CreateTable
|
|
141
|
-
CREATE TABLE "
|
|
142
|
-
"A"
|
|
143
|
-
"B"
|
|
154
|
+
CREATE TABLE "_PackToUser" (
|
|
155
|
+
"A" TEXT NOT NULL,
|
|
156
|
+
"B" TEXT NOT NULL,
|
|
157
|
+
|
|
158
|
+
CONSTRAINT "_PackToUser_AB_pkey" PRIMARY KEY ("A","B")
|
|
144
159
|
);
|
|
145
160
|
|
|
146
161
|
-- CreateTable
|
|
147
|
-
CREATE TABLE "
|
|
148
|
-
"A"
|
|
149
|
-
"B"
|
|
162
|
+
CREATE TABLE "_PackToTeam" (
|
|
163
|
+
"A" TEXT NOT NULL,
|
|
164
|
+
"B" TEXT NOT NULL,
|
|
165
|
+
|
|
166
|
+
CONSTRAINT "_PackToTeam_AB_pkey" PRIMARY KEY ("A","B")
|
|
150
167
|
);
|
|
151
168
|
|
|
152
169
|
-- CreateIndex
|
|
@@ -155,9 +172,6 @@ CREATE UNIQUE INDEX "cards_packId_front_key" ON "cards"("packId", "front");
|
|
|
155
172
|
-- CreateIndex
|
|
156
173
|
CREATE UNIQUE INDEX "cards_packId_back_key" ON "cards"("packId", "back");
|
|
157
174
|
|
|
158
|
-
-- CreateIndex
|
|
159
|
-
CREATE UNIQUE INDEX "userCards_userId_cardId_key" ON "userCards"("userId", "cardId");
|
|
160
|
-
|
|
161
175
|
-- CreateIndex
|
|
162
176
|
CREATE UNIQUE INDEX "IX_Users_Email" ON "users"("email");
|
|
163
177
|
|
|
@@ -168,32 +182,29 @@ CREATE UNIQUE INDEX "IX_teachers_Email" ON "teachers"("email");
|
|
|
168
182
|
CREATE UNIQUE INDEX "googleUsers_userId_key" ON "googleUsers"("userId");
|
|
169
183
|
|
|
170
184
|
-- CreateIndex
|
|
171
|
-
CREATE
|
|
185
|
+
CREATE INDEX "_PackToUser_B_index" ON "_PackToUser"("B");
|
|
172
186
|
|
|
173
187
|
-- CreateIndex
|
|
174
188
|
CREATE INDEX "_PackToTeam_B_index" ON "_PackToTeam"("B");
|
|
175
189
|
|
|
176
|
-
-- CreateIndex
|
|
177
|
-
CREATE UNIQUE INDEX "_PackToUser_AB_unique" ON "_PackToUser"("A", "B");
|
|
178
|
-
|
|
179
|
-
-- CreateIndex
|
|
180
|
-
CREATE INDEX "_PackToUser_B_index" ON "_PackToUser"("B");
|
|
181
|
-
|
|
182
190
|
-- AddForeignKey
|
|
183
191
|
ALTER TABLE "cards" ADD CONSTRAINT "cards_packId_fkey" FOREIGN KEY ("packId") REFERENCES "packs"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
184
192
|
|
|
185
193
|
-- AddForeignKey
|
|
186
|
-
ALTER TABLE "userCards" ADD CONSTRAINT "
|
|
194
|
+
ALTER TABLE "userCards" ADD CONSTRAINT "userCards_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
187
195
|
|
|
188
196
|
-- AddForeignKey
|
|
189
|
-
ALTER TABLE "userCards" ADD CONSTRAINT "
|
|
197
|
+
ALTER TABLE "userCards" ADD CONSTRAINT "userCards_cardId_fkey" FOREIGN KEY ("cardId") REFERENCES "cards"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
190
198
|
|
|
191
199
|
-- AddForeignKey
|
|
192
|
-
ALTER TABLE "
|
|
200
|
+
ALTER TABLE "userStats" ADD CONSTRAINT "userStats_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
193
201
|
|
|
194
202
|
-- AddForeignKey
|
|
195
203
|
ALTER TABLE "packs" ADD CONSTRAINT "packs_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "teachers"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
196
204
|
|
|
205
|
+
-- AddForeignKey
|
|
206
|
+
ALTER TABLE "packs" ADD CONSTRAINT "packs_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "categories"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
207
|
+
|
|
197
208
|
-- AddForeignKey
|
|
198
209
|
ALTER TABLE "users" ADD CONSTRAINT "users_teamId_fkey" FOREIGN KEY ("teamId") REFERENCES "teams"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
199
210
|
|
|
@@ -203,23 +214,17 @@ ALTER TABLE "achievements" ADD CONSTRAINT "achievements_userId_fkey" FOREIGN KEY
|
|
|
203
214
|
-- AddForeignKey
|
|
204
215
|
ALTER TABLE "googleUsers" ADD CONSTRAINT "googleUsers_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
205
216
|
|
|
206
|
-
-- AddForeignKey
|
|
207
|
-
ALTER TABLE "userAnswers" ADD CONSTRAINT "userAnswers_cardId_fkey" FOREIGN KEY ("cardId") REFERENCES "cards"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
208
|
-
|
|
209
217
|
-- AddForeignKey
|
|
210
218
|
ALTER TABLE "userAnswers" ADD CONSTRAINT "userAnswers_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
211
219
|
|
|
212
220
|
-- AddForeignKey
|
|
213
|
-
ALTER TABLE "
|
|
221
|
+
ALTER TABLE "userAnswers" ADD CONSTRAINT "userAnswers_cardId_fkey" FOREIGN KEY ("cardId") REFERENCES "cards"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
214
222
|
|
|
215
223
|
-- AddForeignKey
|
|
216
224
|
ALTER TABLE "purchases" ADD CONSTRAINT "purchases_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
217
225
|
|
|
218
226
|
-- AddForeignKey
|
|
219
|
-
ALTER TABLE "
|
|
220
|
-
|
|
221
|
-
-- AddForeignKey
|
|
222
|
-
ALTER TABLE "_PackToTeam" ADD CONSTRAINT "_PackToTeam_B_fkey" FOREIGN KEY ("B") REFERENCES "teams"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
227
|
+
ALTER TABLE "purchases" ADD CONSTRAINT "purchases_packId_fkey" FOREIGN KEY ("packId") REFERENCES "packs"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
223
228
|
|
|
224
229
|
-- AddForeignKey
|
|
225
230
|
ALTER TABLE "_PackToUser" ADD CONSTRAINT "_PackToUser_A_fkey" FOREIGN KEY ("A") REFERENCES "packs"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
@@ -227,3 +232,8 @@ ALTER TABLE "_PackToUser" ADD CONSTRAINT "_PackToUser_A_fkey" FOREIGN KEY ("A")
|
|
|
227
232
|
-- AddForeignKey
|
|
228
233
|
ALTER TABLE "_PackToUser" ADD CONSTRAINT "_PackToUser_B_fkey" FOREIGN KEY ("B") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
229
234
|
|
|
235
|
+
-- AddForeignKey
|
|
236
|
+
ALTER TABLE "_PackToTeam" ADD CONSTRAINT "_PackToTeam_A_fkey" FOREIGN KEY ("A") REFERENCES "packs"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
237
|
+
|
|
238
|
+
-- AddForeignKey
|
|
239
|
+
ALTER TABLE "_PackToTeam" ADD CONSTRAINT "_PackToTeam_B_fkey" FOREIGN KEY ("B") REFERENCES "teams"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
package/package.json
CHANGED
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "lang-database",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "",
|
|
5
|
-
"main": "index.js",
|
|
6
|
-
"types": "index.d.ts",
|
|
7
|
-
"scripts": {
|
|
8
|
-
"create-migration": "npx prisma migrate dev --create-only",
|
|
9
|
-
"generate": "npx prisma generate",
|
|
10
|
-
"push-dev-dbs": "npm run push-dev-db && npm run push-local-db && npm run push-test-db",
|
|
11
|
-
"push-prod-db": "copy .env-prod .env && prisma db push --skip-generate",
|
|
12
|
-
"push-dev-db": "copy .env-dev .env && prisma db push --skip-generate",
|
|
13
|
-
"push-local-db": "copy .env-local .env && prisma db push --skip-generate",
|
|
14
|
-
"push-test-db": "copy .env-test .env && prisma db push --skip-generate",
|
|
15
|
-
"test": "echo \"Error: no test specified\" && exit 1",
|
|
16
|
-
"postinstall": "npm run generate"
|
|
17
|
-
},
|
|
18
|
-
"repository": {
|
|
19
|
-
"type": "git",
|
|
20
|
-
"url": "https://bitbucket.org/syke80/lang-database.git"
|
|
21
|
-
},
|
|
22
|
-
"keywords": [],
|
|
23
|
-
"author": "",
|
|
24
|
-
"license": "ISC",
|
|
25
|
-
"bugs": {
|
|
26
|
-
"url": "https://bitbucket.org/syke80/lang-database/issues"
|
|
27
|
-
},
|
|
28
|
-
"homepage": "https://bitbucket.org/syke80/lang-database#readme",
|
|
29
|
-
"devDependencies": {
|
|
30
|
-
"@prisma/client": "^
|
|
31
|
-
"prisma": "^
|
|
32
|
-
},
|
|
33
|
-
"peerDependencies": {
|
|
34
|
-
"@prisma/client": ">=5"
|
|
35
|
-
}
|
|
36
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "lang-database",
|
|
3
|
+
"version": "12.1.0",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"types": "index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"create-migration": "npx prisma migrate dev --create-only",
|
|
9
|
+
"generate": "npx prisma generate",
|
|
10
|
+
"push-dev-dbs": "npm run push-dev-db && npm run push-local-db && npm run push-test-db",
|
|
11
|
+
"push-prod-db": "copy .env-prod .env && prisma db push --skip-generate",
|
|
12
|
+
"push-dev-db": "copy .env-dev .env && prisma db push --skip-generate",
|
|
13
|
+
"push-local-db": "copy .env-local .env && prisma db push --skip-generate",
|
|
14
|
+
"push-test-db": "copy .env-test .env && prisma db push --skip-generate",
|
|
15
|
+
"test": "echo \"Error: no test specified\" && exit 1",
|
|
16
|
+
"postinstall": "npm run generate"
|
|
17
|
+
},
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "https://bitbucket.org/syke80/lang-database.git"
|
|
21
|
+
},
|
|
22
|
+
"keywords": [],
|
|
23
|
+
"author": "",
|
|
24
|
+
"license": "ISC",
|
|
25
|
+
"bugs": {
|
|
26
|
+
"url": "https://bitbucket.org/syke80/lang-database/issues"
|
|
27
|
+
},
|
|
28
|
+
"homepage": "https://bitbucket.org/syke80/lang-database#readme",
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@prisma/client": "^6.0.1",
|
|
31
|
+
"prisma": "^6.0.1"
|
|
32
|
+
},
|
|
33
|
+
"peerDependencies": {
|
|
34
|
+
"@prisma/client": ">=5"
|
|
35
|
+
}
|
|
36
|
+
}
|
package/schema.prisma
CHANGED
|
@@ -1,175 +1,207 @@
|
|
|
1
|
-
generator client {
|
|
2
|
-
provider = "prisma-client-js"
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
datasource db {
|
|
6
|
-
provider = "
|
|
7
|
-
url = env("DATABASE_URL")
|
|
8
|
-
shadowDatabaseUrl = env("SHADOW_DATABASE_URL")
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
model Card {
|
|
12
|
-
id String @id @default(cuid())
|
|
13
|
-
pack Pack @relation(fields: [packId], references: [id])
|
|
14
|
-
packId String
|
|
15
|
-
front String
|
|
16
|
-
back String
|
|
17
|
-
info String @default("")
|
|
18
|
-
lastUpdate DateTime @default(now())
|
|
19
|
-
userCards UserCard[]
|
|
20
|
-
speechGenerated Boolean @default(false)
|
|
21
|
-
answers UserAnswer[]
|
|
22
|
-
|
|
23
|
-
@@unique([packId, front])
|
|
24
|
-
@@unique([packId, back])
|
|
25
|
-
@@map("cards")
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
model UserCard {
|
|
29
|
-
user User @relation(fields: [userId], references: [id])
|
|
30
|
-
userId String
|
|
31
|
-
card Card @relation(fields: [cardId], references: [id], onDelete: Cascade)
|
|
32
|
-
cardId String
|
|
33
|
-
reverse Boolean
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
@@
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
@@map("
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
userId
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
1
|
+
generator client {
|
|
2
|
+
provider = "prisma-client-js"
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
datasource db {
|
|
6
|
+
provider = "postgresql"
|
|
7
|
+
url = env("DATABASE_URL")
|
|
8
|
+
shadowDatabaseUrl = env("SHADOW_DATABASE_URL")
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
model Card {
|
|
12
|
+
id String @id @default(cuid())
|
|
13
|
+
pack Pack @relation(fields: [packId], references: [id])
|
|
14
|
+
packId String
|
|
15
|
+
front String
|
|
16
|
+
back String
|
|
17
|
+
info String @default("")
|
|
18
|
+
lastUpdate DateTime @default(now())
|
|
19
|
+
userCards UserCard[]
|
|
20
|
+
speechGenerated Boolean @default(false)
|
|
21
|
+
answers UserAnswer[]
|
|
22
|
+
|
|
23
|
+
@@unique([packId, front])
|
|
24
|
+
@@unique([packId, back])
|
|
25
|
+
@@map("cards")
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
model UserCard {
|
|
29
|
+
user User @relation(fields: [userId], references: [id])
|
|
30
|
+
userId String
|
|
31
|
+
card Card @relation(fields: [cardId], references: [id], onDelete: Cascade)
|
|
32
|
+
cardId String
|
|
33
|
+
reverse Boolean
|
|
34
|
+
|
|
35
|
+
done Boolean @default(false)
|
|
36
|
+
currentInterval Int? @db.SmallInt
|
|
37
|
+
dueDate DateTime?
|
|
38
|
+
|
|
39
|
+
@@id([userId, cardId, reverse])
|
|
40
|
+
@@map("userCards")
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
model UserDeck {
|
|
44
|
+
user User @relation(fields: [userId], references: [id])
|
|
45
|
+
userId String
|
|
46
|
+
deck Pack @relation(fields: [deckId], references: [id], onDelete: Cascade)
|
|
47
|
+
deckId String
|
|
48
|
+
reverse Boolean
|
|
49
|
+
|
|
50
|
+
allCards Int @db.SmallInt
|
|
51
|
+
newCards Int @db.SmallInt
|
|
52
|
+
inProgressCards Int @db.SmallInt
|
|
53
|
+
doneCards Int @db.SmallInt
|
|
54
|
+
|
|
55
|
+
@@id([userId, deckId, reverse])
|
|
56
|
+
@@map("userDecks")
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
model UserStat {
|
|
60
|
+
user User @relation(fields: [userId], references: [id])
|
|
61
|
+
userId String
|
|
62
|
+
|
|
63
|
+
lastAnswerTimestamp DateTime
|
|
64
|
+
dailyUsageSec Int
|
|
65
|
+
weeklyUsageSec Int
|
|
66
|
+
monthlyUsageSec Int
|
|
67
|
+
cardsDone Int
|
|
68
|
+
|
|
69
|
+
@@id([userId])
|
|
70
|
+
@@map("userStats")
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
model Category {
|
|
74
|
+
id String @id @default(cuid())
|
|
75
|
+
name String
|
|
76
|
+
order Int? @db.SmallInt
|
|
77
|
+
packs Pack[]
|
|
78
|
+
@@map("categories")
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
model Pack {
|
|
82
|
+
id String @id @default(cuid())
|
|
83
|
+
teacher Teacher @relation(fields: [teacherId], references: [id])
|
|
84
|
+
teacherId String
|
|
85
|
+
name String @default("")
|
|
86
|
+
shortDescription String @default("")
|
|
87
|
+
longDescription String @default("")
|
|
88
|
+
category Category? @relation(fields: [categoryId], references: [id])
|
|
89
|
+
categoryId String?
|
|
90
|
+
published Boolean @default(false)
|
|
91
|
+
currentPrice Decimal
|
|
92
|
+
public Boolean @default(false)
|
|
93
|
+
userDecks UserDeck[]
|
|
94
|
+
cards Card[]
|
|
95
|
+
purchases Purchase[]
|
|
96
|
+
teams Team[]
|
|
97
|
+
@@map("packs")
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
model User {
|
|
101
|
+
id String @id @default(cuid())
|
|
102
|
+
email String @unique(map: "IX_Users_Email")
|
|
103
|
+
timestamp DateTime @default(now())
|
|
104
|
+
name String
|
|
105
|
+
password String?
|
|
106
|
+
googleUser GoogleUser?
|
|
107
|
+
achievements Achievement[]
|
|
108
|
+
purchases Purchase[]
|
|
109
|
+
userCards UserCard[]
|
|
110
|
+
userDecks UserDeck[]
|
|
111
|
+
userStat UserStat?
|
|
112
|
+
userAnswers UserAnswer[]
|
|
113
|
+
subscriptionExpire DateTime?
|
|
114
|
+
team Team? @relation(fields: [teamId], references: [id])
|
|
115
|
+
teamId String?
|
|
116
|
+
passwordActivated Boolean @default(false)
|
|
117
|
+
@@map("users")
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
model Achievement {
|
|
121
|
+
id String @id @default(cuid())
|
|
122
|
+
user User @relation(fields: [userId], references: [id])
|
|
123
|
+
userId String
|
|
124
|
+
badge Boolean
|
|
125
|
+
type AchievementType
|
|
126
|
+
info String
|
|
127
|
+
timestamp DateTime
|
|
128
|
+
dismissed Boolean @default(false)
|
|
129
|
+
@@map("achievements")
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
enum AchievementType {
|
|
133
|
+
Today15Min
|
|
134
|
+
Weekly15Min
|
|
135
|
+
Monthly15Min
|
|
136
|
+
CardDone
|
|
137
|
+
FiveCardsDone
|
|
138
|
+
DeckDone
|
|
139
|
+
DeckAlreadyKnown
|
|
140
|
+
@@map("AchievementType")
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
model Team {
|
|
144
|
+
id String @id @default(cuid())
|
|
145
|
+
name String
|
|
146
|
+
emailPattern String @default("")
|
|
147
|
+
additionalDecks Pack[]
|
|
148
|
+
members User[]
|
|
149
|
+
userCount Int
|
|
150
|
+
subscriptionExpire DateTime?
|
|
151
|
+
@@map("teams")
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
model Teacher {
|
|
155
|
+
id String @id @default(cuid())
|
|
156
|
+
email String @unique(map: "IX_teachers_Email")
|
|
157
|
+
name String
|
|
158
|
+
password String
|
|
159
|
+
packs Pack[]
|
|
160
|
+
@@map("teachers")
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
model GoogleUser {
|
|
164
|
+
id String @id
|
|
165
|
+
user User @relation(fields: [userId], references: [id])
|
|
166
|
+
userId String @unique
|
|
167
|
+
@@map("googleUsers")
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
model UserAnswer {
|
|
171
|
+
id String @id @default(cuid())
|
|
172
|
+
user User @relation(fields: [userId], references: [id])
|
|
173
|
+
userId String
|
|
174
|
+
card Card @relation(fields: [cardId], references: [id], onDelete: Cascade)
|
|
175
|
+
cardId String
|
|
176
|
+
reverse Boolean
|
|
177
|
+
answer Answer
|
|
178
|
+
timestamp DateTime
|
|
179
|
+
@@map("userAnswers")
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
enum Answer {
|
|
183
|
+
KNOWN
|
|
184
|
+
ALMOST_KNOWN
|
|
185
|
+
HARD
|
|
186
|
+
UNKNOWN
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
enum PurchaseStatus {
|
|
190
|
+
PENDING
|
|
191
|
+
APPROVED
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
model Purchase {
|
|
195
|
+
id String @id @default(cuid())
|
|
196
|
+
user User @relation(fields: [userId], references: [id])
|
|
197
|
+
userId String
|
|
198
|
+
pack Pack @relation(fields: [packId], references: [id])
|
|
199
|
+
packId String
|
|
200
|
+
currency String
|
|
201
|
+
amount Decimal
|
|
202
|
+
orderDate DateTime
|
|
203
|
+
paymentDate DateTime?
|
|
204
|
+
status PurchaseStatus
|
|
205
|
+
|
|
206
|
+
@@map("purchases")
|
|
207
|
+
}
|
package/.env.removed
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# DATABASE_URL=postgresql://attila:A8JpZy_JhOM5uZm7QvIzAQ@free-tier7.aws-eu-west-1.cockroachlabs.cloud:26257/ezfraze-dev?sslmode=verify-full&options=--cluster%3Dday-bee-3717
|
|
2
|
-
DATABASE_URL=postgresql://attila:A8JpZy_JhOM5uZm7QvIzAQ@free-tier7.aws-eu-west-1.cockroachlabs.cloud:26257/ezfraze-prod-v2?sslmode=verify-full&options=--cluster%3Dday-bee-3717
|
|
3
|
-
# DATABASE_URL="postgresql://postgres:password@localhost:5432/ezfraze"
|
|
4
|
-
JWT_KEY=This is my jwt key
|
|
5
|
-
GOOGLE_CLIENT_ID=161628947473-h1575jmkaiqrgpo78nemsu2u4vk143ka.apps.googleusercontent.com
|
|
6
|
-
|
|
7
|
-
MAILERSEND_API_TOKEN=mlsn.90e8e408adf939502e682bf19949ee35f40eb1e6642333ab9870b371cc6e7de3
|
|
8
|
-
MAILERSEND_ACTVATION_TEMPLATE_ID=3z0vklonwwv47qrx
|
|
9
|
-
|
|
10
|
-
SPEECH_BUCKET_NAME=ezfraze-speech-sandbox
|
|
11
|
-
|
|
12
|
-
CHECKOUT_COM_SECRET_API_KEY=sk_sbox_y5bn577ag2jqybphho3vsm6gpim
|
|
13
|
-
CHECKOUT_COM_PAYMENT_URL=https://api.sandbox.checkout.com/payments
|
|
14
|
-
CHECKOUT_COM_PROCESSING_CHANNEL=pc_zj4dltodkn6uldfeyeisnol63q
|
|
15
|
-
PORT=6061
|
|
16
|
-
|
|
17
|
-
SUBSCRIPTION_DISABLED=true
|