@c80/types 1.0.0
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 +47 -0
- package/package.json +18 -0
- package/src/index.d.ts +2 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.js +5 -0
- package/src/index.js.map +1 -0
- package/src/lib/core.types.d.ts +569 -0
- package/src/lib/core.types.d.ts.map +1 -0
- package/src/lib/core.types.js +171 -0
- package/src/lib/core.types.js.map +1 -0
package/README.md
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# @c80/types
|
|
2
|
+
|
|
3
|
+
Contrato de tipos compartido del ecosistema barman. Lib TS pura
|
|
4
|
+
(framework-agnostica: sin Angular, sin Nest, cero dependencias de runtime).
|
|
5
|
+
|
|
6
|
+
Es la **fuente unica de verdad** de los tipos que antes se duplicaban a mano en
|
|
7
|
+
el `core.types.ts` de cada repo:
|
|
8
|
+
|
|
9
|
+
- `zerath-back` — backend NestJS (dueno del contrato)
|
|
10
|
+
- `vulcan-arm` — controlador del brazo
|
|
11
|
+
- `kyron-front` — frontend de operacion
|
|
12
|
+
- `chillbox` — frontend de cliente
|
|
13
|
+
|
|
14
|
+
## Contenido
|
|
15
|
+
|
|
16
|
+
Solo `interface` + `enum`:
|
|
17
|
+
|
|
18
|
+
- Enums: `Permission`, `RoomEvent`, `MovementStatus`, `RechargeStatus`.
|
|
19
|
+
- Unions/aliases: `Side`, `SystemMode`, `MessageType`, `RoomId`, `MotorCommand`,
|
|
20
|
+
`DriverType`, `Timestamp`, `NullableTimestamp`, `QueryParams`.
|
|
21
|
+
- Dominio: `Box`, `Task`, `Movement`, `InterpolatedMovement`, `Driver`, `Drivers`,
|
|
22
|
+
`IngredientSlot`, `BoxIngredient`, `Product`, `Recipe`, `Part`, `User`, `Role`,
|
|
23
|
+
`Favorite`, `Purchase`, `Rating`, `Recharge`, `GlobalPoint`, `PriceConfiguration`,
|
|
24
|
+
`MotorConfiguration`, `IngredientSlotConfiguration`, `FK`.
|
|
25
|
+
- WebSocket: `ChatMessage`, `TaskStats`, `MovementStatusUpdateRequest`,
|
|
26
|
+
`MovementStatusUpdateResponse`.
|
|
27
|
+
- Genericos / paginacion: `ActionResponseDto`, `CreateProductResponseDto`,
|
|
28
|
+
`PublicUser`, `LoginResponse`, `PaginationParams`, `PaginatedResponse<T>`,
|
|
29
|
+
`CreateProductWithRecipeDto`, `CreatePartDto`.
|
|
30
|
+
|
|
31
|
+
## Que NO vive aca
|
|
32
|
+
|
|
33
|
+
Tipos propios de un solo repo (UI de un front, `Dispenser*` de vulcan, payloads
|
|
34
|
+
concretos de sensores, etc.) quedan locales en cada repo.
|
|
35
|
+
|
|
36
|
+
## Uso
|
|
37
|
+
|
|
38
|
+
```ts
|
|
39
|
+
import { Box, Movement, RoomEvent } from '@c80/types';
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Build / publish (desde la raiz del workspace)
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
npx nx build types --skip-nx-cache
|
|
46
|
+
pnpm publish dist/libs/types --access public --no-git-checks
|
|
47
|
+
```
|
package/package.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@c80/types",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Contrato de tipos compartido del ecosistema barman (enums + interfaces de dominio + DTOs de WebSocket). Fuente unica de verdad para zerath-back, vulcan-arm, kyron-front y chillbox.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"sideEffects": false,
|
|
8
|
+
"main": "./src/index.js",
|
|
9
|
+
"module": "./src/index.js",
|
|
10
|
+
"types": "./src/index.d.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./src/index.d.ts",
|
|
14
|
+
"import": "./src/index.js",
|
|
15
|
+
"default": "./src/index.js"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
package/src/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../libs/types/src/index.ts"],"names":[],"mappings":"AAGA,cAAc,kBAAkB,CAAC"}
|
package/src/index.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// @c80/types — barrel unico del contrato compartido del ecosistema barman.
|
|
2
|
+
// Reexporta TODO el contrato (enums + interfaces). Los enums son chicos y los
|
|
3
|
+
// tipos son tree-shakeable, asi que un solo entry point es lo simple y mantenible.
|
|
4
|
+
export * from './lib/core.types';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/types/src/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,8EAA8E;AAC9E,mFAAmF;AACnF,cAAc,kBAAkB,CAAC","sourcesContent":["// @c80/types — barrel unico del contrato compartido del ecosistema barman.\n// Reexporta TODO el contrato (enums + interfaces). Los enums son chicos y los\n// tipos son tree-shakeable, asi que un solo entry point es lo simple y mantenible.\nexport * from './lib/core.types';\n"]}
|
|
@@ -0,0 +1,569 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tipo para parametros de query en requests HTTP.
|
|
3
|
+
* Usado en servicios CRUD para filtros, paginacion, busqueda, etc.
|
|
4
|
+
*/
|
|
5
|
+
export type QueryParams = Record<string, string | number | boolean | undefined>;
|
|
6
|
+
/**
|
|
7
|
+
* Tipo generico para Foreign Keys en responses.
|
|
8
|
+
* Garantiza que las relaciones siempre incluyan id y name minimo.
|
|
9
|
+
* Para requests, se usan campos *Id (taskId, boxId, profileId, etc.)
|
|
10
|
+
*/
|
|
11
|
+
export interface FK {
|
|
12
|
+
id: string;
|
|
13
|
+
name: string;
|
|
14
|
+
}
|
|
15
|
+
export declare enum Permission {
|
|
16
|
+
USER_READ = "USER_READ",
|
|
17
|
+
USER_WRITE = "USER_WRITE",
|
|
18
|
+
USER_UPDATE = "USER_UPDATE",
|
|
19
|
+
USER_DELETE = "USER_DELETE",
|
|
20
|
+
USER_TOGGLE = "USER_TOGGLE",
|
|
21
|
+
USER_PASSWORD_UPDATE = "USER_PASSWORD_UPDATE",
|
|
22
|
+
ROLE_READ = "ROLE_READ",
|
|
23
|
+
ROLE_WRITE = "ROLE_WRITE",
|
|
24
|
+
ROLE_UPDATE = "ROLE_UPDATE",
|
|
25
|
+
ROLE_DELETE = "ROLE_DELETE",
|
|
26
|
+
ROLE_TOGGLE = "ROLE_TOGGLE",
|
|
27
|
+
BOX_READ = "BOX_READ",
|
|
28
|
+
BOX_WRITE = "BOX_WRITE",
|
|
29
|
+
BOX_UPDATE = "BOX_UPDATE",
|
|
30
|
+
BOX_DELETE = "BOX_DELETE",
|
|
31
|
+
BOX_TOGGLE = "BOX_TOGGLE",
|
|
32
|
+
BOX_REGENERATE_API_KEY = "BOX_REGENERATE_API_KEY",
|
|
33
|
+
PRICE_CONFIGURATION_READ = "PRICE_CONFIGURATION_READ",
|
|
34
|
+
PRICE_CONFIGURATION_WRITE = "PRICE_CONFIGURATION_WRITE",
|
|
35
|
+
PRICE_CONFIGURATION_UPDATE = "PRICE_CONFIGURATION_UPDATE",
|
|
36
|
+
PRICE_CONFIGURATION_DELETE = "PRICE_CONFIGURATION_DELETE",
|
|
37
|
+
PRICE_CONFIGURATION_TOGGLE = "PRICE_CONFIGURATION_TOGGLE",
|
|
38
|
+
MOTOR_CONFIGURATION_READ = "MOTOR_CONFIGURATION_READ",
|
|
39
|
+
MOTOR_CONFIGURATION_WRITE = "MOTOR_CONFIGURATION_WRITE",
|
|
40
|
+
MOTOR_CONFIGURATION_UPDATE = "MOTOR_CONFIGURATION_UPDATE",
|
|
41
|
+
MOTOR_CONFIGURATION_DELETE = "MOTOR_CONFIGURATION_DELETE",
|
|
42
|
+
MOTOR_CONFIGURATION_TOGGLE = "MOTOR_CONFIGURATION_TOGGLE",
|
|
43
|
+
INGREDIENT_SLOT_CONFIGURATION_READ = "INGREDIENT_SLOT_CONFIGURATION_READ",
|
|
44
|
+
INGREDIENT_SLOT_CONFIGURATION_WRITE = "INGREDIENT_SLOT_CONFIGURATION_WRITE",
|
|
45
|
+
INGREDIENT_SLOT_CONFIGURATION_UPDATE = "INGREDIENT_SLOT_CONFIGURATION_UPDATE",
|
|
46
|
+
INGREDIENT_SLOT_CONFIGURATION_DELETE = "INGREDIENT_SLOT_CONFIGURATION_DELETE",
|
|
47
|
+
INGREDIENT_SLOT_CONFIGURATION_TOGGLE = "INGREDIENT_SLOT_CONFIGURATION_TOGGLE",
|
|
48
|
+
TASK_READ = "TASK_READ",
|
|
49
|
+
TASK_WRITE = "TASK_WRITE",
|
|
50
|
+
TASK_UPDATE = "TASK_UPDATE",
|
|
51
|
+
TASK_DELETE = "TASK_DELETE",
|
|
52
|
+
TASK_TOGGLE = "TASK_TOGGLE",
|
|
53
|
+
TASK_EXECUTE = "TASK_EXECUTE",
|
|
54
|
+
TASK_RESET = "TASK_RESET",
|
|
55
|
+
TASK_CANCEL = "TASK_CANCEL",
|
|
56
|
+
TASK_CLEAR = "TASK_CLEAR",
|
|
57
|
+
MOVEMENT_READ = "MOVEMENT_READ",
|
|
58
|
+
MOVEMENT_WRITE = "MOVEMENT_WRITE",
|
|
59
|
+
MOVEMENT_UPDATE = "MOVEMENT_UPDATE",
|
|
60
|
+
MOVEMENT_DELETE = "MOVEMENT_DELETE",
|
|
61
|
+
MOVEMENT_TOGGLE = "MOVEMENT_TOGGLE",
|
|
62
|
+
DRIVER_READ = "DRIVER_READ",
|
|
63
|
+
DRIVER_WRITE = "DRIVER_WRITE",
|
|
64
|
+
DRIVER_UPDATE = "DRIVER_UPDATE",
|
|
65
|
+
DRIVER_DELETE = "DRIVER_DELETE",
|
|
66
|
+
PRODUCT_READ = "PRODUCT_READ",
|
|
67
|
+
PRODUCT_WRITE = "PRODUCT_WRITE",
|
|
68
|
+
PRODUCT_UPDATE = "PRODUCT_UPDATE",
|
|
69
|
+
PRODUCT_DELETE = "PRODUCT_DELETE",
|
|
70
|
+
PRODUCT_TOGGLE = "PRODUCT_TOGGLE",
|
|
71
|
+
FAVORITE_READ = "FAVORITE_READ",
|
|
72
|
+
FAVORITE_WRITE = "FAVORITE_WRITE",
|
|
73
|
+
FAVORITE_DELETE = "FAVORITE_DELETE",
|
|
74
|
+
RATING_WRITE = "RATING_WRITE",
|
|
75
|
+
RECIPE_READ = "RECIPE_READ",
|
|
76
|
+
RECIPE_WRITE = "RECIPE_WRITE",
|
|
77
|
+
RECIPE_UPDATE = "RECIPE_UPDATE",
|
|
78
|
+
RECIPE_DELETE = "RECIPE_DELETE",
|
|
79
|
+
PART_READ = "PART_READ",
|
|
80
|
+
PART_WRITE = "PART_WRITE",
|
|
81
|
+
PART_UPDATE = "PART_UPDATE",
|
|
82
|
+
PART_DELETE = "PART_DELETE",
|
|
83
|
+
BOX_INGREDIENT_READ = "BOX_INGREDIENT_READ",
|
|
84
|
+
BOX_INGREDIENT_WRITE = "BOX_INGREDIENT_WRITE",
|
|
85
|
+
BOX_INGREDIENT_UPDATE = "BOX_INGREDIENT_UPDATE",
|
|
86
|
+
BOX_INGREDIENT_DELETE = "BOX_INGREDIENT_DELETE",
|
|
87
|
+
BOX_INGREDIENT_TOGGLE = "BOX_INGREDIENT_TOGGLE",
|
|
88
|
+
INGREDIENT_SLOT_READ = "INGREDIENT_SLOT_READ",
|
|
89
|
+
INGREDIENT_SLOT_WRITE = "INGREDIENT_SLOT_WRITE",
|
|
90
|
+
INGREDIENT_SLOT_UPDATE = "INGREDIENT_SLOT_UPDATE",
|
|
91
|
+
INGREDIENT_SLOT_DELETE = "INGREDIENT_SLOT_DELETE",
|
|
92
|
+
GLOBAL_POINT_READ = "GLOBAL_POINT_READ",
|
|
93
|
+
GLOBAL_POINT_WRITE = "GLOBAL_POINT_WRITE",
|
|
94
|
+
GLOBAL_POINT_UPDATE = "GLOBAL_POINT_UPDATE",
|
|
95
|
+
GLOBAL_POINT_DELETE = "GLOBAL_POINT_DELETE",
|
|
96
|
+
RECHARGE_READ = "RECHARGE_READ",
|
|
97
|
+
RECHARGE_WRITE = "RECHARGE_WRITE",
|
|
98
|
+
RECHARGE_UPDATE = "RECHARGE_UPDATE",
|
|
99
|
+
RECHARGE_DELETE = "RECHARGE_DELETE",
|
|
100
|
+
RECHARGE_APPROVE = "RECHARGE_APPROVE",
|
|
101
|
+
RECHARGE_REJECT = "RECHARGE_REJECT",
|
|
102
|
+
PURCHASE_READ = "PURCHASE_READ",
|
|
103
|
+
PURCHASE_WRITE = "PURCHASE_WRITE",
|
|
104
|
+
PURCHASE_DELETE = "PURCHASE_DELETE"
|
|
105
|
+
}
|
|
106
|
+
export interface Role {
|
|
107
|
+
id: string;
|
|
108
|
+
name: string;
|
|
109
|
+
description?: string;
|
|
110
|
+
permissions: Permission[];
|
|
111
|
+
createdAt: Date | string;
|
|
112
|
+
updatedAt: Date | string;
|
|
113
|
+
}
|
|
114
|
+
export type MessageType = 'ORDER' | 'DATA';
|
|
115
|
+
export type Side = 'BACK' | 'FRONT' | 'BOX';
|
|
116
|
+
export type SystemMode = 'NOT_CONNECTED' | 'CONFIGURATION' | 'CURRENT' | 'POSITION';
|
|
117
|
+
export type RoomId = 'DEFAULT-ROOM';
|
|
118
|
+
export declare enum RoomEvent {
|
|
119
|
+
MAINTENANCE = "MAINTENANCE",// Evento para mantenimiento (reset, current mode, position modes, movement)
|
|
120
|
+
TASK_STATUS_UPDATE = "TASK_STATUS_UPDATE",// Actualizaciones de estado de tasks y sus movements
|
|
121
|
+
ON_TASK_UPDATE = "ON_TASK_UPDATE",// Evento para actualizaciones completas de task con sus movements
|
|
122
|
+
ON_BOX_CHANGE = "ON_BOX_CHANGE",// Evento para cambios en box
|
|
123
|
+
MOVEMENT_STATUS_UPDATE = "MOVEMENT_STATUS_UPDATE",// Evento para actualizar status de movement via WebSocket
|
|
124
|
+
SYSTEM_MODE = "SYSTEM_MODE",// Evento para comunicar cambios de modo del sistema
|
|
125
|
+
RECHARGE_PENDING = "RECHARGE_PENDING",
|
|
126
|
+
RECHARGE_APPROVED = "RECHARGE_APPROVED",
|
|
127
|
+
RECHARGE_REJECTED = "RECHARGE_REJECTED",
|
|
128
|
+
MOTOR_VOLTAGE = "MOTOR_VOLTAGE",
|
|
129
|
+
MOTOR_PWM = "MOTOR_PWM",
|
|
130
|
+
MOTOR_CURRENT = "MOTOR_CURRENT",
|
|
131
|
+
MOTOR_VELOCITY = "MOTOR_VELOCITY",
|
|
132
|
+
MOTOR_POSITION = "MOTOR_POSITION",// Evento para posiciones de los motores
|
|
133
|
+
MOTOR_ACTUATOR_POSITION = "MOTOR_ACTUATOR_POSITION",
|
|
134
|
+
MOTOR_MOS_TEMPERATURE = "MOTOR_MOS_TEMPERATURE",
|
|
135
|
+
MOTOR_TEMPERATURE = "MOTOR_TEMPERATURE",
|
|
136
|
+
MOTOR_MCU_TEMPERATURE = "MOTOR_MCU_TEMPERATURE",
|
|
137
|
+
MOTOR_WARNING_CODE = "MOTOR_WARNING_CODE",
|
|
138
|
+
MOTOR_ERROR_CODE = "MOTOR_ERROR_CODE",
|
|
139
|
+
LEVEL_SENSOR = "LEVEL_SENSOR",
|
|
140
|
+
USER_JOINED = "userJoined",
|
|
141
|
+
USER_LEFT = "userLeft"
|
|
142
|
+
}
|
|
143
|
+
export declare enum MovementStatus {
|
|
144
|
+
UNEXECUTED = "UNEXECUTED",
|
|
145
|
+
PENDING = "PENDING",
|
|
146
|
+
IN_PROGRESS = "IN_PROGRESS",
|
|
147
|
+
COMPLETED = "COMPLETED",
|
|
148
|
+
FAILED = "FAILED",
|
|
149
|
+
CANCELLED = "CANCELLED"
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Tipo para timestamps que pueden venir como string ISO o Date
|
|
153
|
+
*/
|
|
154
|
+
export type Timestamp = string | Date;
|
|
155
|
+
/**
|
|
156
|
+
* Tipo para timestamps opcionales que pueden ser null o undefined
|
|
157
|
+
*/
|
|
158
|
+
export type NullableTimestamp = string | Date | null | undefined;
|
|
159
|
+
export interface Drivers {
|
|
160
|
+
driver0?: number;
|
|
161
|
+
driver1?: number;
|
|
162
|
+
driver2?: number;
|
|
163
|
+
driver3?: number;
|
|
164
|
+
driver4?: number;
|
|
165
|
+
driver5?: number;
|
|
166
|
+
driver6?: number;
|
|
167
|
+
driver7?: number;
|
|
168
|
+
driver8?: number;
|
|
169
|
+
driver9?: number;
|
|
170
|
+
driver10?: number;
|
|
171
|
+
driver11?: number;
|
|
172
|
+
driver12?: number;
|
|
173
|
+
driver13?: number;
|
|
174
|
+
driver14?: number;
|
|
175
|
+
driver15?: number;
|
|
176
|
+
driver16?: number;
|
|
177
|
+
driver17?: number;
|
|
178
|
+
driver18?: number;
|
|
179
|
+
driver19?: number;
|
|
180
|
+
driver20?: number;
|
|
181
|
+
driver21?: number;
|
|
182
|
+
driver22?: number;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Interpolacion de movimiento.
|
|
186
|
+
* Contiene solo drivers opcionales y metadata minima (sin sleep, status, timestamps).
|
|
187
|
+
* @deprecated El backend ya no genera interpolaciones; la interpolacion se calcula
|
|
188
|
+
* localmente en el ARM. Campo conservado solo por compatibilidad de contrato.
|
|
189
|
+
*/
|
|
190
|
+
export interface InterpolatedMovement {
|
|
191
|
+
id: string;
|
|
192
|
+
name: string;
|
|
193
|
+
order: number;
|
|
194
|
+
driver0?: number;
|
|
195
|
+
driver1?: number;
|
|
196
|
+
driver2?: number;
|
|
197
|
+
driver3?: number;
|
|
198
|
+
driver4?: number;
|
|
199
|
+
driver5?: number;
|
|
200
|
+
driver6?: number;
|
|
201
|
+
driver7?: number;
|
|
202
|
+
driver8?: number;
|
|
203
|
+
driver9?: number;
|
|
204
|
+
driver10?: number;
|
|
205
|
+
driver11?: number;
|
|
206
|
+
driver12?: number;
|
|
207
|
+
driver13?: number;
|
|
208
|
+
driver14?: number;
|
|
209
|
+
driver15?: number;
|
|
210
|
+
driver16?: number;
|
|
211
|
+
driver17?: number;
|
|
212
|
+
driver18?: number;
|
|
213
|
+
driver19?: number;
|
|
214
|
+
driver20?: number;
|
|
215
|
+
driver21?: number;
|
|
216
|
+
driver22?: number;
|
|
217
|
+
}
|
|
218
|
+
export interface TaskStats {
|
|
219
|
+
id: string;
|
|
220
|
+
name: string;
|
|
221
|
+
description: string;
|
|
222
|
+
enabled: boolean;
|
|
223
|
+
createdAt: Date;
|
|
224
|
+
updatedAt: Date;
|
|
225
|
+
unexecutedCount: number;
|
|
226
|
+
pendingCount: number;
|
|
227
|
+
inProgressCount: number;
|
|
228
|
+
completedCount: number;
|
|
229
|
+
failedCount: number;
|
|
230
|
+
cancelledCount: number;
|
|
231
|
+
totalMovements: number;
|
|
232
|
+
progress: string;
|
|
233
|
+
errorMessages: string[];
|
|
234
|
+
inProgressAt?: Date;
|
|
235
|
+
completedAt?: Date;
|
|
236
|
+
failedAt?: Date;
|
|
237
|
+
cancelledAt?: Date;
|
|
238
|
+
}
|
|
239
|
+
export type MotorCommand = 'reset' | 'position' | 'current';
|
|
240
|
+
export interface ChatMessage {
|
|
241
|
+
side?: Side;
|
|
242
|
+
boxId?: string;
|
|
243
|
+
roomId?: string;
|
|
244
|
+
date?: Date;
|
|
245
|
+
type?: MessageType;
|
|
246
|
+
maintenance?: MotorCommand | 'execute-movement-id' | 'execute-movement' | 'get-system-mode' | 'calibrate-level-sensor';
|
|
247
|
+
movementId?: string;
|
|
248
|
+
movement?: Partial<Movement>;
|
|
249
|
+
sensorCanId?: number;
|
|
250
|
+
ingredientSlotId?: string;
|
|
251
|
+
taskId?: string;
|
|
252
|
+
taskStats?: TaskStats;
|
|
253
|
+
task?: Task;
|
|
254
|
+
onBoxChange?: Partial<Box>;
|
|
255
|
+
systemMode?: SystemMode;
|
|
256
|
+
motorVoltage?: Drivers;
|
|
257
|
+
motorPwm?: Drivers;
|
|
258
|
+
motorCurrent?: Drivers;
|
|
259
|
+
motorVelocity?: Drivers;
|
|
260
|
+
motorPosition?: Drivers;
|
|
261
|
+
motorActuatorPosition?: Drivers;
|
|
262
|
+
motorMosTemperature?: Drivers;
|
|
263
|
+
motorTemperature?: Drivers;
|
|
264
|
+
motorMcuTemperature?: Drivers;
|
|
265
|
+
motorWarningCode?: Drivers;
|
|
266
|
+
motorErrorCode?: Drivers;
|
|
267
|
+
levelSensor?: Record<string, unknown>;
|
|
268
|
+
rechargeData?: {
|
|
269
|
+
userId: string;
|
|
270
|
+
amountARS: number;
|
|
271
|
+
points: number;
|
|
272
|
+
status: string;
|
|
273
|
+
rechargeId: string;
|
|
274
|
+
newBalance: number;
|
|
275
|
+
};
|
|
276
|
+
error?: string;
|
|
277
|
+
message?: string;
|
|
278
|
+
event?: RoomEvent;
|
|
279
|
+
[key: string]: unknown;
|
|
280
|
+
}
|
|
281
|
+
export interface Box {
|
|
282
|
+
id: string;
|
|
283
|
+
name: string;
|
|
284
|
+
description: string;
|
|
285
|
+
type: string;
|
|
286
|
+
location: string;
|
|
287
|
+
enabled: boolean;
|
|
288
|
+
apiKeyPrefix?: string;
|
|
289
|
+
createdAt: Date;
|
|
290
|
+
updatedAt: Date;
|
|
291
|
+
drivers?: Driver[];
|
|
292
|
+
tasks?: Task[];
|
|
293
|
+
apiKey?: string;
|
|
294
|
+
priceConfiguration?: PriceConfiguration | FK;
|
|
295
|
+
motorConfiguration?: MotorConfiguration | FK;
|
|
296
|
+
ingredientSlotConfiguration?: IngredientSlotConfiguration | FK;
|
|
297
|
+
globalPoint?: GlobalPoint | FK;
|
|
298
|
+
}
|
|
299
|
+
export interface PriceConfiguration {
|
|
300
|
+
id: string;
|
|
301
|
+
currency: string;
|
|
302
|
+
pointValue: number;
|
|
303
|
+
minMoneyLimit: number;
|
|
304
|
+
maxMoneyLimit: number;
|
|
305
|
+
moneyStep: number;
|
|
306
|
+
costOverheadPerPart: number;
|
|
307
|
+
enabled: boolean;
|
|
308
|
+
box?: Box | FK;
|
|
309
|
+
createdAt: Date;
|
|
310
|
+
updatedAt: Date;
|
|
311
|
+
}
|
|
312
|
+
export interface GlobalPoint {
|
|
313
|
+
id: string;
|
|
314
|
+
description: string;
|
|
315
|
+
reposeIngredientSlot: Movement | null;
|
|
316
|
+
reposeIce: Movement | null;
|
|
317
|
+
reposeCup: Movement | null;
|
|
318
|
+
reposeDefault: Movement | null;
|
|
319
|
+
box: FK;
|
|
320
|
+
createdAt: Date;
|
|
321
|
+
updatedAt: Date;
|
|
322
|
+
}
|
|
323
|
+
export interface MotorConfiguration {
|
|
324
|
+
id: string;
|
|
325
|
+
motorCurrent: number;
|
|
326
|
+
motorVelocity: number;
|
|
327
|
+
positionTolerance: number;
|
|
328
|
+
enabled: boolean;
|
|
329
|
+
debug: boolean;
|
|
330
|
+
box?: Box | FK;
|
|
331
|
+
createdAt: Date;
|
|
332
|
+
updatedAt: Date;
|
|
333
|
+
}
|
|
334
|
+
export interface IngredientSlotConfiguration {
|
|
335
|
+
id: string;
|
|
336
|
+
maxGridX: number;
|
|
337
|
+
maxGridY: number;
|
|
338
|
+
unitMl: number;
|
|
339
|
+
totalCapacity: number;
|
|
340
|
+
box?: Box | FK;
|
|
341
|
+
createdAt: Date;
|
|
342
|
+
updatedAt: Date;
|
|
343
|
+
}
|
|
344
|
+
export interface Task {
|
|
345
|
+
id: string;
|
|
346
|
+
name: string;
|
|
347
|
+
description: string;
|
|
348
|
+
enabled: boolean;
|
|
349
|
+
errorMessage?: string;
|
|
350
|
+
box?: FK;
|
|
351
|
+
movements: Movement[];
|
|
352
|
+
createdAt: Timestamp;
|
|
353
|
+
updatedAt: Timestamp;
|
|
354
|
+
}
|
|
355
|
+
export interface Movement extends Drivers {
|
|
356
|
+
id: string;
|
|
357
|
+
name: string;
|
|
358
|
+
description: string;
|
|
359
|
+
sleep: number;
|
|
360
|
+
order: number;
|
|
361
|
+
enabled: boolean;
|
|
362
|
+
createdAt: Timestamp;
|
|
363
|
+
updatedAt: Timestamp;
|
|
364
|
+
status: MovementStatus;
|
|
365
|
+
errorMessage?: string;
|
|
366
|
+
inProgressAt?: Date;
|
|
367
|
+
completedAt?: Date;
|
|
368
|
+
failedAt?: Date;
|
|
369
|
+
cancelledAt?: Date;
|
|
370
|
+
task?: FK;
|
|
371
|
+
/**
|
|
372
|
+
* @deprecated El backend ya no genera interpolaciones de movimiento; la interpolacion
|
|
373
|
+
* la calcula localmente vulcan-arm a partir de los targets (driver0..driver22, order, sleep).
|
|
374
|
+
* Campo conservado solo por compatibilidad con firmware viejo; el backend no lo puebla.
|
|
375
|
+
*/
|
|
376
|
+
interpolatedMovements?: InterpolatedMovement[];
|
|
377
|
+
}
|
|
378
|
+
export type DriverType = 'MOTOR' | 'MAGNET' | 'GRIPPER';
|
|
379
|
+
export interface Driver {
|
|
380
|
+
id: string;
|
|
381
|
+
name: string;
|
|
382
|
+
description: string;
|
|
383
|
+
canId: number;
|
|
384
|
+
type?: DriverType;
|
|
385
|
+
totalTicks?: number;
|
|
386
|
+
totalMlls?: number;
|
|
387
|
+
firmware?: string;
|
|
388
|
+
firmwareDate?: string;
|
|
389
|
+
box?: FK;
|
|
390
|
+
createdAt: Date;
|
|
391
|
+
updatedAt: Date;
|
|
392
|
+
}
|
|
393
|
+
export interface BoxIngredient {
|
|
394
|
+
id: string;
|
|
395
|
+
name: string;
|
|
396
|
+
description: string | null;
|
|
397
|
+
bottlePrice: number;
|
|
398
|
+
bottleUnitMl: number;
|
|
399
|
+
enabled: boolean;
|
|
400
|
+
box: Box | FK | null;
|
|
401
|
+
createdAt: Date;
|
|
402
|
+
updatedAt: Date;
|
|
403
|
+
}
|
|
404
|
+
export interface Rating {
|
|
405
|
+
id: string;
|
|
406
|
+
rating: number;
|
|
407
|
+
createdAt: Timestamp;
|
|
408
|
+
updatedAt: Timestamp;
|
|
409
|
+
user?: FK;
|
|
410
|
+
product?: FK;
|
|
411
|
+
}
|
|
412
|
+
export interface Product {
|
|
413
|
+
id: string;
|
|
414
|
+
name: string;
|
|
415
|
+
description: string;
|
|
416
|
+
image?: string;
|
|
417
|
+
enabled: boolean;
|
|
418
|
+
cost: number;
|
|
419
|
+
points: string;
|
|
420
|
+
averageRating: number;
|
|
421
|
+
isFavorite?: boolean;
|
|
422
|
+
canRate?: boolean;
|
|
423
|
+
userRating?: number | null;
|
|
424
|
+
recipe?: FK | Recipe | null;
|
|
425
|
+
ratings?: Rating[];
|
|
426
|
+
box?: FK;
|
|
427
|
+
author?: User | null;
|
|
428
|
+
createdAt: Timestamp;
|
|
429
|
+
updatedAt: Timestamp;
|
|
430
|
+
}
|
|
431
|
+
export interface Recipe {
|
|
432
|
+
id: string;
|
|
433
|
+
hasIce: boolean;
|
|
434
|
+
product?: FK;
|
|
435
|
+
parts?: Part[];
|
|
436
|
+
createdAt: Timestamp;
|
|
437
|
+
updatedAt: Timestamp;
|
|
438
|
+
}
|
|
439
|
+
export interface Part {
|
|
440
|
+
id: string;
|
|
441
|
+
count: number;
|
|
442
|
+
boxIngredient: BoxIngredient | FK;
|
|
443
|
+
recipe?: FK;
|
|
444
|
+
createdAt: Timestamp;
|
|
445
|
+
updatedAt: Timestamp;
|
|
446
|
+
}
|
|
447
|
+
export interface IngredientSlot {
|
|
448
|
+
id: string;
|
|
449
|
+
x: number;
|
|
450
|
+
y: number;
|
|
451
|
+
currentMl: number;
|
|
452
|
+
sensorCanId?: number;
|
|
453
|
+
calibrationDistanceMm?: number | null;
|
|
454
|
+
currentDistanceMm?: number | null;
|
|
455
|
+
box: FK;
|
|
456
|
+
boxIngredient: BoxIngredient | FK;
|
|
457
|
+
reposePoint?: Movement | FK | null;
|
|
458
|
+
actionPoint?: Movement | FK | null;
|
|
459
|
+
createdAt: Timestamp;
|
|
460
|
+
updatedAt: Timestamp;
|
|
461
|
+
}
|
|
462
|
+
export interface User {
|
|
463
|
+
id: string;
|
|
464
|
+
name: string;
|
|
465
|
+
username: string | null;
|
|
466
|
+
email: string;
|
|
467
|
+
password?: string;
|
|
468
|
+
enabled: boolean;
|
|
469
|
+
googleId: string | null;
|
|
470
|
+
picture: string | null;
|
|
471
|
+
givenName: string | null;
|
|
472
|
+
familyName: string | null;
|
|
473
|
+
emailVerified: boolean;
|
|
474
|
+
points: number;
|
|
475
|
+
role?: Role | FK | null;
|
|
476
|
+
box?: Box | FK | null;
|
|
477
|
+
favorites?: Favorite[];
|
|
478
|
+
ratings?: Rating[];
|
|
479
|
+
purchases?: Purchase[];
|
|
480
|
+
recharges?: Recharge[];
|
|
481
|
+
createdAt: Timestamp;
|
|
482
|
+
updatedAt: Timestamp;
|
|
483
|
+
}
|
|
484
|
+
export interface Favorite {
|
|
485
|
+
id: string;
|
|
486
|
+
user: User | FK;
|
|
487
|
+
product: Product | FK;
|
|
488
|
+
createdAt: Timestamp;
|
|
489
|
+
}
|
|
490
|
+
export interface Purchase {
|
|
491
|
+
id: string;
|
|
492
|
+
user: User | FK;
|
|
493
|
+
product: Product | FK;
|
|
494
|
+
createdAt: Timestamp;
|
|
495
|
+
updatedAt: Timestamp;
|
|
496
|
+
}
|
|
497
|
+
export declare enum RechargeStatus {
|
|
498
|
+
PENDING = "PENDING",
|
|
499
|
+
APPROVED = "APPROVED",
|
|
500
|
+
REJECTED = "REJECTED"
|
|
501
|
+
}
|
|
502
|
+
export interface Recharge {
|
|
503
|
+
id: string;
|
|
504
|
+
amountARS: number;
|
|
505
|
+
pointsCalculated: number;
|
|
506
|
+
pointValueUsed: number;
|
|
507
|
+
mercadopagoId: string | null;
|
|
508
|
+
status: RechargeStatus;
|
|
509
|
+
metadata: Record<string, unknown> | null;
|
|
510
|
+
user: User | FK;
|
|
511
|
+
box: Box | FK;
|
|
512
|
+
createdAt: Timestamp;
|
|
513
|
+
updatedAt: Timestamp;
|
|
514
|
+
}
|
|
515
|
+
export interface MovementStatusUpdateRequest {
|
|
516
|
+
movementId: string;
|
|
517
|
+
status: MovementStatus;
|
|
518
|
+
}
|
|
519
|
+
export interface MovementStatusUpdateResponse {
|
|
520
|
+
success: boolean;
|
|
521
|
+
message: string;
|
|
522
|
+
movementId: string;
|
|
523
|
+
newStatus: MovementStatus;
|
|
524
|
+
}
|
|
525
|
+
export interface ActionResponseDto {
|
|
526
|
+
success: boolean;
|
|
527
|
+
message: string;
|
|
528
|
+
}
|
|
529
|
+
export interface CreateProductResponseDto extends ActionResponseDto {
|
|
530
|
+
data?: {
|
|
531
|
+
productId: string;
|
|
532
|
+
recipeId: string;
|
|
533
|
+
};
|
|
534
|
+
}
|
|
535
|
+
export interface PublicUser extends Record<string, unknown> {
|
|
536
|
+
id: string;
|
|
537
|
+
name: string;
|
|
538
|
+
email: string;
|
|
539
|
+
enabled: boolean;
|
|
540
|
+
role: Role | null;
|
|
541
|
+
createdAt: string;
|
|
542
|
+
updatedAt: string;
|
|
543
|
+
}
|
|
544
|
+
export interface LoginResponse extends ActionResponseDto {
|
|
545
|
+
access_token?: string;
|
|
546
|
+
user?: PublicUser;
|
|
547
|
+
}
|
|
548
|
+
export interface PaginationParams {
|
|
549
|
+
offset?: number;
|
|
550
|
+
limit?: number;
|
|
551
|
+
searchTerm?: string;
|
|
552
|
+
boxId?: string;
|
|
553
|
+
}
|
|
554
|
+
export interface PaginatedResponse<T> {
|
|
555
|
+
data: T[];
|
|
556
|
+
total: number;
|
|
557
|
+
}
|
|
558
|
+
export interface CreateProductWithRecipeDto {
|
|
559
|
+
name: string;
|
|
560
|
+
description?: string;
|
|
561
|
+
boxId: string;
|
|
562
|
+
hasIce: boolean;
|
|
563
|
+
parts: CreatePartDto[];
|
|
564
|
+
}
|
|
565
|
+
export interface CreatePartDto {
|
|
566
|
+
count: number;
|
|
567
|
+
boxIngredientId: string;
|
|
568
|
+
}
|
|
569
|
+
//# sourceMappingURL=core.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.types.d.ts","sourceRoot":"","sources":["../../../../../libs/types/src/lib/core.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// @c80/types — Contrato de tipos compartido del ecosistema barman
|
|
3
|
+
//
|
|
4
|
+
// FUENTE UNICA DE VERDAD del contrato compartido entre:
|
|
5
|
+
// - zerath-back (backend NestJS, dueno del contrato)
|
|
6
|
+
// - vulcan-arm (controlador del brazo)
|
|
7
|
+
// - kyron-front (frontend de operacion)
|
|
8
|
+
// - chillbox (frontend de cliente)
|
|
9
|
+
//
|
|
10
|
+
// Solo interfaces + enums. CERO dependencias de runtime (ni Angular, ni Nest).
|
|
11
|
+
// Los tipos PROPIOS de un solo repo (UI, dispenser, sensores, etc.) NO viven
|
|
12
|
+
// aca: quedan locales en cada repo.
|
|
13
|
+
// ============================================================================
|
|
14
|
+
export var Permission;
|
|
15
|
+
(function (Permission) {
|
|
16
|
+
// User permissions
|
|
17
|
+
Permission["USER_READ"] = "USER_READ";
|
|
18
|
+
Permission["USER_WRITE"] = "USER_WRITE";
|
|
19
|
+
Permission["USER_UPDATE"] = "USER_UPDATE";
|
|
20
|
+
Permission["USER_DELETE"] = "USER_DELETE";
|
|
21
|
+
Permission["USER_TOGGLE"] = "USER_TOGGLE";
|
|
22
|
+
Permission["USER_PASSWORD_UPDATE"] = "USER_PASSWORD_UPDATE";
|
|
23
|
+
// Role permissions
|
|
24
|
+
Permission["ROLE_READ"] = "ROLE_READ";
|
|
25
|
+
Permission["ROLE_WRITE"] = "ROLE_WRITE";
|
|
26
|
+
Permission["ROLE_UPDATE"] = "ROLE_UPDATE";
|
|
27
|
+
Permission["ROLE_DELETE"] = "ROLE_DELETE";
|
|
28
|
+
Permission["ROLE_TOGGLE"] = "ROLE_TOGGLE";
|
|
29
|
+
// Box permissions
|
|
30
|
+
Permission["BOX_READ"] = "BOX_READ";
|
|
31
|
+
Permission["BOX_WRITE"] = "BOX_WRITE";
|
|
32
|
+
Permission["BOX_UPDATE"] = "BOX_UPDATE";
|
|
33
|
+
Permission["BOX_DELETE"] = "BOX_DELETE";
|
|
34
|
+
Permission["BOX_TOGGLE"] = "BOX_TOGGLE";
|
|
35
|
+
Permission["BOX_REGENERATE_API_KEY"] = "BOX_REGENERATE_API_KEY";
|
|
36
|
+
// Price Configuration permissions
|
|
37
|
+
Permission["PRICE_CONFIGURATION_READ"] = "PRICE_CONFIGURATION_READ";
|
|
38
|
+
Permission["PRICE_CONFIGURATION_WRITE"] = "PRICE_CONFIGURATION_WRITE";
|
|
39
|
+
Permission["PRICE_CONFIGURATION_UPDATE"] = "PRICE_CONFIGURATION_UPDATE";
|
|
40
|
+
Permission["PRICE_CONFIGURATION_DELETE"] = "PRICE_CONFIGURATION_DELETE";
|
|
41
|
+
Permission["PRICE_CONFIGURATION_TOGGLE"] = "PRICE_CONFIGURATION_TOGGLE";
|
|
42
|
+
// Motor Configuration permissions
|
|
43
|
+
Permission["MOTOR_CONFIGURATION_READ"] = "MOTOR_CONFIGURATION_READ";
|
|
44
|
+
Permission["MOTOR_CONFIGURATION_WRITE"] = "MOTOR_CONFIGURATION_WRITE";
|
|
45
|
+
Permission["MOTOR_CONFIGURATION_UPDATE"] = "MOTOR_CONFIGURATION_UPDATE";
|
|
46
|
+
Permission["MOTOR_CONFIGURATION_DELETE"] = "MOTOR_CONFIGURATION_DELETE";
|
|
47
|
+
Permission["MOTOR_CONFIGURATION_TOGGLE"] = "MOTOR_CONFIGURATION_TOGGLE";
|
|
48
|
+
// Ingredient Slot Configuration permissions
|
|
49
|
+
Permission["INGREDIENT_SLOT_CONFIGURATION_READ"] = "INGREDIENT_SLOT_CONFIGURATION_READ";
|
|
50
|
+
Permission["INGREDIENT_SLOT_CONFIGURATION_WRITE"] = "INGREDIENT_SLOT_CONFIGURATION_WRITE";
|
|
51
|
+
Permission["INGREDIENT_SLOT_CONFIGURATION_UPDATE"] = "INGREDIENT_SLOT_CONFIGURATION_UPDATE";
|
|
52
|
+
Permission["INGREDIENT_SLOT_CONFIGURATION_DELETE"] = "INGREDIENT_SLOT_CONFIGURATION_DELETE";
|
|
53
|
+
Permission["INGREDIENT_SLOT_CONFIGURATION_TOGGLE"] = "INGREDIENT_SLOT_CONFIGURATION_TOGGLE";
|
|
54
|
+
// Task permissions
|
|
55
|
+
Permission["TASK_READ"] = "TASK_READ";
|
|
56
|
+
Permission["TASK_WRITE"] = "TASK_WRITE";
|
|
57
|
+
Permission["TASK_UPDATE"] = "TASK_UPDATE";
|
|
58
|
+
Permission["TASK_DELETE"] = "TASK_DELETE";
|
|
59
|
+
Permission["TASK_TOGGLE"] = "TASK_TOGGLE";
|
|
60
|
+
Permission["TASK_EXECUTE"] = "TASK_EXECUTE";
|
|
61
|
+
Permission["TASK_RESET"] = "TASK_RESET";
|
|
62
|
+
Permission["TASK_CANCEL"] = "TASK_CANCEL";
|
|
63
|
+
Permission["TASK_CLEAR"] = "TASK_CLEAR";
|
|
64
|
+
// Movement permissions
|
|
65
|
+
Permission["MOVEMENT_READ"] = "MOVEMENT_READ";
|
|
66
|
+
Permission["MOVEMENT_WRITE"] = "MOVEMENT_WRITE";
|
|
67
|
+
Permission["MOVEMENT_UPDATE"] = "MOVEMENT_UPDATE";
|
|
68
|
+
Permission["MOVEMENT_DELETE"] = "MOVEMENT_DELETE";
|
|
69
|
+
Permission["MOVEMENT_TOGGLE"] = "MOVEMENT_TOGGLE";
|
|
70
|
+
// Driver permissions
|
|
71
|
+
Permission["DRIVER_READ"] = "DRIVER_READ";
|
|
72
|
+
Permission["DRIVER_WRITE"] = "DRIVER_WRITE";
|
|
73
|
+
Permission["DRIVER_UPDATE"] = "DRIVER_UPDATE";
|
|
74
|
+
Permission["DRIVER_DELETE"] = "DRIVER_DELETE";
|
|
75
|
+
// Product permissions
|
|
76
|
+
Permission["PRODUCT_READ"] = "PRODUCT_READ";
|
|
77
|
+
Permission["PRODUCT_WRITE"] = "PRODUCT_WRITE";
|
|
78
|
+
Permission["PRODUCT_UPDATE"] = "PRODUCT_UPDATE";
|
|
79
|
+
Permission["PRODUCT_DELETE"] = "PRODUCT_DELETE";
|
|
80
|
+
Permission["PRODUCT_TOGGLE"] = "PRODUCT_TOGGLE";
|
|
81
|
+
// Favorite permissions
|
|
82
|
+
Permission["FAVORITE_READ"] = "FAVORITE_READ";
|
|
83
|
+
Permission["FAVORITE_WRITE"] = "FAVORITE_WRITE";
|
|
84
|
+
Permission["FAVORITE_DELETE"] = "FAVORITE_DELETE";
|
|
85
|
+
// Rating permissions
|
|
86
|
+
Permission["RATING_WRITE"] = "RATING_WRITE";
|
|
87
|
+
// Recipe permissions
|
|
88
|
+
Permission["RECIPE_READ"] = "RECIPE_READ";
|
|
89
|
+
Permission["RECIPE_WRITE"] = "RECIPE_WRITE";
|
|
90
|
+
Permission["RECIPE_UPDATE"] = "RECIPE_UPDATE";
|
|
91
|
+
Permission["RECIPE_DELETE"] = "RECIPE_DELETE";
|
|
92
|
+
// Part permissions
|
|
93
|
+
Permission["PART_READ"] = "PART_READ";
|
|
94
|
+
Permission["PART_WRITE"] = "PART_WRITE";
|
|
95
|
+
Permission["PART_UPDATE"] = "PART_UPDATE";
|
|
96
|
+
Permission["PART_DELETE"] = "PART_DELETE";
|
|
97
|
+
// BoxIngredient permissions
|
|
98
|
+
Permission["BOX_INGREDIENT_READ"] = "BOX_INGREDIENT_READ";
|
|
99
|
+
Permission["BOX_INGREDIENT_WRITE"] = "BOX_INGREDIENT_WRITE";
|
|
100
|
+
Permission["BOX_INGREDIENT_UPDATE"] = "BOX_INGREDIENT_UPDATE";
|
|
101
|
+
Permission["BOX_INGREDIENT_DELETE"] = "BOX_INGREDIENT_DELETE";
|
|
102
|
+
Permission["BOX_INGREDIENT_TOGGLE"] = "BOX_INGREDIENT_TOGGLE";
|
|
103
|
+
// Ingredient Slot permissions
|
|
104
|
+
Permission["INGREDIENT_SLOT_READ"] = "INGREDIENT_SLOT_READ";
|
|
105
|
+
Permission["INGREDIENT_SLOT_WRITE"] = "INGREDIENT_SLOT_WRITE";
|
|
106
|
+
Permission["INGREDIENT_SLOT_UPDATE"] = "INGREDIENT_SLOT_UPDATE";
|
|
107
|
+
Permission["INGREDIENT_SLOT_DELETE"] = "INGREDIENT_SLOT_DELETE";
|
|
108
|
+
// Global Point permissions
|
|
109
|
+
Permission["GLOBAL_POINT_READ"] = "GLOBAL_POINT_READ";
|
|
110
|
+
Permission["GLOBAL_POINT_WRITE"] = "GLOBAL_POINT_WRITE";
|
|
111
|
+
Permission["GLOBAL_POINT_UPDATE"] = "GLOBAL_POINT_UPDATE";
|
|
112
|
+
Permission["GLOBAL_POINT_DELETE"] = "GLOBAL_POINT_DELETE";
|
|
113
|
+
// Recharge permissions
|
|
114
|
+
Permission["RECHARGE_READ"] = "RECHARGE_READ";
|
|
115
|
+
Permission["RECHARGE_WRITE"] = "RECHARGE_WRITE";
|
|
116
|
+
Permission["RECHARGE_UPDATE"] = "RECHARGE_UPDATE";
|
|
117
|
+
Permission["RECHARGE_DELETE"] = "RECHARGE_DELETE";
|
|
118
|
+
Permission["RECHARGE_APPROVE"] = "RECHARGE_APPROVE";
|
|
119
|
+
Permission["RECHARGE_REJECT"] = "RECHARGE_REJECT";
|
|
120
|
+
// Purchase permissions
|
|
121
|
+
Permission["PURCHASE_READ"] = "PURCHASE_READ";
|
|
122
|
+
Permission["PURCHASE_WRITE"] = "PURCHASE_WRITE";
|
|
123
|
+
Permission["PURCHASE_DELETE"] = "PURCHASE_DELETE";
|
|
124
|
+
})(Permission || (Permission = {}));
|
|
125
|
+
export var RoomEvent;
|
|
126
|
+
(function (RoomEvent) {
|
|
127
|
+
RoomEvent["MAINTENANCE"] = "MAINTENANCE";
|
|
128
|
+
RoomEvent["TASK_STATUS_UPDATE"] = "TASK_STATUS_UPDATE";
|
|
129
|
+
RoomEvent["ON_TASK_UPDATE"] = "ON_TASK_UPDATE";
|
|
130
|
+
RoomEvent["ON_BOX_CHANGE"] = "ON_BOX_CHANGE";
|
|
131
|
+
RoomEvent["MOVEMENT_STATUS_UPDATE"] = "MOVEMENT_STATUS_UPDATE";
|
|
132
|
+
RoomEvent["SYSTEM_MODE"] = "SYSTEM_MODE";
|
|
133
|
+
// Recharge events
|
|
134
|
+
RoomEvent["RECHARGE_PENDING"] = "RECHARGE_PENDING";
|
|
135
|
+
RoomEvent["RECHARGE_APPROVED"] = "RECHARGE_APPROVED";
|
|
136
|
+
RoomEvent["RECHARGE_REJECTED"] = "RECHARGE_REJECTED";
|
|
137
|
+
// Telemetry: Datos de trama B1 (Voltaje, PWM, Corriente, Velocidad)
|
|
138
|
+
RoomEvent["MOTOR_VOLTAGE"] = "MOTOR_VOLTAGE";
|
|
139
|
+
RoomEvent["MOTOR_PWM"] = "MOTOR_PWM";
|
|
140
|
+
RoomEvent["MOTOR_CURRENT"] = "MOTOR_CURRENT";
|
|
141
|
+
RoomEvent["MOTOR_VELOCITY"] = "MOTOR_VELOCITY";
|
|
142
|
+
// Telemetry: Datos de trama B2 (Posiciones)
|
|
143
|
+
RoomEvent["MOTOR_POSITION"] = "MOTOR_POSITION";
|
|
144
|
+
RoomEvent["MOTOR_ACTUATOR_POSITION"] = "MOTOR_ACTUATOR_POSITION";
|
|
145
|
+
// Telemetry: Datos de trama B3 (Temperaturas y errores)
|
|
146
|
+
RoomEvent["MOTOR_MOS_TEMPERATURE"] = "MOTOR_MOS_TEMPERATURE";
|
|
147
|
+
RoomEvent["MOTOR_TEMPERATURE"] = "MOTOR_TEMPERATURE";
|
|
148
|
+
RoomEvent["MOTOR_MCU_TEMPERATURE"] = "MOTOR_MCU_TEMPERATURE";
|
|
149
|
+
RoomEvent["MOTOR_WARNING_CODE"] = "MOTOR_WARNING_CODE";
|
|
150
|
+
RoomEvent["MOTOR_ERROR_CODE"] = "MOTOR_ERROR_CODE";
|
|
151
|
+
// Telemetry: Level Sensor (TOFSense)
|
|
152
|
+
RoomEvent["LEVEL_SENSOR"] = "LEVEL_SENSOR";
|
|
153
|
+
RoomEvent["USER_JOINED"] = "userJoined";
|
|
154
|
+
RoomEvent["USER_LEFT"] = "userLeft";
|
|
155
|
+
})(RoomEvent || (RoomEvent = {}));
|
|
156
|
+
export var MovementStatus;
|
|
157
|
+
(function (MovementStatus) {
|
|
158
|
+
MovementStatus["UNEXECUTED"] = "UNEXECUTED";
|
|
159
|
+
MovementStatus["PENDING"] = "PENDING";
|
|
160
|
+
MovementStatus["IN_PROGRESS"] = "IN_PROGRESS";
|
|
161
|
+
MovementStatus["COMPLETED"] = "COMPLETED";
|
|
162
|
+
MovementStatus["FAILED"] = "FAILED";
|
|
163
|
+
MovementStatus["CANCELLED"] = "CANCELLED";
|
|
164
|
+
})(MovementStatus || (MovementStatus = {}));
|
|
165
|
+
export var RechargeStatus;
|
|
166
|
+
(function (RechargeStatus) {
|
|
167
|
+
RechargeStatus["PENDING"] = "PENDING";
|
|
168
|
+
RechargeStatus["APPROVED"] = "APPROVED";
|
|
169
|
+
RechargeStatus["REJECTED"] = "REJECTED";
|
|
170
|
+
})(RechargeStatus || (RechargeStatus = {}));
|
|
171
|
+
//# sourceMappingURL=core.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.types.js","sourceRoot":"","sources":["../../../../../libs/types/src/lib/core.types.ts"],"names":[],"mappings":"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","sourcesContent":["// ============================================================================\n// @c80/types — Contrato de tipos compartido del ecosistema barman\n//\n// FUENTE UNICA DE VERDAD del contrato compartido entre:\n// - zerath-back (backend NestJS, dueno del contrato)\n// - vulcan-arm (controlador del brazo)\n// - kyron-front (frontend de operacion)\n// - chillbox (frontend de cliente)\n//\n// Solo interfaces + enums. CERO dependencias de runtime (ni Angular, ni Nest).\n// Los tipos PROPIOS de un solo repo (UI, dispenser, sensores, etc.) NO viven\n// aca: quedan locales en cada repo.\n// ============================================================================\n\n// ======================== TIPOS GLOBALES REUTILIZABLES ========================\n\n/**\n * Tipo para parametros de query en requests HTTP.\n * Usado en servicios CRUD para filtros, paginacion, busqueda, etc.\n */\nexport type QueryParams = Record<string, string | number | boolean | undefined>;\n\n// ======================== INTERFACES PRINCIPALES ========================\n\n/**\n * Tipo generico para Foreign Keys en responses.\n * Garantiza que las relaciones siempre incluyan id y name minimo.\n * Para requests, se usan campos *Id (taskId, boxId, profileId, etc.)\n */\nexport interface FK {\n id: string;\n name: string;\n}\n\nexport enum Permission {\n // User permissions\n USER_READ = 'USER_READ',\n USER_WRITE = 'USER_WRITE',\n USER_UPDATE = 'USER_UPDATE',\n USER_DELETE = 'USER_DELETE',\n USER_TOGGLE = 'USER_TOGGLE',\n USER_PASSWORD_UPDATE = 'USER_PASSWORD_UPDATE',\n\n // Role permissions\n ROLE_READ = 'ROLE_READ',\n ROLE_WRITE = 'ROLE_WRITE',\n ROLE_UPDATE = 'ROLE_UPDATE',\n ROLE_DELETE = 'ROLE_DELETE',\n ROLE_TOGGLE = 'ROLE_TOGGLE',\n\n // Box permissions\n BOX_READ = 'BOX_READ',\n BOX_WRITE = 'BOX_WRITE',\n BOX_UPDATE = 'BOX_UPDATE',\n BOX_DELETE = 'BOX_DELETE',\n BOX_TOGGLE = 'BOX_TOGGLE',\n BOX_REGENERATE_API_KEY = 'BOX_REGENERATE_API_KEY',\n\n // Price Configuration permissions\n PRICE_CONFIGURATION_READ = 'PRICE_CONFIGURATION_READ',\n PRICE_CONFIGURATION_WRITE = 'PRICE_CONFIGURATION_WRITE',\n PRICE_CONFIGURATION_UPDATE = 'PRICE_CONFIGURATION_UPDATE',\n PRICE_CONFIGURATION_DELETE = 'PRICE_CONFIGURATION_DELETE',\n PRICE_CONFIGURATION_TOGGLE = 'PRICE_CONFIGURATION_TOGGLE',\n\n // Motor Configuration permissions\n MOTOR_CONFIGURATION_READ = 'MOTOR_CONFIGURATION_READ',\n MOTOR_CONFIGURATION_WRITE = 'MOTOR_CONFIGURATION_WRITE',\n MOTOR_CONFIGURATION_UPDATE = 'MOTOR_CONFIGURATION_UPDATE',\n MOTOR_CONFIGURATION_DELETE = 'MOTOR_CONFIGURATION_DELETE',\n MOTOR_CONFIGURATION_TOGGLE = 'MOTOR_CONFIGURATION_TOGGLE',\n\n // Ingredient Slot Configuration permissions\n INGREDIENT_SLOT_CONFIGURATION_READ = 'INGREDIENT_SLOT_CONFIGURATION_READ',\n INGREDIENT_SLOT_CONFIGURATION_WRITE = 'INGREDIENT_SLOT_CONFIGURATION_WRITE',\n INGREDIENT_SLOT_CONFIGURATION_UPDATE = 'INGREDIENT_SLOT_CONFIGURATION_UPDATE',\n INGREDIENT_SLOT_CONFIGURATION_DELETE = 'INGREDIENT_SLOT_CONFIGURATION_DELETE',\n INGREDIENT_SLOT_CONFIGURATION_TOGGLE = 'INGREDIENT_SLOT_CONFIGURATION_TOGGLE',\n\n // Task permissions\n TASK_READ = 'TASK_READ',\n TASK_WRITE = 'TASK_WRITE',\n TASK_UPDATE = 'TASK_UPDATE',\n TASK_DELETE = 'TASK_DELETE',\n TASK_TOGGLE = 'TASK_TOGGLE',\n TASK_EXECUTE = 'TASK_EXECUTE',\n TASK_RESET = 'TASK_RESET',\n TASK_CANCEL = 'TASK_CANCEL',\n TASK_CLEAR = 'TASK_CLEAR',\n\n // Movement permissions\n MOVEMENT_READ = 'MOVEMENT_READ',\n MOVEMENT_WRITE = 'MOVEMENT_WRITE',\n MOVEMENT_UPDATE = 'MOVEMENT_UPDATE',\n MOVEMENT_DELETE = 'MOVEMENT_DELETE',\n MOVEMENT_TOGGLE = 'MOVEMENT_TOGGLE',\n\n // Driver permissions\n DRIVER_READ = 'DRIVER_READ',\n DRIVER_WRITE = 'DRIVER_WRITE',\n DRIVER_UPDATE = 'DRIVER_UPDATE',\n DRIVER_DELETE = 'DRIVER_DELETE',\n\n // Product permissions\n PRODUCT_READ = 'PRODUCT_READ',\n PRODUCT_WRITE = 'PRODUCT_WRITE',\n PRODUCT_UPDATE = 'PRODUCT_UPDATE',\n PRODUCT_DELETE = 'PRODUCT_DELETE',\n PRODUCT_TOGGLE = 'PRODUCT_TOGGLE',\n\n // Favorite permissions\n FAVORITE_READ = 'FAVORITE_READ',\n FAVORITE_WRITE = 'FAVORITE_WRITE',\n FAVORITE_DELETE = 'FAVORITE_DELETE',\n\n // Rating permissions\n RATING_WRITE = 'RATING_WRITE',\n\n // Recipe permissions\n RECIPE_READ = 'RECIPE_READ',\n RECIPE_WRITE = 'RECIPE_WRITE',\n RECIPE_UPDATE = 'RECIPE_UPDATE',\n RECIPE_DELETE = 'RECIPE_DELETE',\n\n // Part permissions\n PART_READ = 'PART_READ',\n PART_WRITE = 'PART_WRITE',\n PART_UPDATE = 'PART_UPDATE',\n PART_DELETE = 'PART_DELETE',\n\n // BoxIngredient permissions\n BOX_INGREDIENT_READ = 'BOX_INGREDIENT_READ',\n BOX_INGREDIENT_WRITE = 'BOX_INGREDIENT_WRITE',\n BOX_INGREDIENT_UPDATE = 'BOX_INGREDIENT_UPDATE',\n BOX_INGREDIENT_DELETE = 'BOX_INGREDIENT_DELETE',\n BOX_INGREDIENT_TOGGLE = 'BOX_INGREDIENT_TOGGLE',\n\n // Ingredient Slot permissions\n INGREDIENT_SLOT_READ = 'INGREDIENT_SLOT_READ',\n INGREDIENT_SLOT_WRITE = 'INGREDIENT_SLOT_WRITE',\n INGREDIENT_SLOT_UPDATE = 'INGREDIENT_SLOT_UPDATE',\n INGREDIENT_SLOT_DELETE = 'INGREDIENT_SLOT_DELETE',\n\n // Global Point permissions\n GLOBAL_POINT_READ = 'GLOBAL_POINT_READ',\n GLOBAL_POINT_WRITE = 'GLOBAL_POINT_WRITE',\n GLOBAL_POINT_UPDATE = 'GLOBAL_POINT_UPDATE',\n GLOBAL_POINT_DELETE = 'GLOBAL_POINT_DELETE',\n\n // Recharge permissions\n RECHARGE_READ = 'RECHARGE_READ',\n RECHARGE_WRITE = 'RECHARGE_WRITE',\n RECHARGE_UPDATE = 'RECHARGE_UPDATE',\n RECHARGE_DELETE = 'RECHARGE_DELETE',\n RECHARGE_APPROVE = 'RECHARGE_APPROVE',\n RECHARGE_REJECT = 'RECHARGE_REJECT',\n\n // Purchase permissions\n PURCHASE_READ = 'PURCHASE_READ',\n PURCHASE_WRITE = 'PURCHASE_WRITE',\n PURCHASE_DELETE = 'PURCHASE_DELETE',\n}\n\nexport interface Role {\n id: string;\n name: string;\n description?: string;\n permissions: Permission[];\n createdAt: Date | string;\n updatedAt: Date | string;\n}\n\nexport type MessageType = 'ORDER' | 'DATA';\n\nexport type Side = 'BACK' | 'FRONT' | 'BOX';\n\nexport type SystemMode = 'NOT_CONNECTED' | 'CONFIGURATION' | 'CURRENT' | 'POSITION';\n\n// Enums compartidos con el frontend\nexport type RoomId = 'DEFAULT-ROOM';\n\nexport enum RoomEvent {\n MAINTENANCE = 'MAINTENANCE', // Evento para mantenimiento (reset, current mode, position modes, movement)\n TASK_STATUS_UPDATE = 'TASK_STATUS_UPDATE', // Actualizaciones de estado de tasks y sus movements\n ON_TASK_UPDATE = 'ON_TASK_UPDATE', // Evento para actualizaciones completas de task con sus movements\n ON_BOX_CHANGE = 'ON_BOX_CHANGE', // Evento para cambios en box\n MOVEMENT_STATUS_UPDATE = 'MOVEMENT_STATUS_UPDATE', // Evento para actualizar status de movement via WebSocket\n SYSTEM_MODE = 'SYSTEM_MODE', // Evento para comunicar cambios de modo del sistema\n\n // Recharge events\n RECHARGE_PENDING = 'RECHARGE_PENDING',\n RECHARGE_APPROVED = 'RECHARGE_APPROVED',\n RECHARGE_REJECTED = 'RECHARGE_REJECTED',\n\n // Telemetry: Datos de trama B1 (Voltaje, PWM, Corriente, Velocidad)\n MOTOR_VOLTAGE = 'MOTOR_VOLTAGE',\n MOTOR_PWM = 'MOTOR_PWM',\n MOTOR_CURRENT = 'MOTOR_CURRENT',\n MOTOR_VELOCITY = 'MOTOR_VELOCITY',\n\n // Telemetry: Datos de trama B2 (Posiciones)\n MOTOR_POSITION = 'MOTOR_POSITION', // Evento para posiciones de los motores\n MOTOR_ACTUATOR_POSITION = 'MOTOR_ACTUATOR_POSITION',\n\n // Telemetry: Datos de trama B3 (Temperaturas y errores)\n MOTOR_MOS_TEMPERATURE = 'MOTOR_MOS_TEMPERATURE',\n MOTOR_TEMPERATURE = 'MOTOR_TEMPERATURE',\n MOTOR_MCU_TEMPERATURE = 'MOTOR_MCU_TEMPERATURE',\n MOTOR_WARNING_CODE = 'MOTOR_WARNING_CODE',\n MOTOR_ERROR_CODE = 'MOTOR_ERROR_CODE',\n\n // Telemetry: Level Sensor (TOFSense)\n LEVEL_SENSOR = 'LEVEL_SENSOR',\n\n USER_JOINED = 'userJoined',\n USER_LEFT = 'userLeft',\n}\n\nexport enum MovementStatus {\n UNEXECUTED = 'UNEXECUTED',\n PENDING = 'PENDING',\n IN_PROGRESS = 'IN_PROGRESS',\n COMPLETED = 'COMPLETED',\n FAILED = 'FAILED',\n CANCELLED = 'CANCELLED',\n}\n\n/**\n * Tipo para timestamps que pueden venir como string ISO o Date\n */\nexport type Timestamp = string | Date;\n\n/**\n * Tipo para timestamps opcionales que pueden ser null o undefined\n */\nexport type NullableTimestamp = string | Date | null | undefined;\n\nexport interface Drivers {\n driver0?: number;\n driver1?: number;\n driver2?: number;\n driver3?: number;\n driver4?: number;\n driver5?: number;\n driver6?: number;\n driver7?: number;\n driver8?: number;\n driver9?: number;\n driver10?: number;\n driver11?: number;\n driver12?: number;\n driver13?: number;\n driver14?: number;\n driver15?: number;\n driver16?: number;\n driver17?: number;\n driver18?: number;\n driver19?: number;\n driver20?: number;\n driver21?: number;\n driver22?: number;\n}\n\n/**\n * Interpolacion de movimiento.\n * Contiene solo drivers opcionales y metadata minima (sin sleep, status, timestamps).\n * @deprecated El backend ya no genera interpolaciones; la interpolacion se calcula\n * localmente en el ARM. Campo conservado solo por compatibilidad de contrato.\n */\nexport interface InterpolatedMovement {\n id: string;\n name: string;\n order: number;\n driver0?: number;\n driver1?: number;\n driver2?: number;\n driver3?: number;\n driver4?: number;\n driver5?: number;\n driver6?: number;\n driver7?: number;\n driver8?: number;\n driver9?: number;\n driver10?: number;\n driver11?: number;\n driver12?: number;\n driver13?: number;\n driver14?: number;\n driver15?: number;\n driver16?: number;\n driver17?: number;\n driver18?: number;\n driver19?: number;\n driver20?: number;\n driver21?: number;\n driver22?: number;\n}\n\nexport interface TaskStats {\n id: string;\n name: string;\n description: string;\n enabled: boolean;\n createdAt: Date;\n updatedAt: Date;\n\n // Estados calculados al vuelo por cantidad de movements\n unexecutedCount: number;\n pendingCount: number;\n inProgressCount: number;\n completedCount: number;\n failedCount: number;\n cancelledCount: number;\n totalMovements: number;\n\n // Progreso en formato string\n progress: string; // e.g., '2/5', '0/5', '5/5'\n\n // Mensajes de error de movements que tienen errorMessage\n errorMessages: string[];\n\n // Fechas calculadas basadas en movements (pueden ser undefined)\n inProgressAt?: Date; // Primer movement con inProgressAt (order mas bajo)\n completedAt?: Date; // Ultimo movement completado (order mas alto)\n failedAt?: Date; // Primer movement que fallo (order mas bajo)\n cancelledAt?: Date; // Primer movement cancelado (order mas bajo)\n}\n\n// ========================== WebSocket Telemetry ==========================\n\nexport type MotorCommand = 'reset' | 'position' | 'current';\n\nexport interface ChatMessage {\n side?: Side; // Lado del cliente que envia el comando\n boxId?: string; // ID de la caja que coordina las operaciones (UUID)\n roomId?: string; // ID de la sala\n date?: Date; // Fecha/hora del mensaje\n type?: MessageType; // Tipo de mensaje, generalmente 'ORDER' para que se ejecuten los comandos\n maintenance?: MotorCommand | 'execute-movement-id' | 'execute-movement' | 'get-system-mode' | 'calibrate-level-sensor'; // Comando de mantenimiento\n movementId?: string; // ID del movement para ejecutar (se hace fetch del backend)\n movement?: Partial<Movement>; // Movement completo para envio en tiempo real\n sensorCanId?: number; // CAN ID del sensor para calibracion\n ingredientSlotId?: string; // ID del IngredientSlot asociado al sensor\n taskId?: string; // ID de la task para operaciones relacionadas\n taskStats?: TaskStats; // Estadisticas de task\n task?: Task;\n onBoxChange?: Partial<Box>;\n systemMode?: SystemMode; // Modo actual del sistema\n\n // Datos de trama B1 (Voltaje, PWM, Corriente, Velocidad)\n motorVoltage?: Drivers; // Tension\n motorPwm?: Drivers; // Senal PWM\n motorCurrent?: Drivers; // Corriente\n motorVelocity?: Drivers; // Velocidad\n\n // Datos de trama B2 (Posiciones)\n motorPosition?: Drivers; // Posicion del rotor (motor)\n motorActuatorPosition?: Drivers; // Posicion del actuador\n\n // Datos de trama B3 (Temperaturas y errores)\n motorMosTemperature?: Drivers; // Temperatura del MOSFET\n motorTemperature?: Drivers; // Temperatura del motor\n motorMcuTemperature?: Drivers; // Temperatura del G431 (MCU)\n motorWarningCode?: Drivers; // Codigo de warning\n motorErrorCode?: Drivers; // Codigo de error\n\n // Level Sensor (TOFSense): cada repo tipa el payload concreto localmente\n levelSensor?: Record<string, unknown>; // Datos de sensores de nivel\n\n // Recharge data\n rechargeData?: {\n userId: string;\n amountARS: number;\n points: number;\n status: string;\n rechargeId: string;\n newBalance: number;\n };\n\n error?: string; // Mensaje de error si hubo un problema\n message?: string; // Mensaje informativo\n event?: RoomEvent; // Evento de la sala\n [key: string]: unknown; // Permite agregar propiedades adicionales\n}\n\nexport interface Box {\n id: string;\n name: string;\n description: string;\n type: string;\n location: string;\n enabled: boolean;\n apiKeyPrefix?: string; // Prefijo de API key (usado en box-page)\n createdAt: Date;\n updatedAt: Date;\n drivers?: Driver[];\n tasks?: Task[]; // Tasks migradas desde Configuration\n apiKey?: string; // Solo en response de getApiKey\n // Relaciones OneToOne con configuraciones (migradas desde Configuration)\n priceConfiguration?: PriceConfiguration | FK;\n motorConfiguration?: MotorConfiguration | FK;\n ingredientSlotConfiguration?: IngredientSlotConfiguration | FK;\n globalPoint?: GlobalPoint | FK;\n}\n\nexport interface PriceConfiguration {\n id: string;\n currency: string;\n pointValue: number;\n minMoneyLimit: number;\n maxMoneyLimit: number;\n moneyStep: number;\n costOverheadPerPart: number;\n enabled: boolean;\n box?: Box | FK;\n createdAt: Date;\n updatedAt: Date;\n}\n\nexport interface GlobalPoint {\n id: string;\n description: string;\n reposeIngredientSlot: Movement | null;\n reposeIce: Movement | null;\n reposeCup: Movement | null;\n reposeDefault: Movement | null;\n box: FK;\n createdAt: Date;\n updatedAt: Date;\n}\n\nexport interface MotorConfiguration {\n id: string;\n motorCurrent: number;\n motorVelocity: number;\n positionTolerance: number;\n enabled: boolean;\n debug: boolean;\n box?: Box | FK;\n createdAt: Date;\n updatedAt: Date;\n}\n\nexport interface IngredientSlotConfiguration {\n id: string;\n maxGridX: number;\n maxGridY: number;\n unitMl: number;\n totalCapacity: number;\n box?: Box | FK;\n createdAt: Date;\n updatedAt: Date;\n}\n\nexport interface Task {\n id: string;\n name: string;\n description: string;\n enabled: boolean;\n errorMessage?: string;\n box?: FK; // Relacion con Box (solo id + name en responses)\n movements: Movement[];\n createdAt: Timestamp;\n updatedAt: Timestamp;\n}\n\nexport interface Movement extends Drivers {\n id: string;\n name: string;\n description: string;\n sleep: number;\n order: number;\n enabled: boolean;\n createdAt: Timestamp;\n updatedAt: Timestamp;\n\n // Status y tracking\n status: MovementStatus;\n errorMessage?: string;\n\n // Timestamps automaticos opcionales (solo Date o undefined, no null)\n inProgressAt?: Date;\n completedAt?: Date;\n failedAt?: Date;\n cancelledAt?: Date;\n\n // Relacion con Task (solo id + name en responses)\n task?: FK;\n\n /**\n * @deprecated El backend ya no genera interpolaciones de movimiento; la interpolacion\n * la calcula localmente vulcan-arm a partir de los targets (driver0..driver22, order, sleep).\n * Campo conservado solo por compatibilidad con firmware viejo; el backend no lo puebla.\n */\n interpolatedMovements?: InterpolatedMovement[];\n}\n\nexport type DriverType = 'MOTOR' | 'MAGNET' | 'GRIPPER';\n\nexport interface Driver {\n id: string;\n name: string;\n description: string;\n canId: number;\n type?: DriverType;\n totalTicks?: number;\n totalMlls?: number;\n firmware?: string;\n firmwareDate?: string;\n box?: FK; // Relacion con Box (solo id + name en responses)\n createdAt: Date;\n updatedAt: Date;\n}\n\nexport interface BoxIngredient {\n id: string;\n name: string;\n description: string | null;\n bottlePrice: number;\n bottleUnitMl: number;\n enabled: boolean;\n box: Box | FK | null; // Relacion ManyToOne con Box (CASCADE)\n createdAt: Date;\n updatedAt: Date;\n}\n\nexport interface Rating {\n id: string;\n rating: number; // 1-5\n createdAt: Timestamp;\n updatedAt: Timestamp;\n // Relaciones\n user?: FK; // Relacion con User (CASCADE)\n product?: FK; // Relacion con Product (CASCADE)\n}\n\nexport interface Product {\n id: string;\n name: string;\n description: string;\n image?: string;\n enabled: boolean;\n cost: number; // Costo base del producto/receta antes de aplicar PriceConfiguration.costOverheadPerPart (persistido en DB)\n points: string; // Precio publico calculado al vuelo: (cost + overhead) / pointValue\n averageRating: number; // Promedio de ratings (1-5) calculado desde Rating entity\n isFavorite?: boolean; // Indica si es favorito del usuario (true/false)\n canRate?: boolean; // Indica si el usuario puede calificar (true/false)\n userRating?: number | null; // Calificacion del usuario actual (1-5) o null si no ha calificado\n recipe?: FK | Recipe | null; // Relacion con Recipe (FK en backend; Recipe completo en algunos fronts)\n ratings?: Rating[]; // Relacion con Rating (OneToMany)\n box?: FK; // Relacion con Box (ManyToOne)\n author?: User | null; // Usuario creador del producto (opcional)\n createdAt: Timestamp;\n updatedAt: Timestamp;\n}\n\nexport interface Recipe {\n id: string;\n hasIce: boolean;\n product?: FK; // Relacion OneToOne con Product (CASCADE)\n parts?: Part[]; // Relacion OneToMany con Part (CASCADE)\n createdAt: Timestamp;\n updatedAt: Timestamp;\n}\n\nexport interface Part {\n id: string;\n count: number;\n boxIngredient: BoxIngredient | FK; // Relacion ManyToOne con BoxIngredient (CASCADE)\n recipe?: FK; // Relacion ManyToOne con Recipe (CASCADE)\n createdAt: Timestamp;\n updatedAt: Timestamp;\n}\n\nexport interface IngredientSlot {\n id: string;\n x: number;\n y: number;\n currentMl: number;\n sensorCanId?: number; // CAN ID del sensor TOFSense\n calibrationDistanceMm?: number | null; // Distancia de calibracion (mm)\n currentDistanceMm?: number | null; // Distancia actual medida (mm)\n box: FK; // Relacion ManyToOne con Box (CASCADE)\n boxIngredient: BoxIngredient | FK; // Relacion ManyToOne con BoxIngredient (CASCADE)\n reposePoint?: Movement | FK | null; // Relacion ManyToOne con Movement (SET NULL)\n actionPoint?: Movement | FK | null; // Relacion ManyToOne con Movement (SET NULL)\n createdAt: Timestamp;\n updatedAt: Timestamp;\n}\n\nexport interface User {\n id: string;\n name: string;\n username: string | null;\n email: string;\n password?: string; // No debe enviarse en responses publicos\n enabled: boolean;\n googleId: string | null;\n picture: string | null;\n givenName: string | null;\n familyName: string | null;\n emailVerified: boolean;\n points: number;\n role?: Role | FK | null; // Relacion ManyToOne con Role\n box?: Box | FK | null; // Relacion ManyToOne con Box\n favorites?: Favorite[]; // Relacion OneToMany con Favorite\n ratings?: Rating[]; // Relacion OneToMany con Rating\n purchases?: Purchase[]; // Relacion OneToMany con Purchase\n recharges?: Recharge[]; // Relacion OneToMany con Recharge\n createdAt: Timestamp;\n updatedAt: Timestamp;\n}\n\nexport interface Favorite {\n id: string;\n user: User | FK; // Relacion ManyToOne con User (CASCADE)\n product: Product | FK; // Relacion ManyToOne con Product (CASCADE)\n createdAt: Timestamp;\n}\n\nexport interface Purchase {\n id: string;\n user: User | FK; // Relacion ManyToOne con User (CASCADE)\n product: Product | FK; // Relacion ManyToOne con Product (CASCADE)\n createdAt: Timestamp;\n updatedAt: Timestamp;\n}\n\nexport enum RechargeStatus {\n PENDING = 'PENDING',\n APPROVED = 'APPROVED',\n REJECTED = 'REJECTED',\n}\n\nexport interface Recharge {\n id: string;\n amountARS: number;\n pointsCalculated: number;\n pointValueUsed: number;\n mercadopagoId: string | null;\n status: RechargeStatus;\n metadata: Record<string, unknown> | null;\n user: User | FK; // Relacion ManyToOne con User (CASCADE)\n box: Box | FK; // Relacion ManyToOne con Box\n createdAt: Timestamp;\n updatedAt: Timestamp;\n}\n\n// ================================ WebSocket Movement Interfaces ================================\n\nexport interface MovementStatusUpdateRequest {\n movementId: string;\n status: MovementStatus;\n}\n\nexport interface MovementStatusUpdateResponse {\n success: boolean;\n message: string;\n movementId: string;\n newStatus: MovementStatus;\n}\n\n// ================================ Generic Response Interfaces ================================\n\nexport interface ActionResponseDto {\n success: boolean;\n message: string;\n}\n\nexport interface CreateProductResponseDto extends ActionResponseDto {\n data?: {\n productId: string;\n recipeId: string;\n };\n}\n\nexport interface PublicUser extends Record<string, unknown> {\n id: string;\n name: string;\n email: string;\n enabled: boolean;\n role: Role | null;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface LoginResponse extends ActionResponseDto {\n access_token?: string;\n user?: PublicUser;\n}\n\n// ================================ Pagination Interfaces ================================\n\nexport interface PaginationParams {\n offset?: number;\n limit?: number;\n searchTerm?: string;\n boxId?: string;\n}\n\nexport interface PaginatedResponse<T> {\n data: T[];\n total: number;\n}\n\n// ================================ Product / Recipe DTOs ================================\n\nexport interface CreateProductWithRecipeDto {\n // Campos de producto\n name: string;\n description?: string;\n boxId: string;\n\n // Campos de receta\n hasIce: boolean;\n parts: CreatePartDto[];\n}\n\nexport interface CreatePartDto {\n count: number;\n boxIngredientId: string;\n}\n"]}
|