@primocaredentgroup/prescriptions-component 0.1.4 → 0.1.6
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/README.md +16 -0
- package/dist/convex/lib/auth.d.ts +5 -0
- package/dist/convex/lib/auth.d.ts.map +1 -1
- package/dist/convex/lib/auth.js +36 -0
- package/dist/convex/lib/auth.js.map +1 -1
- package/dist/convex/mutations/digitalAssets.d.ts.map +1 -1
- package/dist/convex/mutations/digitalAssets.js +20 -61
- package/dist/convex/mutations/digitalAssets.js.map +1 -1
- package/dist/convex/mutations/operational.d.ts.map +1 -1
- package/dist/convex/mutations/operational.js +19 -54
- package/dist/convex/mutations/operational.js.map +1 -1
- package/dist/convex/mutations/phases.d.ts.map +1 -1
- package/dist/convex/mutations/phases.js +20 -52
- package/dist/convex/mutations/phases.js.map +1 -1
- package/dist/convex/mutations/prescriptions.d.ts.map +1 -1
- package/dist/convex/mutations/prescriptions.js +80 -229
- package/dist/convex/mutations/prescriptions.js.map +1 -1
- package/dist/convex/mutations/syncJobs.d.ts.map +1 -1
- package/dist/convex/mutations/syncJobs.js +6 -16
- package/dist/convex/mutations/syncJobs.js.map +1 -1
- package/dist/convex/prescriptions/fields.d.ts.map +1 -1
- package/dist/convex/prescriptions/fields.js +6 -7
- package/dist/convex/prescriptions/fields.js.map +1 -1
- package/dist/convex/queries/dynamicFields.d.ts.map +1 -1
- package/dist/convex/queries/dynamicFields.js +2 -3
- package/dist/convex/queries/dynamicFields.js.map +1 -1
- package/dist/convex/schema.d.ts +2 -2
- package/dist/convex/schema.d.ts.map +1 -1
- package/dist/convex/schema.js +2 -2
- package/dist/convex/schema.js.map +1 -1
- package/dist/convex/types.d.ts +1 -1
- package/dist/convex/types.d.ts.map +1 -1
- package/package.json +9 -9
package/README.md
CHANGED
|
@@ -28,6 +28,14 @@ Nel progetto host Convex, registra il componente puntando a:
|
|
|
28
28
|
|
|
29
29
|
Gli endpoint dev-only (seed/migrazioni) non sono esportati dal surface pubblico del pacchetto.
|
|
30
30
|
|
|
31
|
+
## Autorizzazione Embedded
|
|
32
|
+
|
|
33
|
+
In modalita` embedded, il componente richiede solo un'identita` valida (token) e non usa piu` la tabella interna `users` come gate RBAC business.
|
|
34
|
+
|
|
35
|
+
- RBAC e policy di accesso applicative sono demandate all'host (PrimoCore).
|
|
36
|
+
- Il componente continua a registrare audit events con actor derivato dall'identita` host.
|
|
37
|
+
- Se il token e` assente o invalido, ritorna `UNAUTHORIZED`.
|
|
38
|
+
|
|
31
39
|
## Uso React Widget con Auth0 (`getAccessToken`)
|
|
32
40
|
|
|
33
41
|
```tsx
|
|
@@ -82,3 +90,11 @@ npm publish --access public
|
|
|
82
90
|
```
|
|
83
91
|
|
|
84
92
|
`prepublishOnly` esegue automaticamente `npm run build` e blocca la publish in caso di errore.
|
|
93
|
+
|
|
94
|
+
## Test manuali embedded (checklist)
|
|
95
|
+
|
|
96
|
+
- Host autenticato (token valido) senza record nella tabella `users`: `createDraft` deve completare con successo.
|
|
97
|
+
- Token mancante/invalido: le mutation business devono fallire con `UNAUTHORIZED`.
|
|
98
|
+
- Invarianti dominio invariati:
|
|
99
|
+
- idempotenza `createFromCalendar` su `idempotencyKey` (seconda chiamata non crea duplicato),
|
|
100
|
+
- vincolo "una sola prescrizione attiva per `pdcItemId`" ancora attivo.
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import type { QueryCtx, MutationCtx } from "../_generated/server";
|
|
2
2
|
import type { Doc } from "../_generated/dataModel";
|
|
3
3
|
type Ctx = QueryCtx | MutationCtx;
|
|
4
|
+
export type IdentityPrincipal = {
|
|
5
|
+
subject: string;
|
|
6
|
+
email?: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function requireIdentityOrThrow(ctx: Ctx): Promise<IdentityPrincipal>;
|
|
4
9
|
export declare function requireIdentityUser(ctx: Ctx): Promise<Doc<"users">>;
|
|
5
10
|
export declare function assertPrescriptionAccess(user: Doc<"users">, prescription: Doc<"prescriptions">): void;
|
|
6
11
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../convex/lib/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../convex/lib/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAGnD,KAAK,GAAG,GAAG,QAAQ,GAAG,WAAW,CAAC;AAuBlC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAsBjF;AAGD,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAqBzE;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,eAAe,CAAC,GAAG,IAAI,CAOrG"}
|
package/dist/convex/lib/auth.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ConvexError } from "convex/values";
|
|
1
2
|
function extractIdentityEmail(identity) {
|
|
2
3
|
if (typeof identity.email === "string" && identity.email.length > 0)
|
|
3
4
|
return identity.email;
|
|
@@ -9,6 +10,41 @@ function extractIdentityEmail(identity) {
|
|
|
9
10
|
}
|
|
10
11
|
return undefined;
|
|
11
12
|
}
|
|
13
|
+
function extractIdentitySubject(identity) {
|
|
14
|
+
if (typeof identity.subject === "string" && identity.subject.length > 0)
|
|
15
|
+
return identity.subject;
|
|
16
|
+
if (typeof identity.tokenIdentifier === "string" && identity.tokenIdentifier.length > 0)
|
|
17
|
+
return identity.tokenIdentifier;
|
|
18
|
+
const claims = identity["claims"];
|
|
19
|
+
if (claims && typeof claims === "object") {
|
|
20
|
+
const sub = claims["sub"];
|
|
21
|
+
if (typeof sub === "string" && sub.length > 0)
|
|
22
|
+
return sub;
|
|
23
|
+
}
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
export async function requireIdentityOrThrow(ctx) {
|
|
27
|
+
const identity = await ctx.auth.getUserIdentity();
|
|
28
|
+
if (!identity) {
|
|
29
|
+
throw new ConvexError({
|
|
30
|
+
code: "UNAUTHORIZED",
|
|
31
|
+
message: "Accesso non autorizzato",
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
const rawIdentity = identity;
|
|
35
|
+
const subject = extractIdentitySubject(rawIdentity);
|
|
36
|
+
if (!subject) {
|
|
37
|
+
throw new ConvexError({
|
|
38
|
+
code: "UNAUTHORIZED",
|
|
39
|
+
message: "Accesso non autorizzato",
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
subject,
|
|
44
|
+
email: extractIdentityEmail(rawIdentity),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// DEPRECATED (embedded mode): prefer requireIdentityOrThrow in business mutations.
|
|
12
48
|
export async function requireIdentityUser(ctx) {
|
|
13
49
|
const identity = await ctx.auth.getUserIdentity();
|
|
14
50
|
if (!identity) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../convex/lib/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../convex/lib/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"digitalAssets.d.ts","sourceRoot":"","sources":["../../../convex/mutations/digitalAssets.ts"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;
|
|
1
|
+
{"version":3,"file":"digitalAssets.d.ts","sourceRoot":"","sources":["../../../convex/mutations/digitalAssets.ts"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;GA4B/B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;GAwE3B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;GA+DxB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;;;GAqD9B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;GAmD/B,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { mutation } from "../_generated/server";
|
|
2
|
-
import {
|
|
2
|
+
import { v } from "convex/values";
|
|
3
3
|
import { generateUploadUrl, createDigitalAsset, validateFile, deleteFile, STORAGE_CONFIG, } from "../lib/storage";
|
|
4
|
-
import {
|
|
4
|
+
import { requireIdentityOrThrow } from "../lib/auth";
|
|
5
5
|
// ============================================
|
|
6
6
|
// DIGITAL ASSETS MUTATIONS
|
|
7
7
|
// ============================================
|
|
@@ -16,21 +16,12 @@ export const generateStlUploadUrl = mutation({
|
|
|
16
16
|
prescriptionId: v.id("prescriptions"),
|
|
17
17
|
},
|
|
18
18
|
handler: async (ctx, args) => {
|
|
19
|
-
|
|
20
|
-
try {
|
|
21
|
-
user = await requireIdentityUser(ctx);
|
|
22
|
-
}
|
|
23
|
-
catch (error) {
|
|
24
|
-
if (error instanceof ConvexError)
|
|
25
|
-
throw error;
|
|
26
|
-
throw new ConvexError({ code: "UNAUTHORIZED", message: "Accesso non autorizzato" });
|
|
27
|
-
}
|
|
19
|
+
await requireIdentityOrThrow(ctx);
|
|
28
20
|
// 1. Verifica prescrizione
|
|
29
21
|
const prescription = await ctx.db.get(args.prescriptionId);
|
|
30
22
|
if (!prescription) {
|
|
31
23
|
throw new Error("Prescrizione non trovata");
|
|
32
24
|
}
|
|
33
|
-
assertPrescriptionAccess(user, prescription);
|
|
34
25
|
// 2. Verifica che sia in DRAFT
|
|
35
26
|
if (prescription.status !== "DRAFT") {
|
|
36
27
|
throw new Error("È possibile caricare file STL solo per prescrizioni in bozza");
|
|
@@ -60,21 +51,12 @@ export const confirmStlUpload = mutation({
|
|
|
60
51
|
},
|
|
61
52
|
handler: async (ctx, args) => {
|
|
62
53
|
const now = Date.now();
|
|
63
|
-
|
|
64
|
-
try {
|
|
65
|
-
user = await requireIdentityUser(ctx);
|
|
66
|
-
}
|
|
67
|
-
catch (error) {
|
|
68
|
-
if (error instanceof ConvexError)
|
|
69
|
-
throw error;
|
|
70
|
-
throw new ConvexError({ code: "UNAUTHORIZED", message: "Accesso non autorizzato" });
|
|
71
|
-
}
|
|
54
|
+
const identity = await requireIdentityOrThrow(ctx);
|
|
72
55
|
// 1. Verifica prescrizione
|
|
73
56
|
const prescription = await ctx.db.get(args.prescriptionId);
|
|
74
57
|
if (!prescription) {
|
|
75
58
|
throw new Error("Prescrizione non trovata");
|
|
76
59
|
}
|
|
77
|
-
assertPrescriptionAccess(user, prescription);
|
|
78
60
|
// 2. Verifica stato
|
|
79
61
|
if (prescription.status !== "DRAFT") {
|
|
80
62
|
throw new Error("È possibile caricare file STL solo per prescrizioni in bozza");
|
|
@@ -90,7 +72,7 @@ export const confirmStlUpload = mutation({
|
|
|
90
72
|
throw new Error(`Massimo ${STORAGE_CONFIG.maxFilesPerPrescription} file per prescrizione`);
|
|
91
73
|
}
|
|
92
74
|
// 6. Crea asset
|
|
93
|
-
const asset = createDigitalAsset(args.storageId, args.fileName, args.fileSize, args.mimeType,
|
|
75
|
+
const asset = createDigitalAsset(args.storageId, args.fileName, args.fileSize, args.mimeType, identity.subject, args.description);
|
|
94
76
|
// 7. Aggiorna prescrizione
|
|
95
77
|
await ctx.db.patch(args.prescriptionId, {
|
|
96
78
|
digitalAssets: [...currentAssets, asset],
|
|
@@ -103,13 +85,14 @@ export const confirmStlUpload = mutation({
|
|
|
103
85
|
auditEventId: 0, // Will be backfilled
|
|
104
86
|
prescriptionRef: args.prescriptionId,
|
|
105
87
|
at: now,
|
|
106
|
-
actorUserId:
|
|
107
|
-
actorRole:
|
|
88
|
+
actorUserId: identity.subject,
|
|
89
|
+
actorRole: "HOST",
|
|
108
90
|
type: "STL_UPLOADED",
|
|
109
91
|
payload: {
|
|
110
92
|
assetId: asset.assetId,
|
|
111
93
|
fileName: asset.fileName,
|
|
112
94
|
fileSize: asset.fileSize,
|
|
95
|
+
actorEmail: identity.email,
|
|
113
96
|
},
|
|
114
97
|
});
|
|
115
98
|
return { success: true, asset };
|
|
@@ -125,21 +108,12 @@ export const deleteStlFile = mutation({
|
|
|
125
108
|
},
|
|
126
109
|
handler: async (ctx, args) => {
|
|
127
110
|
const now = Date.now();
|
|
128
|
-
|
|
129
|
-
try {
|
|
130
|
-
user = await requireIdentityUser(ctx);
|
|
131
|
-
}
|
|
132
|
-
catch (error) {
|
|
133
|
-
if (error instanceof ConvexError)
|
|
134
|
-
throw error;
|
|
135
|
-
throw new ConvexError({ code: "UNAUTHORIZED", message: "Accesso non autorizzato" });
|
|
136
|
-
}
|
|
111
|
+
const identity = await requireIdentityOrThrow(ctx);
|
|
137
112
|
// 1. Verifica prescrizione
|
|
138
113
|
const prescription = await ctx.db.get(args.prescriptionId);
|
|
139
114
|
if (!prescription) {
|
|
140
115
|
throw new Error("Prescrizione non trovata");
|
|
141
116
|
}
|
|
142
|
-
assertPrescriptionAccess(user, prescription);
|
|
143
117
|
// 2. Verifica stato
|
|
144
118
|
if (prescription.status !== "DRAFT") {
|
|
145
119
|
throw new Error("È possibile eliminare file STL solo per prescrizioni in bozza");
|
|
@@ -168,12 +142,13 @@ export const deleteStlFile = mutation({
|
|
|
168
142
|
auditEventId: 0, // Will be backfilled
|
|
169
143
|
prescriptionRef: args.prescriptionId,
|
|
170
144
|
at: now,
|
|
171
|
-
actorUserId:
|
|
172
|
-
actorRole:
|
|
145
|
+
actorUserId: identity.subject,
|
|
146
|
+
actorRole: "HOST",
|
|
173
147
|
type: "STL_DELETED",
|
|
174
148
|
payload: {
|
|
175
149
|
assetId: args.assetId,
|
|
176
150
|
fileName: asset.fileName,
|
|
151
|
+
actorEmail: identity.email,
|
|
177
152
|
},
|
|
178
153
|
});
|
|
179
154
|
return { success: true };
|
|
@@ -190,21 +165,12 @@ export const setPrescriptionType = mutation({
|
|
|
190
165
|
},
|
|
191
166
|
handler: async (ctx, args) => {
|
|
192
167
|
const now = Date.now();
|
|
193
|
-
|
|
194
|
-
try {
|
|
195
|
-
user = await requireIdentityUser(ctx);
|
|
196
|
-
}
|
|
197
|
-
catch (error) {
|
|
198
|
-
if (error instanceof ConvexError)
|
|
199
|
-
throw error;
|
|
200
|
-
throw new ConvexError({ code: "UNAUTHORIZED", message: "Accesso non autorizzato" });
|
|
201
|
-
}
|
|
168
|
+
const identity = await requireIdentityOrThrow(ctx);
|
|
202
169
|
// 1. Verifica prescrizione
|
|
203
170
|
const prescription = await ctx.db.get(args.prescriptionId);
|
|
204
171
|
if (!prescription) {
|
|
205
172
|
throw new Error("Prescrizione non trovata");
|
|
206
173
|
}
|
|
207
|
-
assertPrescriptionAccess(user, prescription);
|
|
208
174
|
// 2. Verifica stato
|
|
209
175
|
if (prescription.status !== "DRAFT") {
|
|
210
176
|
throw new Error("È possibile cambiare il tipo solo per prescrizioni in bozza");
|
|
@@ -228,12 +194,13 @@ export const setPrescriptionType = mutation({
|
|
|
228
194
|
auditEventId: 0, // Will be backfilled
|
|
229
195
|
prescriptionRef: args.prescriptionId,
|
|
230
196
|
at: now,
|
|
231
|
-
actorUserId:
|
|
232
|
-
actorRole:
|
|
197
|
+
actorUserId: identity.subject,
|
|
198
|
+
actorRole: "HOST",
|
|
233
199
|
type: "PRESCRIPTION_TYPE_CHANGED",
|
|
234
200
|
payload: {
|
|
235
201
|
previousType: prescription.prescriptionType || "ANALOG",
|
|
236
202
|
newType: args.prescriptionType,
|
|
203
|
+
actorEmail: identity.email,
|
|
237
204
|
},
|
|
238
205
|
});
|
|
239
206
|
return { success: true };
|
|
@@ -250,21 +217,12 @@ export const updateStlDescription = mutation({
|
|
|
250
217
|
},
|
|
251
218
|
handler: async (ctx, args) => {
|
|
252
219
|
const now = Date.now();
|
|
253
|
-
|
|
254
|
-
try {
|
|
255
|
-
user = await requireIdentityUser(ctx);
|
|
256
|
-
}
|
|
257
|
-
catch (error) {
|
|
258
|
-
if (error instanceof ConvexError)
|
|
259
|
-
throw error;
|
|
260
|
-
throw new ConvexError({ code: "UNAUTHORIZED", message: "Accesso non autorizzato" });
|
|
261
|
-
}
|
|
220
|
+
const identity = await requireIdentityOrThrow(ctx);
|
|
262
221
|
// 1. Verifica prescrizione
|
|
263
222
|
const prescription = await ctx.db.get(args.prescriptionId);
|
|
264
223
|
if (!prescription) {
|
|
265
224
|
throw new Error("Prescrizione non trovata");
|
|
266
225
|
}
|
|
267
|
-
assertPrescriptionAccess(user, prescription);
|
|
268
226
|
// 2. Verifica stato
|
|
269
227
|
if (prescription.status !== "DRAFT") {
|
|
270
228
|
throw new Error("È possibile modificare solo prescrizioni in bozza");
|
|
@@ -284,11 +242,12 @@ export const updateStlDescription = mutation({
|
|
|
284
242
|
auditEventId: 0,
|
|
285
243
|
prescriptionRef: args.prescriptionId,
|
|
286
244
|
at: now,
|
|
287
|
-
actorUserId:
|
|
288
|
-
actorRole:
|
|
245
|
+
actorUserId: identity.subject,
|
|
246
|
+
actorRole: "HOST",
|
|
289
247
|
type: "STL_DESCRIPTION_UPDATED",
|
|
290
248
|
payload: {
|
|
291
249
|
assetId: args.assetId,
|
|
250
|
+
actorEmail: identity.email,
|
|
292
251
|
},
|
|
293
252
|
});
|
|
294
253
|
return { success: true };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"digitalAssets.js","sourceRoot":"","sources":["../../../convex/mutations/digitalAssets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"digitalAssets.js","sourceRoot":"","sources":["../../../convex/mutations/digitalAssets.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operational.d.ts","sourceRoot":"","sources":["../../../convex/mutations/operational.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;
|
|
1
|
+
{"version":3,"file":"operational.d.ts","sourceRoot":"","sources":["../../../convex/mutations/operational.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;GAgDtB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;GA6DxB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;GA2C3B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;GA2CtB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { mutation } from "../_generated/server";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { v } from "convex/values";
|
|
3
|
+
import { requireIdentityOrThrow } from "../lib/auth";
|
|
4
4
|
// ============================================
|
|
5
5
|
// OPERATIONAL DATA MUTATIONS
|
|
6
6
|
// ============================================
|
|
@@ -14,21 +14,12 @@ export const updateNotes = mutation({
|
|
|
14
14
|
},
|
|
15
15
|
handler: async (ctx, args) => {
|
|
16
16
|
const now = Date.now();
|
|
17
|
-
|
|
18
|
-
try {
|
|
19
|
-
user = await requireIdentityUser(ctx);
|
|
20
|
-
}
|
|
21
|
-
catch (error) {
|
|
22
|
-
if (error instanceof ConvexError)
|
|
23
|
-
throw error;
|
|
24
|
-
throw new ConvexError({ code: "UNAUTHORIZED", message: "Accesso non autorizzato" });
|
|
25
|
-
}
|
|
17
|
+
const identity = await requireIdentityOrThrow(ctx);
|
|
26
18
|
// 1. Verifica prescrizione/accesso
|
|
27
19
|
const prescription = await ctx.db.get(args.prescriptionId);
|
|
28
20
|
if (!prescription) {
|
|
29
21
|
throw new Error("Prescrizione non trovata");
|
|
30
22
|
}
|
|
31
|
-
assertPrescriptionAccess(user, prescription);
|
|
32
23
|
// 2. Carica o crea operational data
|
|
33
24
|
let opData = await ctx.db
|
|
34
25
|
.query("operationalData")
|
|
@@ -51,10 +42,10 @@ export const updateNotes = mutation({
|
|
|
51
42
|
auditEventId: 0, // Will be backfilled
|
|
52
43
|
prescriptionRef: args.prescriptionId,
|
|
53
44
|
at: now,
|
|
54
|
-
actorUserId:
|
|
55
|
-
actorRole:
|
|
45
|
+
actorUserId: identity.subject,
|
|
46
|
+
actorRole: "HOST",
|
|
56
47
|
type: "OPERATIONAL_NOTES_UPDATED",
|
|
57
|
-
payload: {},
|
|
48
|
+
payload: { actorEmail: identity.email },
|
|
58
49
|
});
|
|
59
50
|
return { success: true };
|
|
60
51
|
},
|
|
@@ -70,21 +61,12 @@ export const addAttachment = mutation({
|
|
|
70
61
|
},
|
|
71
62
|
handler: async (ctx, args) => {
|
|
72
63
|
const now = Date.now();
|
|
73
|
-
|
|
74
|
-
try {
|
|
75
|
-
user = await requireIdentityUser(ctx);
|
|
76
|
-
}
|
|
77
|
-
catch (error) {
|
|
78
|
-
if (error instanceof ConvexError)
|
|
79
|
-
throw error;
|
|
80
|
-
throw new ConvexError({ code: "UNAUTHORIZED", message: "Accesso non autorizzato" });
|
|
81
|
-
}
|
|
64
|
+
const identity = await requireIdentityOrThrow(ctx);
|
|
82
65
|
// 1. Verifica prescrizione/accesso
|
|
83
66
|
const prescription = await ctx.db.get(args.prescriptionId);
|
|
84
67
|
if (!prescription) {
|
|
85
68
|
throw new Error("Prescrizione non trovata");
|
|
86
69
|
}
|
|
87
|
-
assertPrescriptionAccess(user, prescription);
|
|
88
70
|
// 2. Carica o crea operational data
|
|
89
71
|
let opData = await ctx.db
|
|
90
72
|
.query("operationalData")
|
|
@@ -94,7 +76,7 @@ export const addAttachment = mutation({
|
|
|
94
76
|
fileId: args.fileId,
|
|
95
77
|
fileName: args.fileName,
|
|
96
78
|
uploadedAt: now,
|
|
97
|
-
uploadedBy:
|
|
79
|
+
uploadedBy: identity.subject,
|
|
98
80
|
};
|
|
99
81
|
if (opData) {
|
|
100
82
|
const allegati = opData.allegati ?? [];
|
|
@@ -114,12 +96,13 @@ export const addAttachment = mutation({
|
|
|
114
96
|
auditEventId: 0, // Will be backfilled
|
|
115
97
|
prescriptionRef: args.prescriptionId,
|
|
116
98
|
at: now,
|
|
117
|
-
actorUserId:
|
|
118
|
-
actorRole:
|
|
99
|
+
actorUserId: identity.subject,
|
|
100
|
+
actorRole: "HOST",
|
|
119
101
|
type: "ATTACHMENT_ADDED",
|
|
120
102
|
payload: {
|
|
121
103
|
fileId: args.fileId,
|
|
122
104
|
fileName: args.fileName,
|
|
105
|
+
actorEmail: identity.email,
|
|
123
106
|
},
|
|
124
107
|
});
|
|
125
108
|
return { success: true };
|
|
@@ -135,21 +118,12 @@ export const removeAttachment = mutation({
|
|
|
135
118
|
},
|
|
136
119
|
handler: async (ctx, args) => {
|
|
137
120
|
const now = Date.now();
|
|
138
|
-
|
|
139
|
-
try {
|
|
140
|
-
user = await requireIdentityUser(ctx);
|
|
141
|
-
}
|
|
142
|
-
catch (error) {
|
|
143
|
-
if (error instanceof ConvexError)
|
|
144
|
-
throw error;
|
|
145
|
-
throw new ConvexError({ code: "UNAUTHORIZED", message: "Accesso non autorizzato" });
|
|
146
|
-
}
|
|
121
|
+
const identity = await requireIdentityOrThrow(ctx);
|
|
147
122
|
// 1. Verifica prescrizione/accesso
|
|
148
123
|
const prescription = await ctx.db.get(args.prescriptionId);
|
|
149
124
|
if (!prescription) {
|
|
150
125
|
throw new Error("Prescrizione non trovata");
|
|
151
126
|
}
|
|
152
|
-
assertPrescriptionAccess(user, prescription);
|
|
153
127
|
// 2. Carica operational data
|
|
154
128
|
const opData = await ctx.db
|
|
155
129
|
.query("operationalData")
|
|
@@ -165,10 +139,10 @@ export const removeAttachment = mutation({
|
|
|
165
139
|
auditEventId: 0, // Will be backfilled
|
|
166
140
|
prescriptionRef: args.prescriptionId,
|
|
167
141
|
at: now,
|
|
168
|
-
actorUserId:
|
|
169
|
-
actorRole:
|
|
142
|
+
actorUserId: identity.subject,
|
|
143
|
+
actorRole: "HOST",
|
|
170
144
|
type: "ATTACHMENT_REMOVED",
|
|
171
|
-
payload: { fileId: args.fileId },
|
|
145
|
+
payload: { fileId: args.fileId, actorEmail: identity.email },
|
|
172
146
|
});
|
|
173
147
|
return { success: true };
|
|
174
148
|
},
|
|
@@ -183,20 +157,11 @@ export const saveUiState = mutation({
|
|
|
183
157
|
},
|
|
184
158
|
handler: async (ctx, args) => {
|
|
185
159
|
const now = Date.now();
|
|
186
|
-
|
|
187
|
-
try {
|
|
188
|
-
user = await requireIdentityUser(ctx);
|
|
189
|
-
}
|
|
190
|
-
catch (error) {
|
|
191
|
-
if (error instanceof ConvexError)
|
|
192
|
-
throw error;
|
|
193
|
-
throw new ConvexError({ code: "UNAUTHORIZED", message: "Accesso non autorizzato" });
|
|
194
|
-
}
|
|
160
|
+
const identity = await requireIdentityOrThrow(ctx);
|
|
195
161
|
const prescription = await ctx.db.get(args.prescriptionId);
|
|
196
162
|
if (!prescription) {
|
|
197
163
|
throw new Error("Prescrizione non trovata");
|
|
198
164
|
}
|
|
199
|
-
assertPrescriptionAccess(user, prescription);
|
|
200
165
|
let opData = await ctx.db
|
|
201
166
|
.query("operationalData")
|
|
202
167
|
.withIndex("by_prescriptionRef", (q) => q.eq("prescriptionRef", args.prescriptionId))
|
|
@@ -215,10 +180,10 @@ export const saveUiState = mutation({
|
|
|
215
180
|
auditEventId: 0,
|
|
216
181
|
prescriptionRef: args.prescriptionId,
|
|
217
182
|
at: now,
|
|
218
|
-
actorUserId:
|
|
219
|
-
actorRole:
|
|
183
|
+
actorUserId: identity.subject,
|
|
184
|
+
actorRole: "HOST",
|
|
220
185
|
type: "OPERATIONAL_UI_STATE_SAVED",
|
|
221
|
-
payload: {},
|
|
186
|
+
payload: { actorEmail: identity.email },
|
|
222
187
|
});
|
|
223
188
|
return { success: true };
|
|
224
189
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operational.js","sourceRoot":"","sources":["../../../convex/mutations/operational.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"operational.js","sourceRoot":"","sources":["../../../convex/mutations/operational.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phases.d.ts","sourceRoot":"","sources":["../../../convex/mutations/phases.ts"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;;;;
|
|
1
|
+
{"version":3,"file":"phases.d.ts","sourceRoot":"","sources":["../../../convex/mutations/phases.ts"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;;;;GAiFzB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;GAsF9B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;GAgFtB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;GAwEpB,CAAC"}
|