@virtality/schema 0.0.1
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/index.d.ts +2 -0
- package/index.js +1 -0
- package/package.json +28 -0
- package/prisma/migrations/0_init/migration.sql +223 -0
- package/prisma/migrations/20250422072524_adds_map_model/migration.sql +8 -0
- package/prisma/migrations/20250423172656_adds_patient_session/migration.sql +51 -0
- package/prisma/migrations/20250424214137_fixes_patient_session/migration.sql +2 -0
- package/prisma/migrations/20250429190619_modifies_session_data/migration.sql +2 -0
- package/prisma/migrations/20250504180251_modifies_sessio_data_id/migration.sql +10 -0
- package/prisma/migrations/20250608162534_waitinglist/migration.sql +9 -0
- package/prisma/migrations/20250620060047_modifies_waitlist/migration.sql +11 -0
- package/prisma/migrations/20250622222852_adds_stripe/migration.sql +29 -0
- package/prisma/migrations/20250623104158_syncing/migration.sql +8 -0
- package/prisma/migrations/20250626195856_auth_admin/migration.sql +8 -0
- package/prisma/migrations/migration_lock.toml +3 -0
- package/prisma/schema.prisma +238 -0
package/index.d.ts
ADDED
package/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '@prisma/client';
|
package/package.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@virtality/schema",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"types": "index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"generate": "npx prisma generate",
|
|
9
|
+
"postinstall": "npm run generate"
|
|
10
|
+
},
|
|
11
|
+
"keywords": [
|
|
12
|
+
"typescript",
|
|
13
|
+
"types"
|
|
14
|
+
],
|
|
15
|
+
"author": "Stelios Pnevmatikakis",
|
|
16
|
+
"license": "ISC",
|
|
17
|
+
"type": "module",
|
|
18
|
+
"publishConfig": {
|
|
19
|
+
"access": "public"
|
|
20
|
+
},
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"@prisma/client": "^6.10.1",
|
|
23
|
+
"prisma": "^6.10.1"
|
|
24
|
+
},
|
|
25
|
+
"peerDependencies": {
|
|
26
|
+
"@prisma/client": ">=6"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
-- CreateTable
|
|
2
|
+
CREATE TABLE "Account" (
|
|
3
|
+
"id" TEXT NOT NULL,
|
|
4
|
+
"accountId" TEXT NOT NULL,
|
|
5
|
+
"providerId" TEXT NOT NULL,
|
|
6
|
+
"userId" TEXT NOT NULL,
|
|
7
|
+
"accessToken" TEXT,
|
|
8
|
+
"refreshToken" TEXT,
|
|
9
|
+
"idToken" TEXT,
|
|
10
|
+
"accessTokenExpiresAt" TIMESTAMP(6),
|
|
11
|
+
"refreshTokenExpiresAt" TIMESTAMP(6),
|
|
12
|
+
"scope" TEXT,
|
|
13
|
+
"password" TEXT,
|
|
14
|
+
"createdAt" TIMESTAMP(6) NOT NULL,
|
|
15
|
+
"updatedAt" TIMESTAMP(6) NOT NULL,
|
|
16
|
+
|
|
17
|
+
CONSTRAINT "account_pkey" PRIMARY KEY ("id")
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
-- CreateTable
|
|
21
|
+
CREATE TABLE "Device" (
|
|
22
|
+
"id" TEXT NOT NULL,
|
|
23
|
+
"deviceId" TEXT,
|
|
24
|
+
"userId" TEXT NOT NULL,
|
|
25
|
+
"model" TEXT,
|
|
26
|
+
"lastUsed" TIMESTAMP(6) NOT NULL,
|
|
27
|
+
"createdAt" TIMESTAMP(6) NOT NULL,
|
|
28
|
+
"deletedAt" TIMESTAMP(6),
|
|
29
|
+
"name" TEXT NOT NULL,
|
|
30
|
+
|
|
31
|
+
CONSTRAINT "devices_pkey" PRIMARY KEY ("id")
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
-- CreateTable
|
|
35
|
+
CREATE TABLE "Exercise" (
|
|
36
|
+
"id" TEXT NOT NULL,
|
|
37
|
+
"name" TEXT NOT NULL,
|
|
38
|
+
"displayName" TEXT NOT NULL,
|
|
39
|
+
"category" TEXT NOT NULL,
|
|
40
|
+
"direction" TEXT NOT NULL,
|
|
41
|
+
"bodyPart" TEXT NOT NULL,
|
|
42
|
+
"item" TEXT,
|
|
43
|
+
"image" TEXT,
|
|
44
|
+
|
|
45
|
+
CONSTRAINT "exercises_pkey" PRIMARY KEY ("id")
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
-- CreateTable
|
|
49
|
+
CREATE TABLE "Invitation" (
|
|
50
|
+
"id" TEXT NOT NULL,
|
|
51
|
+
"organizationId" TEXT NOT NULL,
|
|
52
|
+
"email" TEXT NOT NULL,
|
|
53
|
+
"role" TEXT,
|
|
54
|
+
"status" TEXT NOT NULL,
|
|
55
|
+
"expiresAt" TIMESTAMP(6) NOT NULL,
|
|
56
|
+
"inviterId" TEXT NOT NULL,
|
|
57
|
+
|
|
58
|
+
CONSTRAINT "invitation_pkey" PRIMARY KEY ("id")
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
-- CreateTable
|
|
62
|
+
CREATE TABLE "Member" (
|
|
63
|
+
"id" TEXT NOT NULL,
|
|
64
|
+
"organizationId" TEXT NOT NULL,
|
|
65
|
+
"userId" TEXT NOT NULL,
|
|
66
|
+
"role" TEXT NOT NULL,
|
|
67
|
+
"createdAt" TIMESTAMP(6) NOT NULL,
|
|
68
|
+
|
|
69
|
+
CONSTRAINT "member_pkey" PRIMARY KEY ("id")
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
-- CreateTable
|
|
73
|
+
CREATE TABLE "Organization" (
|
|
74
|
+
"id" TEXT NOT NULL,
|
|
75
|
+
"name" TEXT NOT NULL,
|
|
76
|
+
"slug" TEXT NOT NULL,
|
|
77
|
+
"logo" TEXT,
|
|
78
|
+
"createdAt" TIMESTAMP(6) NOT NULL,
|
|
79
|
+
"metadata" TEXT,
|
|
80
|
+
"isActive" BOOLEAN DEFAULT true,
|
|
81
|
+
"isFrozen" BOOLEAN DEFAULT false,
|
|
82
|
+
|
|
83
|
+
CONSTRAINT "organization_pkey" PRIMARY KEY ("id")
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
-- CreateTable
|
|
87
|
+
CREATE TABLE "Patient" (
|
|
88
|
+
"id" VARCHAR(255) NOT NULL,
|
|
89
|
+
"userId" VARCHAR(255),
|
|
90
|
+
"name" VARCHAR(255) NOT NULL,
|
|
91
|
+
"email" VARCHAR(255),
|
|
92
|
+
"phone" VARCHAR(50),
|
|
93
|
+
"dob" VARCHAR(50),
|
|
94
|
+
"sex" VARCHAR(50),
|
|
95
|
+
"weight" VARCHAR(50),
|
|
96
|
+
"height" VARCHAR(50),
|
|
97
|
+
"imageUrl" VARCHAR(255),
|
|
98
|
+
"avatarId" TEXT,
|
|
99
|
+
"createdAt" TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
100
|
+
"updatedAt" TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
101
|
+
|
|
102
|
+
CONSTRAINT "patients_pkey" PRIMARY KEY ("id")
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
-- CreateTable
|
|
106
|
+
CREATE TABLE "PatientProgram" (
|
|
107
|
+
"id" TEXT NOT NULL,
|
|
108
|
+
"name" TEXT NOT NULL,
|
|
109
|
+
"userId" TEXT NOT NULL,
|
|
110
|
+
"patientId" TEXT NOT NULL,
|
|
111
|
+
|
|
112
|
+
CONSTRAINT "patient_program_pkey" PRIMARY KEY ("id")
|
|
113
|
+
);
|
|
114
|
+
|
|
115
|
+
-- CreateTable
|
|
116
|
+
CREATE TABLE "ProgramExercise" (
|
|
117
|
+
"id" TEXT NOT NULL,
|
|
118
|
+
"programId" TEXT NOT NULL,
|
|
119
|
+
"exerciseId" TEXT NOT NULL,
|
|
120
|
+
"sets" INTEGER NOT NULL DEFAULT 3,
|
|
121
|
+
"reps" INTEGER NOT NULL DEFAULT 10,
|
|
122
|
+
"restTime" INTEGER NOT NULL DEFAULT 30,
|
|
123
|
+
"holdTime" INTEGER NOT NULL DEFAULT 1,
|
|
124
|
+
"speed" DOUBLE PRECISION NOT NULL DEFAULT 1,
|
|
125
|
+
|
|
126
|
+
CONSTRAINT "program_exercises_pkey" PRIMARY KEY ("id")
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
-- CreateTable
|
|
130
|
+
CREATE TABLE "Session" (
|
|
131
|
+
"id" TEXT NOT NULL,
|
|
132
|
+
"expiresAt" TIMESTAMP(6) NOT NULL,
|
|
133
|
+
"token" TEXT NOT NULL,
|
|
134
|
+
"createdAt" TIMESTAMP(6) NOT NULL,
|
|
135
|
+
"updatedAt" TIMESTAMP(6) NOT NULL,
|
|
136
|
+
"ipAddress" TEXT,
|
|
137
|
+
"userAgent" TEXT,
|
|
138
|
+
"userId" TEXT NOT NULL,
|
|
139
|
+
"activeOrganizationId" TEXT,
|
|
140
|
+
|
|
141
|
+
CONSTRAINT "session_pkey" PRIMARY KEY ("id")
|
|
142
|
+
);
|
|
143
|
+
|
|
144
|
+
-- CreateTable
|
|
145
|
+
CREATE TABLE "User" (
|
|
146
|
+
"id" TEXT NOT NULL,
|
|
147
|
+
"name" TEXT NOT NULL,
|
|
148
|
+
"email" TEXT NOT NULL,
|
|
149
|
+
"emailVerified" BOOLEAN NOT NULL,
|
|
150
|
+
"image" TEXT,
|
|
151
|
+
"createdAt" TIMESTAMP(6) NOT NULL,
|
|
152
|
+
"updatedAt" TIMESTAMP(6) NOT NULL,
|
|
153
|
+
"phone" TEXT,
|
|
154
|
+
|
|
155
|
+
CONSTRAINT "user_pkey" PRIMARY KEY ("id")
|
|
156
|
+
);
|
|
157
|
+
|
|
158
|
+
-- CreateTable
|
|
159
|
+
CREATE TABLE "Verification" (
|
|
160
|
+
"id" TEXT NOT NULL,
|
|
161
|
+
"identifier" TEXT NOT NULL,
|
|
162
|
+
"value" TEXT NOT NULL,
|
|
163
|
+
"expiresAt" TIMESTAMP(6) NOT NULL,
|
|
164
|
+
"createdAt" TIMESTAMP(6),
|
|
165
|
+
"updatedAt" TIMESTAMP(6),
|
|
166
|
+
|
|
167
|
+
CONSTRAINT "verification_pkey" PRIMARY KEY ("id")
|
|
168
|
+
);
|
|
169
|
+
|
|
170
|
+
-- CreateTable
|
|
171
|
+
CREATE TABLE "Avatar" (
|
|
172
|
+
"id" TEXT NOT NULL,
|
|
173
|
+
"name" TEXT NOT NULL,
|
|
174
|
+
"imageUrl" TEXT,
|
|
175
|
+
|
|
176
|
+
CONSTRAINT "Avatar_pkey" PRIMARY KEY ("id")
|
|
177
|
+
);
|
|
178
|
+
|
|
179
|
+
-- CreateIndex
|
|
180
|
+
CREATE UNIQUE INDEX "organization_slug_key" ON "Organization"("slug");
|
|
181
|
+
|
|
182
|
+
-- CreateIndex
|
|
183
|
+
CREATE UNIQUE INDEX "session_token_key" ON "Session"("token");
|
|
184
|
+
|
|
185
|
+
-- CreateIndex
|
|
186
|
+
CREATE UNIQUE INDEX "user_email_key" ON "User"("email");
|
|
187
|
+
|
|
188
|
+
-- AddForeignKey
|
|
189
|
+
ALTER TABLE "Account" ADD CONSTRAINT "account_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
|
190
|
+
|
|
191
|
+
-- AddForeignKey
|
|
192
|
+
ALTER TABLE "Device" ADD CONSTRAINT "devices_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
|
193
|
+
|
|
194
|
+
-- AddForeignKey
|
|
195
|
+
ALTER TABLE "Invitation" ADD CONSTRAINT "invitation_inviterId_fkey" FOREIGN KEY ("inviterId") REFERENCES "User"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
|
196
|
+
|
|
197
|
+
-- AddForeignKey
|
|
198
|
+
ALTER TABLE "Invitation" ADD CONSTRAINT "invitation_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE NO ACTION;
|
|
199
|
+
|
|
200
|
+
-- AddForeignKey
|
|
201
|
+
ALTER TABLE "Member" ADD CONSTRAINT "member_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE NO ACTION;
|
|
202
|
+
|
|
203
|
+
-- AddForeignKey
|
|
204
|
+
ALTER TABLE "Member" ADD CONSTRAINT "member_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE NO ACTION;
|
|
205
|
+
|
|
206
|
+
-- AddForeignKey
|
|
207
|
+
ALTER TABLE "Patient" ADD CONSTRAINT "Patient_avatarId_fkey" FOREIGN KEY ("avatarId") REFERENCES "Avatar"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
208
|
+
|
|
209
|
+
-- AddForeignKey
|
|
210
|
+
ALTER TABLE "PatientProgram" ADD CONSTRAINT "PatientProgram_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
211
|
+
|
|
212
|
+
-- AddForeignKey
|
|
213
|
+
ALTER TABLE "PatientProgram" ADD CONSTRAINT "PatientProgram_patientId_fkey" FOREIGN KEY ("patientId") REFERENCES "Patient"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
214
|
+
|
|
215
|
+
-- AddForeignKey
|
|
216
|
+
ALTER TABLE "ProgramExercise" ADD CONSTRAINT "program_exercises_programId_fkey" FOREIGN KEY ("programId") REFERENCES "PatientProgram"("id") ON DELETE CASCADE ON UPDATE NO ACTION;
|
|
217
|
+
|
|
218
|
+
-- AddForeignKey
|
|
219
|
+
ALTER TABLE "ProgramExercise" ADD CONSTRAINT "ProgramExercise_exerciseId_fkey" FOREIGN KEY ("exerciseId") REFERENCES "Exercise"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
220
|
+
|
|
221
|
+
-- AddForeignKey
|
|
222
|
+
ALTER TABLE "Session" ADD CONSTRAINT "session_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
|
223
|
+
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
-- DropForeignKey
|
|
2
|
+
ALTER TABLE "PatientProgram" DROP CONSTRAINT "PatientProgram_patientId_fkey";
|
|
3
|
+
|
|
4
|
+
-- CreateTable
|
|
5
|
+
CREATE TABLE "PatientSession" (
|
|
6
|
+
"id" TEXT NOT NULL,
|
|
7
|
+
"programId" TEXT NOT NULL,
|
|
8
|
+
"createdAt" TIMESTAMP(6) NOT NULL,
|
|
9
|
+
"completedAt" TIMESTAMP(6) NOT NULL,
|
|
10
|
+
"deletedAt" TIMESTAMP(6),
|
|
11
|
+
|
|
12
|
+
CONSTRAINT "PatientSession_pkey" PRIMARY KEY ("id")
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
-- CreateTable
|
|
16
|
+
CREATE TABLE "SessionExercise" (
|
|
17
|
+
"id" TEXT NOT NULL,
|
|
18
|
+
"patientSessionId" TEXT NOT NULL,
|
|
19
|
+
"exerciseId" TEXT NOT NULL,
|
|
20
|
+
"sets" INTEGER NOT NULL,
|
|
21
|
+
"reps" INTEGER NOT NULL,
|
|
22
|
+
"restTime" INTEGER NOT NULL,
|
|
23
|
+
"holdTime" INTEGER NOT NULL,
|
|
24
|
+
"speed" DOUBLE PRECISION NOT NULL,
|
|
25
|
+
|
|
26
|
+
CONSTRAINT "SessionExercise_pkey" PRIMARY KEY ("id")
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
-- CreateTable
|
|
30
|
+
CREATE TABLE "SessionData" (
|
|
31
|
+
"id" INTEGER NOT NULL,
|
|
32
|
+
"sessionExerciseId" TEXT NOT NULL,
|
|
33
|
+
"value" DECIMAL(65,30) NOT NULL,
|
|
34
|
+
|
|
35
|
+
CONSTRAINT "SessionData_pkey" PRIMARY KEY ("id")
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
-- AddForeignKey
|
|
39
|
+
ALTER TABLE "PatientProgram" ADD CONSTRAINT "PatientProgram_patientId_fkey" FOREIGN KEY ("patientId") REFERENCES "Patient"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
40
|
+
|
|
41
|
+
-- AddForeignKey
|
|
42
|
+
ALTER TABLE "PatientSession" ADD CONSTRAINT "PatientSession_programId_fkey" FOREIGN KEY ("programId") REFERENCES "PatientProgram"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
43
|
+
|
|
44
|
+
-- AddForeignKey
|
|
45
|
+
ALTER TABLE "SessionExercise" ADD CONSTRAINT "SessionExercise_patientSessionId_fkey" FOREIGN KEY ("patientSessionId") REFERENCES "PatientSession"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
46
|
+
|
|
47
|
+
-- AddForeignKey
|
|
48
|
+
ALTER TABLE "SessionExercise" ADD CONSTRAINT "SessionExercise_exerciseId_fkey" FOREIGN KEY ("exerciseId") REFERENCES "Exercise"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
49
|
+
|
|
50
|
+
-- AddForeignKey
|
|
51
|
+
ALTER TABLE "SessionData" ADD CONSTRAINT "SessionData_sessionExerciseId_fkey" FOREIGN KEY ("sessionExerciseId") REFERENCES "SessionExercise"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Warnings:
|
|
3
|
+
|
|
4
|
+
- The primary key for the `SessionData` table will be changed. If it partially fails, the table could be left without primary key constraint.
|
|
5
|
+
|
|
6
|
+
*/
|
|
7
|
+
-- AlterTable
|
|
8
|
+
ALTER TABLE "SessionData" DROP CONSTRAINT "SessionData_pkey",
|
|
9
|
+
ALTER COLUMN "id" SET DATA TYPE TEXT,
|
|
10
|
+
ADD CONSTRAINT "SessionData_pkey" PRIMARY KEY ("id");
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Warnings:
|
|
3
|
+
|
|
4
|
+
- You are about to drop the column `fullName` on the `WaitingList` table. All the data in the column will be lost.
|
|
5
|
+
- You are about to drop the column `specialty` on the `WaitingList` table. All the data in the column will be lost.
|
|
6
|
+
|
|
7
|
+
*/
|
|
8
|
+
-- AlterTable
|
|
9
|
+
ALTER TABLE "WaitingList" DROP COLUMN "fullName",
|
|
10
|
+
DROP COLUMN "specialty",
|
|
11
|
+
ADD COLUMN "plan" TEXT;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Warnings:
|
|
3
|
+
|
|
4
|
+
- You are about to drop the `WaitingList` table. If the table is not empty, all the data it contains will be lost.
|
|
5
|
+
|
|
6
|
+
*/
|
|
7
|
+
-- AlterTable
|
|
8
|
+
ALTER TABLE "User" ADD COLUMN "stripeCustomerId" TEXT;
|
|
9
|
+
|
|
10
|
+
-- DropTable
|
|
11
|
+
DROP TABLE "WaitingList";
|
|
12
|
+
|
|
13
|
+
-- CreateTable
|
|
14
|
+
CREATE TABLE "Subscription" (
|
|
15
|
+
"id" TEXT NOT NULL,
|
|
16
|
+
"plan" TEXT NOT NULL,
|
|
17
|
+
"referenceId" TEXT NOT NULL,
|
|
18
|
+
"stripeCustomerId" TEXT,
|
|
19
|
+
"stripeSubscriptionId" TEXT,
|
|
20
|
+
"status" TEXT NOT NULL,
|
|
21
|
+
"periodStart" TIMESTAMP(3),
|
|
22
|
+
"periodEnd" TIMESTAMP(3),
|
|
23
|
+
"cancelAtPeriodEnd" BOOLEAN,
|
|
24
|
+
"seats" INTEGER,
|
|
25
|
+
"trialStart" TIMESTAMP(3),
|
|
26
|
+
"trialEnd" TIMESTAMP(3),
|
|
27
|
+
|
|
28
|
+
CONSTRAINT "Subscription_pkey" PRIMARY KEY ("id")
|
|
29
|
+
);
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
generator client {
|
|
2
|
+
provider = "prisma-client-js"
|
|
3
|
+
binaryTargets = ["native", "rhel-openssl-3.0.x"]
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
datasource db {
|
|
7
|
+
provider = "postgresql"
|
|
8
|
+
url = env("DATABASE_URL")
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
model Account {
|
|
12
|
+
id String @id(map: "account_pkey")
|
|
13
|
+
accountId String
|
|
14
|
+
providerId String
|
|
15
|
+
userId String
|
|
16
|
+
accessToken String?
|
|
17
|
+
refreshToken String?
|
|
18
|
+
idToken String?
|
|
19
|
+
accessTokenExpiresAt DateTime? @db.Timestamp(6)
|
|
20
|
+
refreshTokenExpiresAt DateTime? @db.Timestamp(6)
|
|
21
|
+
scope String?
|
|
22
|
+
password String?
|
|
23
|
+
createdAt DateTime @db.Timestamp(6)
|
|
24
|
+
updatedAt DateTime @db.Timestamp(6)
|
|
25
|
+
user User @relation(fields: [userId], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "account_userId_fkey")
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
model Device {
|
|
29
|
+
id String @id(map: "devices_pkey")
|
|
30
|
+
deviceId String?
|
|
31
|
+
userId String
|
|
32
|
+
model String?
|
|
33
|
+
lastUsed DateTime @db.Timestamp(6)
|
|
34
|
+
createdAt DateTime @db.Timestamp(6)
|
|
35
|
+
deletedAt DateTime? @db.Timestamp(6)
|
|
36
|
+
name String
|
|
37
|
+
user User @relation(fields: [userId], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "devices_userId_fkey")
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
model Exercise {
|
|
41
|
+
id String @id(map: "exercises_pkey")
|
|
42
|
+
name String
|
|
43
|
+
displayName String
|
|
44
|
+
category String
|
|
45
|
+
direction String
|
|
46
|
+
bodyPart String
|
|
47
|
+
item String?
|
|
48
|
+
image String?
|
|
49
|
+
programExercise ProgramExercise[]
|
|
50
|
+
sessionExercise SessionExercise[]
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
model Invitation {
|
|
54
|
+
id String @id(map: "invitation_pkey")
|
|
55
|
+
organizationId String
|
|
56
|
+
email String
|
|
57
|
+
role String?
|
|
58
|
+
status String
|
|
59
|
+
expiresAt DateTime @db.Timestamp(6)
|
|
60
|
+
inviterId String
|
|
61
|
+
user User @relation(fields: [inviterId], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "invitation_inviterId_fkey")
|
|
62
|
+
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "invitation_organizationId_fkey")
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
model Member {
|
|
66
|
+
id String @id(map: "member_pkey")
|
|
67
|
+
organizationId String
|
|
68
|
+
userId String
|
|
69
|
+
role String
|
|
70
|
+
createdAt DateTime @db.Timestamp(6)
|
|
71
|
+
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "member_organizationId_fkey")
|
|
72
|
+
user User @relation(fields: [userId], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "member_userId_fkey")
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
model Organization {
|
|
76
|
+
id String @id(map: "organization_pkey")
|
|
77
|
+
name String
|
|
78
|
+
slug String @unique(map: "organization_slug_key")
|
|
79
|
+
logo String?
|
|
80
|
+
createdAt DateTime @db.Timestamp(6)
|
|
81
|
+
metadata String?
|
|
82
|
+
isActive Boolean? @default(true)
|
|
83
|
+
isFrozen Boolean? @default(false)
|
|
84
|
+
members Member[]
|
|
85
|
+
invitations Invitation[]
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
model Patient {
|
|
89
|
+
id String @id(map: "patients_pkey") @db.VarChar(255)
|
|
90
|
+
userId String? @db.VarChar(255)
|
|
91
|
+
name String @db.VarChar(255)
|
|
92
|
+
email String? @db.VarChar(255)
|
|
93
|
+
phone String? @db.VarChar(50)
|
|
94
|
+
dob String? @db.VarChar(50)
|
|
95
|
+
sex String? @db.VarChar(50)
|
|
96
|
+
weight String? @db.VarChar(50)
|
|
97
|
+
height String? @db.VarChar(50)
|
|
98
|
+
imageUrl String? @db.VarChar(255)
|
|
99
|
+
avatarId String?
|
|
100
|
+
createdAt DateTime @default(now()) @db.Timestamp(6)
|
|
101
|
+
updatedAt DateTime @default(now()) @db.Timestamp(6)
|
|
102
|
+
avatar Avatar? @relation(fields: [avatarId], references: [id])
|
|
103
|
+
patientProgram PatientProgram[]
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
model PatientProgram {
|
|
107
|
+
id String @id(map: "patient_program_pkey")
|
|
108
|
+
name String
|
|
109
|
+
userId String
|
|
110
|
+
patientId String
|
|
111
|
+
User User @relation(fields: [userId], references: [id])
|
|
112
|
+
Patient Patient @relation(fields: [patientId], references: [id], onDelete: Cascade)
|
|
113
|
+
programExercise ProgramExercise[]
|
|
114
|
+
patientSession PatientSession[]
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
model ProgramExercise {
|
|
118
|
+
id String @id(map: "program_exercises_pkey")
|
|
119
|
+
programId String
|
|
120
|
+
exerciseId String
|
|
121
|
+
sets Int @default(3)
|
|
122
|
+
reps Int @default(10)
|
|
123
|
+
restTime Int @default(30)
|
|
124
|
+
holdTime Int @default(1)
|
|
125
|
+
speed Float @default(1)
|
|
126
|
+
patientProgram PatientProgram @relation(fields: [programId], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "program_exercises_programId_fkey")
|
|
127
|
+
exercise Exercise @relation(fields: [exerciseId], references: [id])
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
model Session {
|
|
131
|
+
id String @id(map: "session_pkey")
|
|
132
|
+
expiresAt DateTime @db.Timestamp(6)
|
|
133
|
+
token String @unique(map: "session_token_key")
|
|
134
|
+
createdAt DateTime @db.Timestamp(6)
|
|
135
|
+
updatedAt DateTime @db.Timestamp(6)
|
|
136
|
+
ipAddress String?
|
|
137
|
+
userAgent String?
|
|
138
|
+
userId String
|
|
139
|
+
activeOrganizationId String?
|
|
140
|
+
impersonatedBy String?
|
|
141
|
+
user User @relation(fields: [userId], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "session_userId_fkey")
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
model User {
|
|
145
|
+
id String @id(map: "user_pkey")
|
|
146
|
+
name String
|
|
147
|
+
email String @unique(map: "user_email_key")
|
|
148
|
+
emailVerified Boolean
|
|
149
|
+
image String?
|
|
150
|
+
createdAt DateTime @db.Timestamp(6)
|
|
151
|
+
updatedAt DateTime @db.Timestamp(6)
|
|
152
|
+
phone String?
|
|
153
|
+
stripeCustomerId String?
|
|
154
|
+
role String? @default("user")
|
|
155
|
+
banned Boolean?
|
|
156
|
+
banReason String?
|
|
157
|
+
banExpires DateTime?
|
|
158
|
+
devices Device[]
|
|
159
|
+
patientProgram PatientProgram[]
|
|
160
|
+
sessions Session[]
|
|
161
|
+
accounts Account[]
|
|
162
|
+
members Member[]
|
|
163
|
+
invitations Invitation[]
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
model Verification {
|
|
167
|
+
id String @id(map: "verification_pkey")
|
|
168
|
+
identifier String
|
|
169
|
+
value String
|
|
170
|
+
expiresAt DateTime @db.Timestamp(6)
|
|
171
|
+
createdAt DateTime? @db.Timestamp(6)
|
|
172
|
+
updatedAt DateTime? @db.Timestamp(6)
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
model Avatar {
|
|
176
|
+
id String @id
|
|
177
|
+
name String
|
|
178
|
+
imageUrl String?
|
|
179
|
+
Patient Patient[]
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
model Map {
|
|
183
|
+
id String @id
|
|
184
|
+
name String
|
|
185
|
+
imageUrl String?
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
model PatientSession {
|
|
189
|
+
id String @id
|
|
190
|
+
programId String
|
|
191
|
+
createdAt DateTime @db.Timestamp(6)
|
|
192
|
+
completedAt DateTime? @db.Timestamp(6)
|
|
193
|
+
deletedAt DateTime? @db.Timestamp(6)
|
|
194
|
+
program PatientProgram @relation(fields: [programId], references: [id])
|
|
195
|
+
sessionExercise SessionExercise[]
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
model SessionExercise {
|
|
199
|
+
id String @id
|
|
200
|
+
patientSessionId String
|
|
201
|
+
exerciseId String
|
|
202
|
+
sets Int
|
|
203
|
+
reps Int
|
|
204
|
+
restTime Int
|
|
205
|
+
holdTime Int
|
|
206
|
+
speed Float
|
|
207
|
+
patientSession PatientSession @relation(fields: [patientSessionId], references: [id])
|
|
208
|
+
exercise Exercise @relation(fields: [exerciseId], references: [id])
|
|
209
|
+
sessionData SessionData[]
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
model SessionData {
|
|
213
|
+
id String @id
|
|
214
|
+
sessionExerciseId String
|
|
215
|
+
value String
|
|
216
|
+
sessionExercise SessionExercise @relation(fields: [sessionExerciseId], references: [id])
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
model Subscription {
|
|
220
|
+
id String @id
|
|
221
|
+
plan String
|
|
222
|
+
referenceId String
|
|
223
|
+
stripeCustomerId String?
|
|
224
|
+
stripeSubscriptionId String?
|
|
225
|
+
status String
|
|
226
|
+
periodStart DateTime?
|
|
227
|
+
periodEnd DateTime?
|
|
228
|
+
cancelAtPeriodEnd Boolean?
|
|
229
|
+
seats Int?
|
|
230
|
+
trialStart DateTime?
|
|
231
|
+
trialEnd DateTime?
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
model WaitingList {
|
|
235
|
+
id String @id
|
|
236
|
+
email String
|
|
237
|
+
plan String?
|
|
238
|
+
}
|