@gymspace/shared 1.2.4 → 1.2.8
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/dist/index.d.mts +795 -0
- package/dist/index.d.ts +795 -0
- package/dist/index.js +281 -24
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +266 -25
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/src/constants/template-codes.constants.ts +131 -0
- package/src/constants.ts +31 -40
- package/src/enums.ts +2 -1
- package/src/events/index.ts +1 -0
- package/src/events/whatsapp.events.ts +31 -0
- package/src/index.ts +4 -1
- package/src/interfaces.ts +3 -6
- package/src/schemas/ai-template.schema.ts +23 -0
- package/src/schemas/index.ts +1 -0
- package/src/types/whatsapp-templates.types.ts +174 -0
- package/src/types.ts +147 -1
- package/src/utils/roleHelpers.ts +104 -0
- package/dist/.tsbuildinfo +0 -1
package/src/constants.ts
CHANGED
|
@@ -5,102 +5,109 @@ export const PERMISSIONS = {
|
|
|
5
5
|
ORGANIZATIONS_READ: 'ORGANIZATIONS_READ',
|
|
6
6
|
ORGANIZATIONS_UPDATE: 'ORGANIZATIONS_UPDATE',
|
|
7
7
|
ORGANIZATIONS_DELETE: 'ORGANIZATIONS_DELETE',
|
|
8
|
-
|
|
8
|
+
|
|
9
9
|
// Gyms
|
|
10
10
|
GYMS_CREATE: 'GYMS_CREATE',
|
|
11
11
|
GYMS_READ: 'GYMS_READ',
|
|
12
12
|
GYMS_UPDATE: 'GYMS_UPDATE',
|
|
13
13
|
GYMS_DELETE: 'GYMS_DELETE',
|
|
14
|
-
|
|
14
|
+
|
|
15
15
|
// Collaborators
|
|
16
16
|
COLLABORATORS_CREATE: 'COLLABORATORS_CREATE',
|
|
17
17
|
COLLABORATORS_READ: 'COLLABORATORS_READ',
|
|
18
18
|
COLLABORATORS_UPDATE: 'COLLABORATORS_UPDATE',
|
|
19
19
|
COLLABORATORS_DELETE: 'COLLABORATORS_DELETE',
|
|
20
|
-
|
|
20
|
+
|
|
21
21
|
// Clients
|
|
22
22
|
CLIENTS_CREATE: 'CLIENTS_CREATE',
|
|
23
23
|
CLIENTS_READ: 'CLIENTS_READ',
|
|
24
24
|
CLIENTS_UPDATE: 'CLIENTS_UPDATE',
|
|
25
25
|
CLIENTS_DELETE: 'CLIENTS_DELETE',
|
|
26
|
-
|
|
26
|
+
|
|
27
27
|
// Contracts
|
|
28
28
|
CONTRACTS_CREATE: 'CONTRACTS_CREATE',
|
|
29
29
|
CONTRACTS_READ: 'CONTRACTS_READ',
|
|
30
30
|
CONTRACTS_UPDATE: 'CONTRACTS_UPDATE',
|
|
31
31
|
CONTRACTS_APPROVE: 'CONTRACTS_APPROVE',
|
|
32
32
|
CONTRACTS_CANCEL: 'CONTRACTS_CANCEL',
|
|
33
|
-
|
|
33
|
+
|
|
34
34
|
// Evaluations
|
|
35
35
|
EVALUATIONS_CREATE: 'EVALUATIONS_CREATE',
|
|
36
36
|
EVALUATIONS_READ: 'EVALUATIONS_READ',
|
|
37
37
|
EVALUATIONS_UPDATE: 'EVALUATIONS_UPDATE',
|
|
38
38
|
EVALUATIONS_DELETE: 'EVALUATIONS_DELETE',
|
|
39
|
-
|
|
39
|
+
|
|
40
40
|
// Check-ins
|
|
41
41
|
CHECKINS_CREATE: 'CHECKINS_CREATE',
|
|
42
42
|
CHECKINS_READ: 'CHECKINS_READ',
|
|
43
|
-
|
|
43
|
+
|
|
44
44
|
// Leads
|
|
45
45
|
LEADS_CREATE: 'LEADS_CREATE',
|
|
46
46
|
LEADS_READ: 'LEADS_READ',
|
|
47
47
|
LEADS_UPDATE: 'LEADS_UPDATE',
|
|
48
48
|
LEADS_DELETE: 'LEADS_DELETE',
|
|
49
|
-
|
|
49
|
+
|
|
50
50
|
// Reports
|
|
51
51
|
REPORTS_VIEW: 'REPORTS_VIEW',
|
|
52
52
|
REPORTS_FINANCIAL: 'REPORTS_FINANCIAL',
|
|
53
|
-
|
|
53
|
+
|
|
54
54
|
// Settings
|
|
55
55
|
SETTINGS_UPDATE: 'SETTINGS_UPDATE',
|
|
56
|
-
|
|
56
|
+
|
|
57
57
|
// Assets
|
|
58
58
|
ASSETS_CREATE: 'ASSETS_CREATE',
|
|
59
59
|
ASSETS_READ: 'ASSETS_READ',
|
|
60
60
|
ASSETS_DELETE: 'ASSETS_DELETE',
|
|
61
|
-
|
|
61
|
+
|
|
62
62
|
// Files
|
|
63
63
|
FILES_CREATE: 'FILES_CREATE',
|
|
64
64
|
FILES_READ: 'FILES_READ',
|
|
65
65
|
FILES_DELETE: 'FILES_DELETE',
|
|
66
|
-
|
|
66
|
+
|
|
67
67
|
// Products
|
|
68
68
|
PRODUCTS_CREATE: 'PRODUCTS_CREATE',
|
|
69
69
|
PRODUCTS_READ: 'PRODUCTS_READ',
|
|
70
70
|
PRODUCTS_UPDATE: 'PRODUCTS_UPDATE',
|
|
71
71
|
PRODUCTS_DELETE: 'PRODUCTS_DELETE',
|
|
72
|
-
|
|
72
|
+
|
|
73
73
|
// Product Categories
|
|
74
74
|
PRODUCT_CATEGORIES_CREATE: 'PRODUCT_CATEGORIES_CREATE',
|
|
75
75
|
PRODUCT_CATEGORIES_READ: 'PRODUCT_CATEGORIES_READ',
|
|
76
76
|
PRODUCT_CATEGORIES_UPDATE: 'PRODUCT_CATEGORIES_UPDATE',
|
|
77
77
|
PRODUCT_CATEGORIES_DELETE: 'PRODUCT_CATEGORIES_DELETE',
|
|
78
|
-
|
|
78
|
+
|
|
79
79
|
// Sales
|
|
80
80
|
SALES_CREATE: 'SALES_CREATE',
|
|
81
81
|
SALES_READ: 'SALES_READ',
|
|
82
82
|
SALES_UPDATE: 'SALES_UPDATE',
|
|
83
83
|
SALES_DELETE: 'SALES_DELETE',
|
|
84
|
-
|
|
84
|
+
|
|
85
85
|
// Suppliers
|
|
86
86
|
SUPPLIERS_CREATE: 'SUPPLIERS_CREATE',
|
|
87
87
|
SUPPLIERS_READ: 'SUPPLIERS_READ',
|
|
88
88
|
SUPPLIERS_UPDATE: 'SUPPLIERS_UPDATE',
|
|
89
89
|
SUPPLIERS_DELETE: 'SUPPLIERS_DELETE',
|
|
90
|
-
|
|
90
|
+
|
|
91
91
|
// Payment Methods
|
|
92
92
|
PAYMENT_METHODS_CREATE: 'PAYMENT_METHODS_CREATE',
|
|
93
93
|
PAYMENT_METHODS_READ: 'PAYMENT_METHODS_READ',
|
|
94
94
|
PAYMENT_METHODS_UPDATE: 'PAYMENT_METHODS_UPDATE',
|
|
95
95
|
PAYMENT_METHODS_DELETE: 'PAYMENT_METHODS_DELETE',
|
|
96
|
-
|
|
97
|
-
//
|
|
96
|
+
|
|
97
|
+
// WhatsApp
|
|
98
|
+
WHATSAPP_READ: 'WHATSAPP_READ',
|
|
99
|
+
WHATSAPP_SEND: 'WHATSAPP_SEND',
|
|
100
|
+
WHATSAPP_MANAGE: 'WHATSAPP_MANAGE',
|
|
101
|
+
|
|
102
|
+
// Special permissions
|
|
98
103
|
SUPER_ADMIN: 'SUPER_ADMIN',
|
|
104
|
+
OWNER: 'OWNER',
|
|
105
|
+
All: 'ALL',
|
|
99
106
|
} as const;
|
|
100
107
|
|
|
101
108
|
// Role definitions
|
|
102
109
|
export const ROLE_PERMISSIONS = {
|
|
103
|
-
|
|
110
|
+
ADMIN: Object.values(PERMISSIONS),
|
|
104
111
|
MANAGER: [
|
|
105
112
|
PERMISSIONS.GYMS_READ,
|
|
106
113
|
PERMISSIONS.COLLABORATORS_READ,
|
|
@@ -141,26 +148,6 @@ export const ROLE_PERMISSIONS = {
|
|
|
141
148
|
PERMISSIONS.PAYMENT_METHODS_UPDATE,
|
|
142
149
|
PERMISSIONS.PAYMENT_METHODS_DELETE,
|
|
143
150
|
],
|
|
144
|
-
STAFF: [
|
|
145
|
-
PERMISSIONS.CLIENTS_READ,
|
|
146
|
-
PERMISSIONS.CHECKINS_CREATE,
|
|
147
|
-
PERMISSIONS.CHECKINS_READ,
|
|
148
|
-
PERMISSIONS.PRODUCTS_READ,
|
|
149
|
-
PERMISSIONS.PRODUCT_CATEGORIES_READ,
|
|
150
|
-
PERMISSIONS.SALES_CREATE,
|
|
151
|
-
PERMISSIONS.SALES_READ,
|
|
152
|
-
PERMISSIONS.PAYMENT_METHODS_READ,
|
|
153
|
-
],
|
|
154
|
-
ADVISOR: [
|
|
155
|
-
PERMISSIONS.CLIENTS_READ,
|
|
156
|
-
PERMISSIONS.EVALUATIONS_CREATE,
|
|
157
|
-
PERMISSIONS.EVALUATIONS_READ,
|
|
158
|
-
PERMISSIONS.EVALUATIONS_UPDATE,
|
|
159
|
-
PERMISSIONS.ASSETS_CREATE,
|
|
160
|
-
PERMISSIONS.ASSETS_READ,
|
|
161
|
-
PERMISSIONS.FILES_CREATE,
|
|
162
|
-
PERMISSIONS.FILES_READ,
|
|
163
|
-
],
|
|
164
151
|
} as const;
|
|
165
152
|
|
|
166
153
|
// Cache TTL values (in seconds)
|
|
@@ -170,6 +157,7 @@ export const CACHE_TTL = {
|
|
|
170
157
|
STATIC_DATA: 3600, // 60 minutes
|
|
171
158
|
REPORTS: 300, // 5 minutes
|
|
172
159
|
DASHBOARD: 180, // 3 minutes
|
|
160
|
+
WHATSAPP_MESSAGE_STATUS: 300, // 5 minutes
|
|
173
161
|
} as const;
|
|
174
162
|
|
|
175
163
|
// File size limits (in bytes)
|
|
@@ -197,4 +185,7 @@ export const DATE_FORMATS = {
|
|
|
197
185
|
export const HEADERS = {
|
|
198
186
|
GYM_ID: 'X-Gym-Id',
|
|
199
187
|
REQUEST_ID: 'X-Request-Id',
|
|
200
|
-
} as const;
|
|
188
|
+
} as const;
|
|
189
|
+
|
|
190
|
+
// Re-export template constants
|
|
191
|
+
export * from './constants/template-codes.constants';
|
package/src/enums.ts
CHANGED
|
@@ -20,6 +20,7 @@ export enum CollaboratorStatus {
|
|
|
20
20
|
export enum InvitationStatus {
|
|
21
21
|
PENDING = 'pending',
|
|
22
22
|
ACCEPTED = 'accepted',
|
|
23
|
+
CANCELLED = 'cancelled',
|
|
23
24
|
EXPIRED = 'expired',
|
|
24
25
|
}
|
|
25
26
|
|
|
@@ -110,4 +111,4 @@ export enum LeadStatus {
|
|
|
110
111
|
INTERESTED = 'INTERESTED',
|
|
111
112
|
CONVERTED = 'CONVERTED',
|
|
112
113
|
LOST = 'LOST',
|
|
113
|
-
}
|
|
114
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './whatsapp.events';
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Evento para enviar un mensaje de WhatsApp
|
|
3
|
+
*/
|
|
4
|
+
export interface WhatsAppMessageSendEventData {
|
|
5
|
+
// Identificadores
|
|
6
|
+
gymId: string;
|
|
7
|
+
instanceName: string; // Nombre de la instancia de Evolution API
|
|
8
|
+
|
|
9
|
+
// Destinatario
|
|
10
|
+
phoneNumber: string;
|
|
11
|
+
|
|
12
|
+
// Contenido
|
|
13
|
+
content: string;
|
|
14
|
+
|
|
15
|
+
// Metadata opcional
|
|
16
|
+
clientId?: string;
|
|
17
|
+
templateId?: string;
|
|
18
|
+
variables?: Record<string, any>;
|
|
19
|
+
|
|
20
|
+
// Usuario que generó el envío
|
|
21
|
+
userId?: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Nombres de eventos de WhatsApp
|
|
26
|
+
*/
|
|
27
|
+
export const WHATSAPP_EVENTS = {
|
|
28
|
+
MESSAGE_SEND: 'whatsapp/message.send',
|
|
29
|
+
MESSAGE_RECEIVED: 'whatsapp/message.received',
|
|
30
|
+
CONNECTION_UPDATE: 'whatsapp/connection.update',
|
|
31
|
+
} as const;
|
package/src/index.ts
CHANGED
package/src/interfaces.ts
CHANGED
|
@@ -94,11 +94,8 @@ export interface IRequestContext {
|
|
|
94
94
|
getOrganizationId(): UUID | undefined;
|
|
95
95
|
getUserId(): UUID | undefined;
|
|
96
96
|
getTimezone(): string;
|
|
97
|
+
// Convenience flags
|
|
98
|
+
readonly isOwner: boolean;
|
|
99
|
+
readonly isCollaborator: boolean;
|
|
97
100
|
}
|
|
98
101
|
|
|
99
|
-
// Type aliases for convenience
|
|
100
|
-
export type Organization = IOrganization;
|
|
101
|
-
export type User = IUser;
|
|
102
|
-
export type Gym = IGym;
|
|
103
|
-
export type Collaborator = ICollaborator;
|
|
104
|
-
export type Role = IRole;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
export const templateGenerationRequestSchema = z.object({
|
|
4
|
+
templateCode: z.string(),
|
|
5
|
+
templateMetadata: z.object({
|
|
6
|
+
title: z.string(),
|
|
7
|
+
description: z.string(),
|
|
8
|
+
variables: z.array(z.string()),
|
|
9
|
+
exampleValues: z.record(z.string()),
|
|
10
|
+
}),
|
|
11
|
+
userPrompt: z.string().optional(),
|
|
12
|
+
language: z.string().default('es'),
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
export const aiGeneratedTemplateSchema = z.object({
|
|
16
|
+
message: z.string().describe('Mensaje generado con variables en formato {{variable}}'),
|
|
17
|
+
tone: z.enum(['professional', 'friendly', 'casual', 'urgent']).describe('Tono del mensaje'),
|
|
18
|
+
usedVariables: z.array(z.string()).describe('Variables utilizadas en el mensaje'),
|
|
19
|
+
suggestions: z.array(z.string()).optional().describe('Sugerencias adicionales'),
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
export type TemplateGenerationRequest = z.infer<typeof templateGenerationRequestSchema>;
|
|
23
|
+
export type AIGeneratedTemplate = z.infer<typeof aiGeneratedTemplateSchema>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ai-template.schema';
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Template codes for WhatsApp messages
|
|
3
|
+
*/
|
|
4
|
+
export const TemplateCode = {
|
|
5
|
+
WELCOME: 'WELCOME',
|
|
6
|
+
MEMBERSHIP_PURCHASE: 'MEMBERSHIP_PURCHASE',
|
|
7
|
+
MEMBERSHIP_RENEWAL: 'MEMBERSHIP_RENEWAL',
|
|
8
|
+
MEMBERSHIP_EXPIRING: 'MEMBERSHIP_EXPIRING',
|
|
9
|
+
PAYMENT_REMINDER: 'PAYMENT_REMINDER',
|
|
10
|
+
BIRTHDAY: 'BIRTHDAY',
|
|
11
|
+
PAYMENT_RECEIPT: 'PAYMENT_RECEIPT',
|
|
12
|
+
} as const;
|
|
13
|
+
|
|
14
|
+
export type TemplateCodeValue = (typeof TemplateCode)[keyof typeof TemplateCode];
|
|
15
|
+
export type TemplateCode = TemplateCodeValue;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Template types
|
|
19
|
+
*/
|
|
20
|
+
export const TemplateType = {
|
|
21
|
+
STATIC: 'STATIC',
|
|
22
|
+
PROMPT: 'PROMPT',
|
|
23
|
+
} as const;
|
|
24
|
+
|
|
25
|
+
export type TemplateTypeValue = (typeof TemplateType)[keyof typeof TemplateType];
|
|
26
|
+
export type TemplateType = TemplateTypeValue;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Base interface for WhatsApp template data
|
|
30
|
+
*/
|
|
31
|
+
export interface WhatsAppTemplateData {
|
|
32
|
+
gymId: string;
|
|
33
|
+
clientId: string;
|
|
34
|
+
phoneNumber: string;
|
|
35
|
+
templateCode: TemplateCode;
|
|
36
|
+
variables: Record<string, any>;
|
|
37
|
+
metadata?: {
|
|
38
|
+
contractId?: string;
|
|
39
|
+
userId?: string;
|
|
40
|
+
source?: string;
|
|
41
|
+
instanceName?: string;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Welcome message template data
|
|
47
|
+
*/
|
|
48
|
+
export interface WelcomeTemplateData
|
|
49
|
+
extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {
|
|
50
|
+
templateCode: typeof TemplateCode.WELCOME;
|
|
51
|
+
variables: {
|
|
52
|
+
clientName: string;
|
|
53
|
+
gymName: string;
|
|
54
|
+
registrationDate: string;
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Membership purchase template data
|
|
60
|
+
*/
|
|
61
|
+
export interface MembershipPurchaseTemplateData
|
|
62
|
+
extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {
|
|
63
|
+
templateCode: typeof TemplateCode.MEMBERSHIP_PURCHASE;
|
|
64
|
+
variables: {
|
|
65
|
+
clientName: string;
|
|
66
|
+
planName: string;
|
|
67
|
+
startDate: string;
|
|
68
|
+
endDate: string;
|
|
69
|
+
amount: string;
|
|
70
|
+
paymentFrequency: string;
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Membership renewal template data
|
|
76
|
+
*/
|
|
77
|
+
export interface MembershipRenewalTemplateData
|
|
78
|
+
extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {
|
|
79
|
+
templateCode: typeof TemplateCode.MEMBERSHIP_RENEWAL;
|
|
80
|
+
variables: {
|
|
81
|
+
clientName: string;
|
|
82
|
+
planName: string;
|
|
83
|
+
newEndDate: string;
|
|
84
|
+
amount: string;
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Membership expiring template data
|
|
90
|
+
*/
|
|
91
|
+
export interface MembershipExpiringTemplateData
|
|
92
|
+
extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {
|
|
93
|
+
templateCode: typeof TemplateCode.MEMBERSHIP_EXPIRING;
|
|
94
|
+
variables: {
|
|
95
|
+
clientName: string;
|
|
96
|
+
planName: string;
|
|
97
|
+
expirationDate: string;
|
|
98
|
+
daysRemaining: string;
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Payment reminder template data
|
|
104
|
+
*/
|
|
105
|
+
export interface PaymentReminderTemplateData
|
|
106
|
+
extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {
|
|
107
|
+
templateCode: typeof TemplateCode.PAYMENT_REMINDER;
|
|
108
|
+
variables: {
|
|
109
|
+
clientName: string;
|
|
110
|
+
amount: string;
|
|
111
|
+
dueDate: string;
|
|
112
|
+
planName: string;
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Birthday template data
|
|
118
|
+
*/
|
|
119
|
+
export interface BirthdayTemplateData
|
|
120
|
+
extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {
|
|
121
|
+
templateCode: typeof TemplateCode.BIRTHDAY;
|
|
122
|
+
variables: {
|
|
123
|
+
clientName: string;
|
|
124
|
+
gymName: string;
|
|
125
|
+
age: string;
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Payment receipt template data
|
|
131
|
+
*/
|
|
132
|
+
export interface PaymentReceiptTemplateData
|
|
133
|
+
extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {
|
|
134
|
+
templateCode: typeof TemplateCode.PAYMENT_RECEIPT;
|
|
135
|
+
variables: {
|
|
136
|
+
gymName: string;
|
|
137
|
+
receiptNumber: string;
|
|
138
|
+
date: string;
|
|
139
|
+
clientName: string;
|
|
140
|
+
items: string;
|
|
141
|
+
amount: string;
|
|
142
|
+
paymentMethod: string;
|
|
143
|
+
};
|
|
144
|
+
metadata?: {
|
|
145
|
+
saleId?: string;
|
|
146
|
+
userId?: string;
|
|
147
|
+
source?: string;
|
|
148
|
+
instanceName?: string;
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Union type for all template data types
|
|
154
|
+
*/
|
|
155
|
+
export type WhatsAppTemplateEventData =
|
|
156
|
+
| WelcomeTemplateData
|
|
157
|
+
| MembershipPurchaseTemplateData
|
|
158
|
+
| MembershipRenewalTemplateData
|
|
159
|
+
| MembershipExpiringTemplateData
|
|
160
|
+
| PaymentReminderTemplateData
|
|
161
|
+
| BirthdayTemplateData
|
|
162
|
+
| PaymentReceiptTemplateData;
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Template metadata interface
|
|
166
|
+
*/
|
|
167
|
+
export interface TemplateMetadata {
|
|
168
|
+
code: TemplateCode;
|
|
169
|
+
title: string;
|
|
170
|
+
description: string;
|
|
171
|
+
icon: string;
|
|
172
|
+
variables: string[];
|
|
173
|
+
exampleValues: Record<string, string>;
|
|
174
|
+
}
|
package/src/types.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { UserType, CollaboratorStatus, InvitationStatus } from './enums';
|
|
2
|
+
|
|
1
3
|
export type UUID = string;
|
|
2
4
|
|
|
3
5
|
export type Currency = 'USD' | 'EUR' | 'PEN' | 'MXN' | 'COP' | 'ARS' | 'CLP';
|
|
@@ -13,6 +15,8 @@ export type EntityType =
|
|
|
13
15
|
| 'asset';
|
|
14
16
|
|
|
15
17
|
export type Permission =
|
|
18
|
+
| 'SUPER_ADMIN'
|
|
19
|
+
| 'OWNER'
|
|
16
20
|
| 'ORGANIZATIONS_CREATE'
|
|
17
21
|
| 'ORGANIZATIONS_READ'
|
|
18
22
|
| 'ORGANIZATIONS_UPDATE'
|
|
@@ -73,7 +77,9 @@ export type Permission =
|
|
|
73
77
|
| 'PAYMENT_METHODS_READ'
|
|
74
78
|
| 'PAYMENT_METHODS_UPDATE'
|
|
75
79
|
| 'PAYMENT_METHODS_DELETE'
|
|
76
|
-
| '
|
|
80
|
+
| 'WHATSAPP_READ'
|
|
81
|
+
| 'WHATSAPP_SEND'
|
|
82
|
+
| 'WHATSAPP_MANAGE';
|
|
77
83
|
|
|
78
84
|
export interface AuditFields {
|
|
79
85
|
createdByUserId: UUID;
|
|
@@ -103,3 +109,143 @@ export interface PaginatedResponse<T> {
|
|
|
103
109
|
data: T[];
|
|
104
110
|
meta: PaginationMeta;
|
|
105
111
|
}
|
|
112
|
+
|
|
113
|
+
export interface User {
|
|
114
|
+
id: UUID;
|
|
115
|
+
email: string;
|
|
116
|
+
name: string;
|
|
117
|
+
phone?: string;
|
|
118
|
+
birthDate?: Date;
|
|
119
|
+
userType: UserType;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export interface Role {
|
|
123
|
+
id: UUID;
|
|
124
|
+
name: string;
|
|
125
|
+
permissions: Permission[];
|
|
126
|
+
description?: string;
|
|
127
|
+
canManageEvaluations: boolean;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export interface Collaborator {
|
|
131
|
+
id: UUID;
|
|
132
|
+
userId: UUID;
|
|
133
|
+
gymId: UUID;
|
|
134
|
+
roleId: UUID;
|
|
135
|
+
status: CollaboratorStatus;
|
|
136
|
+
hiredDate?: Date;
|
|
137
|
+
profilePhotoId?: string;
|
|
138
|
+
coverPhotoId?: string;
|
|
139
|
+
description?: string;
|
|
140
|
+
specialties?: any;
|
|
141
|
+
user?: User;
|
|
142
|
+
role?: Role;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export interface Invitation {
|
|
146
|
+
id: UUID;
|
|
147
|
+
gymId: UUID;
|
|
148
|
+
email: string;
|
|
149
|
+
roleId: UUID;
|
|
150
|
+
token: string;
|
|
151
|
+
code: string;
|
|
152
|
+
status: InvitationStatus;
|
|
153
|
+
expiresAt: Date;
|
|
154
|
+
invitedByUserId: UUID;
|
|
155
|
+
acceptedByUserId?: UUID;
|
|
156
|
+
acceptedAt?: Date;
|
|
157
|
+
role?: Role;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export interface CreateInvitationDto {
|
|
161
|
+
gymId: UUID;
|
|
162
|
+
email: string;
|
|
163
|
+
roleId: UUID;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
export interface AcceptInvitationDto {
|
|
167
|
+
token?: string;
|
|
168
|
+
code?: string;
|
|
169
|
+
name: string;
|
|
170
|
+
phone: string;
|
|
171
|
+
password: string;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
export interface ValidateByCodeDto {
|
|
175
|
+
code: string;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
export interface UpdateCollaboratorDto {
|
|
179
|
+
hiredDate?: string;
|
|
180
|
+
profilePhotoId?: string;
|
|
181
|
+
coverPhotoId?: string;
|
|
182
|
+
description?: string;
|
|
183
|
+
specialties?: any;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
export interface UpdateCollaboratorStatusDto {
|
|
187
|
+
status: 'active' | 'inactive';
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
export interface UpdateCollaboratorRoleDto {
|
|
191
|
+
roleId: UUID;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
export interface ListCollaboratorsParams extends PaginationParams {
|
|
195
|
+
status?: CollaboratorStatus;
|
|
196
|
+
roleId?: UUID;
|
|
197
|
+
search?: string;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
export interface ActivityQueryParams {
|
|
201
|
+
startDate?: string;
|
|
202
|
+
endDate?: string;
|
|
203
|
+
limit?: number;
|
|
204
|
+
type?: string;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
export interface StatsQueryParams {
|
|
208
|
+
startDate?: string;
|
|
209
|
+
endDate?: string;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
export interface CollaboratorStats {
|
|
213
|
+
contracts: {
|
|
214
|
+
total: number;
|
|
215
|
+
totalAmount: number;
|
|
216
|
+
averageAmount: number;
|
|
217
|
+
};
|
|
218
|
+
checkIns: {
|
|
219
|
+
total: number;
|
|
220
|
+
};
|
|
221
|
+
sales: {
|
|
222
|
+
total: number;
|
|
223
|
+
totalAmount: number;
|
|
224
|
+
};
|
|
225
|
+
clients: {
|
|
226
|
+
created: number;
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
export interface ActivityItem {
|
|
231
|
+
type: string;
|
|
232
|
+
timestamp: Date;
|
|
233
|
+
description: string;
|
|
234
|
+
metadata: any;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// Re-export WhatsApp template types and constants
|
|
238
|
+
export {
|
|
239
|
+
TemplateCode,
|
|
240
|
+
TemplateType,
|
|
241
|
+
type WhatsAppTemplateData,
|
|
242
|
+
type WelcomeTemplateData,
|
|
243
|
+
type MembershipPurchaseTemplateData,
|
|
244
|
+
type MembershipRenewalTemplateData,
|
|
245
|
+
type MembershipExpiringTemplateData,
|
|
246
|
+
type PaymentReminderTemplateData,
|
|
247
|
+
type BirthdayTemplateData,
|
|
248
|
+
type PaymentReceiptTemplateData,
|
|
249
|
+
type WhatsAppTemplateEventData,
|
|
250
|
+
type TemplateMetadata,
|
|
251
|
+
} from './types/whatsapp-templates.types';
|