@@ -9,40 +9,60 @@ import { objectId } from '@/validation-schemas';
9
9
import { EventSearchBody } from '@/validation-schemas/event' ;
10
10
import { organizationBodySchema } from '@/validation-schemas/organization' ;
11
11
12
+ const requestIdSchema = z . object ( {
13
+ requestId : z . string ( ) . length ( 24 ) ,
14
+ } ) ;
15
+
16
+ const licencePlateSchema = z . object ( {
17
+ licencePlate : z . string ( ) . min ( 6 ) ,
18
+ } ) ;
19
+
12
20
const validationSchemas = {
13
- [ EventType . CREATE_PRIVATE_CLOUD_PRODUCT ] : z . object ( {
14
- requestId : z . string ( ) . length ( 24 ) ,
15
- } ) ,
16
- [ EventType . UPDATE_PRIVATE_CLOUD_PRODUCT ] : z . object ( {
17
- requestId : z . string ( ) . length ( 24 ) ,
18
- } ) ,
19
- [ EventType . DELETE_PRIVATE_CLOUD_PRODUCT ] : z . object ( {
20
- requestId : z . string ( ) . length ( 24 ) ,
21
- } ) ,
22
- [ EventType . REVIEW_PRIVATE_CLOUD_REQUEST ] : z . object ( {
23
- requestId : z . string ( ) . length ( 24 ) ,
24
- } ) ,
25
- [ EventType . RESEND_PRIVATE_CLOUD_REQUEST ] : z . object ( {
26
- requestId : z . string ( ) . length ( 24 ) ,
27
- } ) ,
28
- [ EventType . REPROVISION_PRIVATE_CLOUD_PRODUCT ] : z . object ( {
29
- licencePlate : z . string ( ) . min ( 6 ) ,
21
+ [ EventType . CREATE_TEAM_API_TOKEN ] : z . object ( {
22
+ clientUid : z . string ( ) ,
30
23
} ) ,
31
- [ EventType . CREATE_PUBLIC_CLOUD_PRODUCT ] : z . object ( {
32
- requestId : z . string ( ) . length ( 24 ) ,
24
+ [ EventType . UPDATE_TEAM_API_TOKEN ] : z . object ( {
25
+ clientUid : z . string ( ) ,
26
+ users : z
27
+ . array (
28
+ z . object ( {
29
+ email : z . string ( ) . email ( ) ,
30
+ type : z . enum ( [ 'add' , 'remove' ] ) ,
31
+ } ) ,
32
+ )
33
+ . optional ( ) ,
34
+ roles : z . array ( z . string ( ) ) . optional ( ) ,
35
+ result : z
36
+ . array (
37
+ z . object ( {
38
+ success : z . boolean ( ) ,
39
+ email : z . email ( ) ,
40
+ error : z . string ( ) . optional ( ) ,
41
+ } ) ,
42
+ )
43
+ . optional ( ) ,
33
44
} ) ,
34
- [ EventType . UPDATE_PUBLIC_CLOUD_PRODUCT ] : z . object ( {
35
- requestId : z . string ( ) . length ( 24 ) ,
36
- } ) ,
37
- [ EventType . DELETE_PUBLIC_CLOUD_PRODUCT ] : z . object ( {
38
- requestId : z . string ( ) . length ( 24 ) ,
39
- } ) ,
40
- [ EventType . REVIEW_PUBLIC_CLOUD_REQUEST ] : z . object ( {
41
- requestId : z . string ( ) . length ( 24 ) ,
42
- } ) ,
43
- [ EventType . RESEND_PUBLIC_CLOUD_REQUEST ] : z . object ( {
44
- requestId : z . string ( ) . length ( 24 ) ,
45
+ [ EventType . DELETE_TEAM_API_TOKEN ] : z . object ( {
46
+ clientUid : z . string ( ) ,
45
47
} ) ,
48
+ [ EventType . CREATE_API_TOKEN ] : z . undefined ( ) ,
49
+ [ EventType . DELETE_API_TOKEN ] : z . undefined ( ) ,
50
+
51
+ [ EventType . CREATE_PRIVATE_CLOUD_PRODUCT ] : requestIdSchema ,
52
+ [ EventType . UPDATE_PRIVATE_CLOUD_PRODUCT ] : requestIdSchema ,
53
+ [ EventType . DELETE_PRIVATE_CLOUD_PRODUCT ] : requestIdSchema ,
54
+ [ EventType . REVIEW_PRIVATE_CLOUD_REQUEST ] : requestIdSchema ,
55
+ [ EventType . RESEND_PRIVATE_CLOUD_REQUEST ] : requestIdSchema ,
56
+ [ EventType . CANCEL_PRIVATE_CLOUD_REQUEST ] : requestIdSchema ,
57
+ [ EventType . REPROVISION_PRIVATE_CLOUD_PRODUCT ] : licencePlateSchema ,
58
+
59
+ [ EventType . CREATE_PUBLIC_CLOUD_PRODUCT ] : requestIdSchema ,
60
+ [ EventType . UPDATE_PUBLIC_CLOUD_PRODUCT ] : requestIdSchema ,
61
+ [ EventType . DELETE_PUBLIC_CLOUD_PRODUCT ] : requestIdSchema ,
62
+ [ EventType . REVIEW_PUBLIC_CLOUD_REQUEST ] : requestIdSchema ,
63
+ [ EventType . RESEND_PUBLIC_CLOUD_REQUEST ] : requestIdSchema ,
64
+ [ EventType . CANCEL_PUBLIC_CLOUD_REQUEST ] : requestIdSchema ,
65
+
46
66
[ EventType . CREATE_ORGANIZATION ] : z . object ( {
47
67
id : objectId ,
48
68
data : organizationBodySchema ,
@@ -54,10 +74,50 @@ const validationSchemas = {
54
74
} ) ,
55
75
[ EventType . DELETE_ORGANIZATION ] : z . object ( {
56
76
id : objectId ,
77
+ to : objectId ,
57
78
data : organizationBodySchema ,
58
79
} ) ,
80
+ [ EventType . LOGIN ] : z . undefined ( ) ,
81
+ [ EventType . LOGOUT ] : z . undefined ( ) ,
82
+ [ EventType . EXPORT_PRIVATE_CLOUD_PRODUCT ] : z . any ( ) ,
83
+ [ EventType . EXPORT_PUBLIC_CLOUD_PRODUCT ] : z . any ( ) ,
84
+ } ;
85
+
86
+ type EventDataMap = {
87
+ [ K in keyof typeof validationSchemas ] : z . infer < ( typeof validationSchemas ) [ K ] > ;
59
88
} ;
60
89
90
+ export async function createEvent < T extends keyof typeof validationSchemas > (
91
+ type : T ,
92
+ userId = '' ,
93
+ data ?: EventDataMap [ T ] ,
94
+ ) {
95
+ try {
96
+ const validationSchema = validationSchemas [ type ] ;
97
+
98
+ // Validate only if schema is not z.any()
99
+ if ( validationSchema && validationSchema !== z . any ( ) ) {
100
+ const parsed = validationSchema . safeParse ( data ) ;
101
+ if ( ! parsed . success ) {
102
+ throw new Error ( `Invalid data for event type ${ type } : ${ JSON . stringify ( parsed . error . format ( ) ) } ` ) ;
103
+ }
104
+ }
105
+
106
+ return await prisma . event . create ( {
107
+ data : {
108
+ type,
109
+ userId,
110
+ data : ( data ?? { } ) as Prisma . InputJsonValue ,
111
+ } ,
112
+ } ) ;
113
+ } catch ( error ) {
114
+ logger . error ( 'createEvent error:' , error ) ;
115
+ throw error ;
116
+ }
117
+ }
118
+
119
+ const defaultSortKey = 'createdAt' ;
120
+
61
121
type SearchEvent = Prisma . EventGetPayload < {
62
122
select : {
63
123
id : true ;
@@ -76,35 +136,6 @@ type SearchEvent = Prisma.EventGetPayload<{
76
136
} ;
77
137
} > ;
78
138
79
- const defaultSortKey = 'createdAt' ;
80
-
81
- const validationKeys = Object . keys ( validationSchemas ) ;
82
-
83
- export async function createEvent ( type : EventType , userId = '' , data = { } ) {
84
- try {
85
- if ( validationKeys . includes ( type ) ) {
86
- const validationSchame = validationSchemas [ type as keyof typeof validationSchemas ] ;
87
-
88
- const parsed = validationSchame . safeParse ( data ) ;
89
- if ( ! parsed . success ) {
90
- throw Error ( `invalid data for event type ${ type } : ${ JSON . stringify ( data ) } ` ) ;
91
- }
92
- }
93
-
94
- const event = await prisma . event . create ( {
95
- data : {
96
- type,
97
- userId,
98
- data,
99
- } ,
100
- } ) ;
101
-
102
- return event ;
103
- } catch ( error ) {
104
- logger . error ( 'createEvent:' , error ) ;
105
- }
106
- }
107
-
108
139
export async function searchEvents ( {
109
140
types = [ ] ,
110
141
dates = [ ] ,
0 commit comments