| name | sync-types |
| description | Sincronización de tipos entre backend y frontend. Mapeo de modelos a interfaces. Trigger: Cuando se modifican tipos compartidos o se sincronizan con modelos del backend.
|
| license | MIT |
| metadata | {"author":"myquota","version":"1.0","auto_invoke":["Modifying shared types","Syncing with backend models"]} |
Propósito
Mantener sincronizados los tipos entre myquota-backend y myquota-app.
Mapeo de Tipos
Modelo Backend (myquota-backend/src/modules/*/model.ts) | Tipo Frontend (src/shared/types/) |
|---|
CreditCard | creditCard.ts → CreditCard |
Transaction | transaction.ts → Transaction |
Quota | quota.ts → Quota |
BillingPeriod | billingPeriod.ts → BillingPeriod |
User | user.ts → UserInfo |
Category | category.ts → Category |
Regla Principal
Cuando se agrega, renombra o elimina un campo en una entidad del backend,
TAMBIÉN se debe actualizar la interface correspondiente en src/shared/types/.
Diferencias Backend ↔ Frontend
| Aspecto | Backend (model.ts) | Frontend (types/) |
|---|
| Sintaxis | class con !: | interface |
| Fechas | Date | string (ISO 8601) |
| IBaseEntity | implements | Copiar campos |
Conversión de Fechas
La API serializa Date a ISO strings:
createdAt!: Date;
createdAt: string;
Ejemplo: Agregar Campo
1. Backend modifica modelo
export class CreditCard implements IBaseEntity {
id!: string;
createdAt!: Date;
updatedAt!: Date;
deletedAt?: Date | null;
name!: string;
lastFourDigits!: string;
color!: string;
newField!: string;
}
2. Frontend actualiza interface
export interface CreditCard {
id: string;
createdAt: string;
updatedAt: string;
deletedAt?: string | null;
name: string;
lastFourDigits: string;
color: string;
newField: string;
}
Template de Interface
export interface MyEntity {
id: string;
createdAt: string;
updatedAt: string;
deletedAt?: string | null;
name: string;
}
export interface CreateMyEntityDto {
name: string;
}
export type UpdateMyEntityDto = Partial<CreateMyEntityDto>;
Campos de IBaseEntity
Todos los modelos del backend tienen estos campos base:
id: string;
createdAt: string;
updatedAt: string;
deletedAt?: string | null;
Cuándo Sincronizar
- Al agregar campo en backend → agregar en frontend
- Al renombrar campo en backend → renombrar en frontend
- Al cambiar tipo en backend → actualizar en frontend
- Al eliminar campo en backend → eliminar en frontend
Rutas de Archivos
Backend
myquota-backend/src/modules/
├── creditCard/creditCard.model.ts
├── transaction/transaction.model.ts
├── quota/quota.model.ts
├── billingPeriod/billingPeriod.model.ts
├── user/user.model.ts
└── category/category.model.ts
Frontend
myquota-app/src/shared/types/
├── creditCard.ts
├── transaction.ts
├── quota.ts
├── billingPeriod.ts
├── user.ts
└── category.ts
Anti-patterns
createdAt: Date;
Checklist