reset-infra 1.0.6 → 1.0.7
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/package.json +35 -35
- package/prisma/schema.prisma +232 -232
package/package.json
CHANGED
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "reset-infra",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "ReSet – Database infrastructure, Prisma migrations & Zod schema generation",
|
|
5
|
-
"main": "dist/index.js",
|
|
6
|
-
"types": "dist/index.d.ts",
|
|
7
|
-
"files": [
|
|
8
|
-
"dist",
|
|
9
|
-
"prisma/schema.prisma"
|
|
10
|
-
],
|
|
11
|
-
"scripts": {
|
|
12
|
-
"build": "tsc",
|
|
13
|
-
"db:up": "docker compose up -d",
|
|
14
|
-
"db:down": "docker compose down",
|
|
15
|
-
"db:migrate": "npx prisma migrate dev",
|
|
16
|
-
"db:generate": "npx prisma generate",
|
|
17
|
-
"prepublishOnly": "npm run build"
|
|
18
|
-
},
|
|
19
|
-
"keywords": [],
|
|
20
|
-
"author": "",
|
|
21
|
-
"license": "ISC",
|
|
22
|
-
"dependencies": {
|
|
23
|
-
"dotenv": "^17.3.1",
|
|
24
|
-
"mongoose": "^9.2.3"
|
|
25
|
-
},
|
|
26
|
-
"peerDependencies": {
|
|
27
|
-
"@prisma/client": "^7.4.0",
|
|
28
|
-
"zod": "^3.22.0 || ^4.0.0"
|
|
29
|
-
},
|
|
30
|
-
"devDependencies": {
|
|
31
|
-
"@types/node": "^25.3.0",
|
|
32
|
-
"prisma": "^7.4.1",
|
|
33
|
-
"typescript": "^5.9.3",
|
|
34
|
-
"zod-prisma-types": "^3.3.11"
|
|
35
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "reset-infra",
|
|
3
|
+
"version": "1.0.7",
|
|
4
|
+
"description": "ReSet – Database infrastructure, Prisma migrations & Zod schema generation",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist",
|
|
9
|
+
"prisma/schema.prisma"
|
|
10
|
+
],
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"db:up": "docker compose up -d",
|
|
14
|
+
"db:down": "docker compose down",
|
|
15
|
+
"db:migrate": "npx prisma migrate dev",
|
|
16
|
+
"db:generate": "npx prisma generate",
|
|
17
|
+
"prepublishOnly": "npm run build"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [],
|
|
20
|
+
"author": "",
|
|
21
|
+
"license": "ISC",
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"dotenv": "^17.3.1",
|
|
24
|
+
"mongoose": "^9.2.3"
|
|
25
|
+
},
|
|
26
|
+
"peerDependencies": {
|
|
27
|
+
"@prisma/client": "^7.4.0",
|
|
28
|
+
"zod": "^3.22.0 || ^4.0.0"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@types/node": "^25.3.0",
|
|
32
|
+
"prisma": "^7.4.1",
|
|
33
|
+
"typescript": "^5.9.3",
|
|
34
|
+
"zod-prisma-types": "^3.3.11"
|
|
35
|
+
}
|
|
36
36
|
}
|
package/prisma/schema.prisma
CHANGED
|
@@ -1,232 +1,232 @@
|
|
|
1
|
-
generator client {
|
|
2
|
-
provider = "prisma-client-js"
|
|
3
|
-
previewFeatures = ["multiSchema"]
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
generator zod {
|
|
7
|
-
provider = "zod-prisma-types"
|
|
8
|
-
output = "../src/schemas"
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
datasource db {
|
|
12
|
-
provider = "postgresql"
|
|
13
|
-
schemas = ["auth", "tracking", "emergency", "core"]
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
enum UserRole {
|
|
17
|
-
ADICTO
|
|
18
|
-
PADRINO
|
|
19
|
-
ADMIN
|
|
20
|
-
|
|
21
|
-
@@schema("auth")
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
enum SponsorshipStatus {
|
|
25
|
-
PENDING
|
|
26
|
-
ACTIVE
|
|
27
|
-
INACTIVE
|
|
28
|
-
|
|
29
|
-
@@schema("core")
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
// ==========================================
|
|
33
|
-
// 1. SCHEMA: AUTH
|
|
34
|
-
// ==========================================
|
|
35
|
-
model User {
|
|
36
|
-
id String @id @default(uuid()) @db.Uuid
|
|
37
|
-
name String @db.VarChar(100)
|
|
38
|
-
email String @unique @db.VarChar(150)
|
|
39
|
-
password_hash String @db.Text
|
|
40
|
-
role UserRole @default(ADICTO)
|
|
41
|
-
created_at DateTime @default(now())
|
|
42
|
-
updated_at DateTime @default(now()) @updatedAt
|
|
43
|
-
sponsor_code String? @unique @db.VarChar(10)
|
|
44
|
-
|
|
45
|
-
addictions UserAddiction[]
|
|
46
|
-
daily_logs DailyLog[]
|
|
47
|
-
sponsorships_as_sponsor Sponsorship[] @relation("SponsorRelation")
|
|
48
|
-
sponsorships_as_addict Sponsorship[] @relation("AddictRelation")
|
|
49
|
-
contacts SupportContact[]
|
|
50
|
-
alerts EmergencyAlert[]
|
|
51
|
-
streak Streak[]
|
|
52
|
-
absences LogAbsence[]
|
|
53
|
-
|
|
54
|
-
@@map("users")
|
|
55
|
-
@@schema("auth")
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// ==========================================
|
|
59
|
-
// 2. SCHEMA: CORE
|
|
60
|
-
// ==========================================
|
|
61
|
-
model CravingLevel {
|
|
62
|
-
id String @id @default(uuid()) @db.Uuid
|
|
63
|
-
level Int @unique // El valor 1-10
|
|
64
|
-
label String @default("") @db.VarChar(50)
|
|
65
|
-
description String @default("") @db.Text
|
|
66
|
-
recommendation String @default("") @db.Text
|
|
67
|
-
daily_logs DailyLog[]
|
|
68
|
-
|
|
69
|
-
@@map("craving_levels")
|
|
70
|
-
@@schema("core")
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
model EmotionalState {
|
|
74
|
-
id String @id @default(uuid()) @db.Uuid
|
|
75
|
-
level Int @unique // El valor 1-10
|
|
76
|
-
label String @default("") @db.VarChar(50)
|
|
77
|
-
description String @default("") @db.Text
|
|
78
|
-
category String @default("") @db.VarChar(50)
|
|
79
|
-
daily_logs DailyLog[]
|
|
80
|
-
|
|
81
|
-
@@map("emotional_states")
|
|
82
|
-
@@schema("core")
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
model UserAddiction {
|
|
86
|
-
id String @id @default(uuid()) @db.Uuid
|
|
87
|
-
user_id String @unique @db.Uuid
|
|
88
|
-
custom_name String @db.VarChar(100)
|
|
89
|
-
classification String @default("") @db.VarChar(50)
|
|
90
|
-
is_active Boolean @default(true)
|
|
91
|
-
registered_at DateTime @default(now())
|
|
92
|
-
created_at DateTime @default(now())
|
|
93
|
-
|
|
94
|
-
user User @relation(fields: [user_id], references: [id], onDelete: Cascade)
|
|
95
|
-
streak Streak[]
|
|
96
|
-
alerts EmergencyAlert[]
|
|
97
|
-
|
|
98
|
-
@@map("user_addictions")
|
|
99
|
-
@@schema("core")
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
model Sponsorship {
|
|
103
|
-
id String @id @default(uuid()) @db.Uuid
|
|
104
|
-
sponsor_id String @unique @default("00000000-0000-0000-0000-000000000000") @db.Uuid
|
|
105
|
-
addict_id String @unique @default("00000000-0000-0000-0000-000000000000") @db.Uuid
|
|
106
|
-
started_at DateTime @default(now())
|
|
107
|
-
ended_at DateTime @default("9999-12-31T23:59:59Z")
|
|
108
|
-
status SponsorshipStatus @default(PENDING)
|
|
109
|
-
termination_reason String @default("") @db.Text
|
|
110
|
-
|
|
111
|
-
created_at DateTime @default(now())
|
|
112
|
-
|
|
113
|
-
sponsor User @relation("SponsorRelation", fields: [sponsor_id], references: [id])
|
|
114
|
-
addict User @relation("AddictRelation", fields: [addict_id], references: [id])
|
|
115
|
-
|
|
116
|
-
@@map("sponsorships")
|
|
117
|
-
@@schema("core")
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
// ==========================================
|
|
121
|
-
// 3. SCHEMA: TRACKING
|
|
122
|
-
// ==========================================
|
|
123
|
-
model DailyLog {
|
|
124
|
-
id String @id @default(uuid()) @db.Uuid
|
|
125
|
-
user_id String @db.Uuid
|
|
126
|
-
log_date DateTime @db.Date
|
|
127
|
-
consumed Boolean @default(false)
|
|
128
|
-
craving_level_id String @
|
|
129
|
-
emotional_state_id String @
|
|
130
|
-
triggers String @default("") @db.Text
|
|
131
|
-
notes String @default("") @db.Text
|
|
132
|
-
created_at DateTime @default(now())
|
|
133
|
-
|
|
134
|
-
user User @relation(fields: [user_id], references: [id], onDelete: Cascade)
|
|
135
|
-
craving_level CravingLevel @relation(fields: [craving_level_id], references: [id])
|
|
136
|
-
emotional_state EmotionalState @relation(fields: [emotional_state_id], references: [id])
|
|
137
|
-
|
|
138
|
-
@@unique([user_id, log_date])
|
|
139
|
-
@@map("daily_logs")
|
|
140
|
-
@@schema("tracking")
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
model StreakEvent {
|
|
144
|
-
id String @id @default(uuid()) @db.Uuid
|
|
145
|
-
streak_id String @db.Uuid
|
|
146
|
-
emergency_alert_id String @default("00000000-0000-0000-0000-000000000000") @db.Uuid
|
|
147
|
-
event_type String @default("") @db.VarChar(20)
|
|
148
|
-
event_date DateTime
|
|
149
|
-
days_achieved Int @default(0)
|
|
150
|
-
avg_craving_period Decimal @default(0.0) @db.Decimal(4, 2)
|
|
151
|
-
avg_emotion_period Decimal @default(0.0) @db.Decimal(4, 2)
|
|
152
|
-
created_at DateTime @default(now())
|
|
153
|
-
|
|
154
|
-
streak Streak @relation(fields: [streak_id], references: [id], onDelete: Cascade)
|
|
155
|
-
absences LogAbsence[]
|
|
156
|
-
|
|
157
|
-
@@map("streak_events")
|
|
158
|
-
@@schema("tracking")
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
model LogAbsence {
|
|
162
|
-
id String @id @default(uuid()) @db.Uuid
|
|
163
|
-
user_id String @db.Uuid
|
|
164
|
-
streak_id String @db.Uuid
|
|
165
|
-
last_log_date DateTime @default("
|
|
166
|
-
detected_at DateTime @default(now())
|
|
167
|
-
absence_hours Int @default(0)
|
|
168
|
-
event_generated Boolean @default(false)
|
|
169
|
-
streak_event_id String @default("00000000-0000-0000-0000-000000000000") @db.Uuid
|
|
170
|
-
|
|
171
|
-
user User @relation(fields: [user_id], references: [id], onDelete: Cascade)
|
|
172
|
-
streak_event StreakEvent @relation(fields: [streak_event_id], references: [id])
|
|
173
|
-
|
|
174
|
-
@@map("log_absences")
|
|
175
|
-
@@schema("tracking")
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
// ==========================================
|
|
179
|
-
// 4. SCHEMA: EMERGENCY
|
|
180
|
-
// ==========================================
|
|
181
|
-
model SupportContact {
|
|
182
|
-
id String @id @default(uuid()) @db.Uuid
|
|
183
|
-
user_id String @db.Uuid
|
|
184
|
-
contact_name String @db.VarChar(100)
|
|
185
|
-
phone String @default("") @db.VarChar(20)
|
|
186
|
-
email String @default("") @db.VarChar(150)
|
|
187
|
-
relationship String @default("") @db.VarChar(50)
|
|
188
|
-
custom_relationship String @default("") @db.Text
|
|
189
|
-
is_active Boolean @default(true)
|
|
190
|
-
priority_order Int @default(0)
|
|
191
|
-
created_at DateTime @default(now())
|
|
192
|
-
updated_at DateTime @default(now()) @updatedAt
|
|
193
|
-
|
|
194
|
-
user User @relation(fields: [user_id], references: [id], onDelete: Cascade)
|
|
195
|
-
|
|
196
|
-
@@map("support_contacts")
|
|
197
|
-
@@schema("emergency")
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
model EmergencyAlert {
|
|
201
|
-
id String @id @default(uuid()) @db.Uuid
|
|
202
|
-
user_id String @db.Uuid
|
|
203
|
-
user_addiction_id String @db.Uuid
|
|
204
|
-
activated_at DateTime @default(now())
|
|
205
|
-
resulted_in_relapse Boolean @default(false)
|
|
206
|
-
resolution_notes String @default("") @db.Text
|
|
207
|
-
created_at DateTime @default(now())
|
|
208
|
-
|
|
209
|
-
user User @relation(fields: [user_id], references: [id], onDelete: Cascade)
|
|
210
|
-
addiction UserAddiction @relation(fields: [user_addiction_id], references: [id])
|
|
211
|
-
|
|
212
|
-
@@map("emergency_alerts")
|
|
213
|
-
@@schema("emergency")
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
model Streak {
|
|
217
|
-
id String @id @default(uuid()) @db.Uuid
|
|
218
|
-
user_id String @unique @db.Uuid
|
|
219
|
-
user_addiction_id String @unique @db.Uuid
|
|
220
|
-
status String @default("") @db.VarChar(20)
|
|
221
|
-
started_at DateTime
|
|
222
|
-
day_counter Int @default(0)
|
|
223
|
-
last_log_date DateTime @default("
|
|
224
|
-
updated_at DateTime @default(now()) @updatedAt
|
|
225
|
-
|
|
226
|
-
user User @relation(fields: [user_id], references: [id], onDelete: Cascade)
|
|
227
|
-
addiction UserAddiction @relation(fields: [user_addiction_id], references: [id], onDelete: Cascade)
|
|
228
|
-
events StreakEvent[]
|
|
229
|
-
|
|
230
|
-
@@map("streaks")
|
|
231
|
-
@@schema("core")
|
|
232
|
-
}
|
|
1
|
+
generator client {
|
|
2
|
+
provider = "prisma-client-js"
|
|
3
|
+
previewFeatures = ["multiSchema"]
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
generator zod {
|
|
7
|
+
provider = "zod-prisma-types"
|
|
8
|
+
output = "../src/schemas"
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
datasource db {
|
|
12
|
+
provider = "postgresql"
|
|
13
|
+
schemas = ["auth", "tracking", "emergency", "core"]
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
enum UserRole {
|
|
17
|
+
ADICTO
|
|
18
|
+
PADRINO
|
|
19
|
+
ADMIN
|
|
20
|
+
|
|
21
|
+
@@schema("auth")
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
enum SponsorshipStatus {
|
|
25
|
+
PENDING
|
|
26
|
+
ACTIVE
|
|
27
|
+
INACTIVE
|
|
28
|
+
|
|
29
|
+
@@schema("core")
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// ==========================================
|
|
33
|
+
// 1. SCHEMA: AUTH
|
|
34
|
+
// ==========================================
|
|
35
|
+
model User {
|
|
36
|
+
id String @id @default(uuid()) @db.Uuid
|
|
37
|
+
name String @db.VarChar(100)
|
|
38
|
+
email String @unique @db.VarChar(150)
|
|
39
|
+
password_hash String @db.Text
|
|
40
|
+
role UserRole @default(ADICTO)
|
|
41
|
+
created_at DateTime @default(now())
|
|
42
|
+
updated_at DateTime @default(now()) @updatedAt
|
|
43
|
+
sponsor_code String? @unique @db.VarChar(10)
|
|
44
|
+
|
|
45
|
+
addictions UserAddiction[]
|
|
46
|
+
daily_logs DailyLog[]
|
|
47
|
+
sponsorships_as_sponsor Sponsorship[] @relation("SponsorRelation")
|
|
48
|
+
sponsorships_as_addict Sponsorship[] @relation("AddictRelation")
|
|
49
|
+
contacts SupportContact[]
|
|
50
|
+
alerts EmergencyAlert[]
|
|
51
|
+
streak Streak[]
|
|
52
|
+
absences LogAbsence[]
|
|
53
|
+
|
|
54
|
+
@@map("users")
|
|
55
|
+
@@schema("auth")
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// ==========================================
|
|
59
|
+
// 2. SCHEMA: CORE
|
|
60
|
+
// ==========================================
|
|
61
|
+
model CravingLevel {
|
|
62
|
+
id String @id @default(uuid()) @db.Uuid
|
|
63
|
+
level Int @unique // El valor 1-10
|
|
64
|
+
label String @default("") @db.VarChar(50)
|
|
65
|
+
description String @default("") @db.Text
|
|
66
|
+
recommendation String @default("") @db.Text
|
|
67
|
+
daily_logs DailyLog[]
|
|
68
|
+
|
|
69
|
+
@@map("craving_levels")
|
|
70
|
+
@@schema("core")
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
model EmotionalState {
|
|
74
|
+
id String @id @default(uuid()) @db.Uuid
|
|
75
|
+
level Int @unique // El valor 1-10
|
|
76
|
+
label String @default("") @db.VarChar(50)
|
|
77
|
+
description String @default("") @db.Text
|
|
78
|
+
category String @default("") @db.VarChar(50)
|
|
79
|
+
daily_logs DailyLog[]
|
|
80
|
+
|
|
81
|
+
@@map("emotional_states")
|
|
82
|
+
@@schema("core")
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
model UserAddiction {
|
|
86
|
+
id String @id @default(uuid()) @db.Uuid
|
|
87
|
+
user_id String @unique @db.Uuid
|
|
88
|
+
custom_name String @db.VarChar(100)
|
|
89
|
+
classification String @default("") @db.VarChar(50)
|
|
90
|
+
is_active Boolean @default(true)
|
|
91
|
+
registered_at DateTime @default(now())
|
|
92
|
+
created_at DateTime @default(now())
|
|
93
|
+
|
|
94
|
+
user User @relation(fields: [user_id], references: [id], onDelete: Cascade)
|
|
95
|
+
streak Streak[]
|
|
96
|
+
alerts EmergencyAlert[]
|
|
97
|
+
|
|
98
|
+
@@map("user_addictions")
|
|
99
|
+
@@schema("core")
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
model Sponsorship {
|
|
103
|
+
id String @id @default(uuid()) @db.Uuid
|
|
104
|
+
sponsor_id String @unique @default("00000000-0000-0000-0000-000000000000") @db.Uuid
|
|
105
|
+
addict_id String @unique @default("00000000-0000-0000-0000-000000000000") @db.Uuid
|
|
106
|
+
started_at DateTime @default(now())
|
|
107
|
+
ended_at DateTime @default("9999-12-31T23:59:59Z")
|
|
108
|
+
status SponsorshipStatus @default(PENDING)
|
|
109
|
+
termination_reason String @default("") @db.Text
|
|
110
|
+
|
|
111
|
+
created_at DateTime @default(now())
|
|
112
|
+
|
|
113
|
+
sponsor User @relation("SponsorRelation", fields: [sponsor_id], references: [id])
|
|
114
|
+
addict User @relation("AddictRelation", fields: [addict_id], references: [id])
|
|
115
|
+
|
|
116
|
+
@@map("sponsorships")
|
|
117
|
+
@@schema("core")
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// ==========================================
|
|
121
|
+
// 3. SCHEMA: TRACKING
|
|
122
|
+
// ==========================================
|
|
123
|
+
model DailyLog {
|
|
124
|
+
id String @id @default(uuid()) @db.Uuid
|
|
125
|
+
user_id String @db.Uuid
|
|
126
|
+
log_date DateTime @db.Date
|
|
127
|
+
consumed Boolean @default(false)
|
|
128
|
+
craving_level_id String @db.Uuid
|
|
129
|
+
emotional_state_id String @db.Uuid
|
|
130
|
+
triggers String @default("") @db.Text
|
|
131
|
+
notes String @default("") @db.Text
|
|
132
|
+
created_at DateTime @default(now())
|
|
133
|
+
|
|
134
|
+
user User @relation(fields: [user_id], references: [id], onDelete: Cascade)
|
|
135
|
+
craving_level CravingLevel @relation(fields: [craving_level_id], references: [id])
|
|
136
|
+
emotional_state EmotionalState @relation(fields: [emotional_state_id], references: [id])
|
|
137
|
+
|
|
138
|
+
@@unique([user_id, log_date])
|
|
139
|
+
@@map("daily_logs")
|
|
140
|
+
@@schema("tracking")
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
model StreakEvent {
|
|
144
|
+
id String @id @default(uuid()) @db.Uuid
|
|
145
|
+
streak_id String @db.Uuid
|
|
146
|
+
emergency_alert_id String @default("00000000-0000-0000-0000-000000000000") @db.Uuid
|
|
147
|
+
event_type String @default("") @db.VarChar(20)
|
|
148
|
+
event_date DateTime
|
|
149
|
+
days_achieved Int @default(0)
|
|
150
|
+
avg_craving_period Decimal @default(0.0) @db.Decimal(4, 2)
|
|
151
|
+
avg_emotion_period Decimal @default(0.0) @db.Decimal(4, 2)
|
|
152
|
+
created_at DateTime @default(now())
|
|
153
|
+
|
|
154
|
+
streak Streak @relation(fields: [streak_id], references: [id], onDelete: Cascade)
|
|
155
|
+
absences LogAbsence[]
|
|
156
|
+
|
|
157
|
+
@@map("streak_events")
|
|
158
|
+
@@schema("tracking")
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
model LogAbsence {
|
|
162
|
+
id String @id @default(uuid()) @db.Uuid
|
|
163
|
+
user_id String @db.Uuid
|
|
164
|
+
streak_id String @db.Uuid
|
|
165
|
+
last_log_date DateTime @default("2026-02-08T00:00:00Z") @db.Date
|
|
166
|
+
detected_at DateTime @default(now())
|
|
167
|
+
absence_hours Int @default(0)
|
|
168
|
+
event_generated Boolean @default(false)
|
|
169
|
+
streak_event_id String @default("00000000-0000-0000-0000-000000000000") @db.Uuid
|
|
170
|
+
|
|
171
|
+
user User @relation(fields: [user_id], references: [id], onDelete: Cascade)
|
|
172
|
+
streak_event StreakEvent @relation(fields: [streak_event_id], references: [id])
|
|
173
|
+
|
|
174
|
+
@@map("log_absences")
|
|
175
|
+
@@schema("tracking")
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// ==========================================
|
|
179
|
+
// 4. SCHEMA: EMERGENCY
|
|
180
|
+
// ==========================================
|
|
181
|
+
model SupportContact {
|
|
182
|
+
id String @id @default(uuid()) @db.Uuid
|
|
183
|
+
user_id String @db.Uuid
|
|
184
|
+
contact_name String @db.VarChar(100)
|
|
185
|
+
phone String @default("") @db.VarChar(20)
|
|
186
|
+
email String @default("") @db.VarChar(150)
|
|
187
|
+
relationship String @default("") @db.VarChar(50)
|
|
188
|
+
custom_relationship String @default("") @db.Text
|
|
189
|
+
is_active Boolean @default(true)
|
|
190
|
+
priority_order Int @default(0)
|
|
191
|
+
created_at DateTime @default(now())
|
|
192
|
+
updated_at DateTime @default(now()) @updatedAt
|
|
193
|
+
|
|
194
|
+
user User @relation(fields: [user_id], references: [id], onDelete: Cascade)
|
|
195
|
+
|
|
196
|
+
@@map("support_contacts")
|
|
197
|
+
@@schema("emergency")
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
model EmergencyAlert {
|
|
201
|
+
id String @id @default(uuid()) @db.Uuid
|
|
202
|
+
user_id String @db.Uuid
|
|
203
|
+
user_addiction_id String @db.Uuid
|
|
204
|
+
activated_at DateTime @default(now())
|
|
205
|
+
resulted_in_relapse Boolean @default(false)
|
|
206
|
+
resolution_notes String @default("") @db.Text
|
|
207
|
+
created_at DateTime @default(now())
|
|
208
|
+
|
|
209
|
+
user User @relation(fields: [user_id], references: [id], onDelete: Cascade)
|
|
210
|
+
addiction UserAddiction @relation(fields: [user_addiction_id], references: [id])
|
|
211
|
+
|
|
212
|
+
@@map("emergency_alerts")
|
|
213
|
+
@@schema("emergency")
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
model Streak {
|
|
217
|
+
id String @id @default(uuid()) @db.Uuid
|
|
218
|
+
user_id String @unique @db.Uuid
|
|
219
|
+
user_addiction_id String @unique @db.Uuid
|
|
220
|
+
status String @default("") @db.VarChar(20)
|
|
221
|
+
started_at DateTime
|
|
222
|
+
day_counter Int @default(0)
|
|
223
|
+
last_log_date DateTime @default("2026-02-08T00:00:00Z") @db.Date
|
|
224
|
+
updated_at DateTime @default(now()) @updatedAt
|
|
225
|
+
|
|
226
|
+
user User @relation(fields: [user_id], references: [id], onDelete: Cascade)
|
|
227
|
+
addiction UserAddiction @relation(fields: [user_addiction_id], references: [id], onDelete: Cascade)
|
|
228
|
+
events StreakEvent[]
|
|
229
|
+
|
|
230
|
+
@@map("streaks")
|
|
231
|
+
@@schema("core")
|
|
232
|
+
}
|