@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 ADDED
@@ -0,0 +1,2 @@
1
+ export * from '@prisma/client';
2
+ export * from './custom';
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,8 @@
1
+ -- CreateTable
2
+ CREATE TABLE "Map" (
3
+ "id" TEXT NOT NULL,
4
+ "name" TEXT NOT NULL,
5
+ "imageUrl" TEXT,
6
+
7
+ CONSTRAINT "Map_pkey" PRIMARY KEY ("id")
8
+ );
@@ -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,2 @@
1
+ -- AlterTable
2
+ ALTER TABLE "PatientSession" ALTER COLUMN "completedAt" DROP NOT NULL;
@@ -0,0 +1,2 @@
1
+ -- AlterTable
2
+ ALTER TABLE "SessionData" ALTER COLUMN "value" SET DATA TYPE TEXT;
@@ -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,9 @@
1
+ -- CreateTable
2
+ CREATE TABLE "WaitingList" (
3
+ "id" TEXT NOT NULL,
4
+ "fullName" TEXT NOT NULL,
5
+ "email" TEXT NOT NULL,
6
+ "specialty" TEXT NOT NULL,
7
+
8
+ CONSTRAINT "WaitingList_pkey" PRIMARY KEY ("id")
9
+ );
@@ -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,8 @@
1
+ -- CreateTable
2
+ CREATE TABLE "WaitingList" (
3
+ "id" TEXT NOT NULL,
4
+ "email" TEXT NOT NULL,
5
+ "plan" TEXT,
6
+
7
+ CONSTRAINT "WaitingList_pkey" PRIMARY KEY ("id")
8
+ );
@@ -0,0 +1,8 @@
1
+ -- AlterTable
2
+ ALTER TABLE "Session" ADD COLUMN "impersonatedBy" TEXT;
3
+
4
+ -- AlterTable
5
+ ALTER TABLE "User" ADD COLUMN "banExpires" TIMESTAMP(3),
6
+ ADD COLUMN "banReason" TEXT,
7
+ ADD COLUMN "banned" BOOLEAN,
8
+ ADD COLUMN "role" TEXT DEFAULT 'user';
@@ -0,0 +1,3 @@
1
+ # Please do not edit this file manually
2
+ # It should be added in your version-control system (e.g., Git)
3
+ provider = "postgresql"
@@ -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
+ }