[debt] APIs deprecadas, código muerto y redundancias (FormEvent, @prisma/client, soldAt) #22

Open
opened 2026-10-02 19:19:28 +00:00 by Carlos · 0 comments
Member

Qué es la deuda

APIs deprecadas

  • React.FormEvent está marcado @deprecated en @types/react (recomienda SubmitEvent). Se usa 14 veces en 11 archivos de apps/web: admin/clientes, admin/inventario (lista y [id] ×2), admin/inventario/categorias, admin/inventario/productos ×2, admin/proveedores, admin/usuarios, login/_components/password-form, pos/_components/cash-register-control ×3 y pos/page.tsx.
  • apps/api no usa ninguna API deprecada (revisado con el compilador de TypeScript buscando símbolos @deprecated).

Código muerto

  • apps/web/src/app/_core/components/section-placeholder.tsx (SectionPlaceholder) no se usa.
  • @prisma/client está en las dependencias de apps/api pero no se importa (Prisma 8 usa @prisma/orm-postgres).
  • ProductHistory.soldAt está en el contrato, el DTO, la entidad y el repositorio, pero nada le asigna valor.

Redundancias

  • Dos formas de llamar al API: los hooks de createResource y 14 llamadas directas a apiClient (pos/page.tsx 6, pos/historial/page.tsx 5, admin/inventario/productos/page.tsx 2, admin/inventario/[id]/page.tsx 1). Las directas no invalidan la caché de React Query, por eso pos/page.tsx necesita invalidateSaleData() a mano.
  • Dos tipos para el mismo usuario: AuthUser (_core/types/auth-user.ts) y AppUser (_core/types/entities.ts).
  • admin/_components/user-menu.tsx:24-27 vuelve a declarar ThemeMode, los modos, los íconos y las etiquetas que ya existen en _core/hooks/use-theme.tsx y _core/components/theme-toggle.tsx.
  • admin/inventario/[id] y admin/proveedores/[id] hacen Number(params.id) sin validar: con /admin/proveedores/abc piden /api/suppliers/NaN y la página queda vacía en vez de mostrar "no encontrado".

Qué estamos pagando hoy

  • Los avisos de deprecación se acumulan y el siguiente upgrade de @types/react puede romper la compilación.
  • El código y las dependencias muertas confunden sobre qué se usa y hacen más pesada la instalación.
  • Con dos formas de llamar al API, es fácil olvidar invalidar la caché y mostrar datos viejos.

Arreglo propuesto

  • Reemplazar React.FormEvent<HTMLFormElement> por React.SubmitEvent<HTMLFormElement> (o tipar el handler con React.FormEventHandler)
  • Borrar SectionPlaceholder
  • Quitar @prisma/client de apps/api/package.json
  • Decidir si soldAt se usa (asignarlo al vender) o se quita del contrato
  • Usar siempre los hooks de recurso (agregando mutaciones específicas donde haga falta) o mover esas cadenas de llamadas al servidor (#3)
  • Unificar AuthUser y AppUser
  • Exportar modos, íconos y etiquetas del tema desde un solo lugar y usarlos en ThemeToggle y UserMenu
  • Validar el id de las rutas dinámicas y llamar a notFound() si no es un número

Techo de esta ronda

Limpieza mecánica en un PR chico. Fuera: rediseñar la capa de datos del frontend y mover la venta al servidor (#3).

Superficie

Web (apps/web)

Módulos

Web / frontend, API / backend, Base de datos / contrato Prisma

Esfuerzo

S — un PR chico

Riesgo de no tocarlo

Bajo

### Qué es la deuda **APIs deprecadas** - `React.FormEvent` está marcado `@deprecated` en `@types/react` (recomienda `SubmitEvent`). Se usa 14 veces en 11 archivos de `apps/web`: `admin/clientes`, `admin/inventario` (lista y `[id]` ×2), `admin/inventario/categorias`, `admin/inventario/productos` ×2, `admin/proveedores`, `admin/usuarios`, `login/_components/password-form`, `pos/_components/cash-register-control` ×3 y `pos/page.tsx`. - `apps/api` no usa ninguna API deprecada (revisado con el compilador de TypeScript buscando símbolos `@deprecated`). **Código muerto** - `apps/web/src/app/_core/components/section-placeholder.tsx` (`SectionPlaceholder`) no se usa. - `@prisma/client` está en las dependencias de `apps/api` pero no se importa (Prisma 8 usa `@prisma/orm-postgres`). - `ProductHistory.soldAt` está en el contrato, el DTO, la entidad y el repositorio, pero nada le asigna valor. **Redundancias** - Dos formas de llamar al API: los hooks de `createResource` y 14 llamadas directas a `apiClient` (`pos/page.tsx` 6, `pos/historial/page.tsx` 5, `admin/inventario/productos/page.tsx` 2, `admin/inventario/[id]/page.tsx` 1). Las directas no invalidan la caché de React Query, por eso `pos/page.tsx` necesita `invalidateSaleData()` a mano. - Dos tipos para el mismo usuario: `AuthUser` (`_core/types/auth-user.ts`) y `AppUser` (`_core/types/entities.ts`). - `admin/_components/user-menu.tsx:24-27` vuelve a declarar `ThemeMode`, los modos, los íconos y las etiquetas que ya existen en `_core/hooks/use-theme.tsx` y `_core/components/theme-toggle.tsx`. - `admin/inventario/[id]` y `admin/proveedores/[id]` hacen `Number(params.id)` sin validar: con `/admin/proveedores/abc` piden `/api/suppliers/NaN` y la página queda vacía en vez de mostrar "no encontrado". ### Qué estamos pagando hoy - Los avisos de deprecación se acumulan y el siguiente upgrade de `@types/react` puede romper la compilación. - El código y las dependencias muertas confunden sobre qué se usa y hacen más pesada la instalación. - Con dos formas de llamar al API, es fácil olvidar invalidar la caché y mostrar datos viejos. ### Arreglo propuesto - [x] Reemplazar `React.FormEvent<HTMLFormElement>` por `React.SubmitEvent<HTMLFormElement>` (o tipar el handler con `React.FormEventHandler`) - [x] Borrar `SectionPlaceholder` - [x] Quitar `@prisma/client` de `apps/api/package.json` - [ ] Decidir si `soldAt` se usa (asignarlo al vender) o se quita del contrato - [x] Usar siempre los hooks de recurso (agregando mutaciones específicas donde haga falta) o mover esas cadenas de llamadas al servidor (#3) - [x] Unificar `AuthUser` y `AppUser` - [x] Exportar modos, íconos y etiquetas del tema desde un solo lugar y usarlos en `ThemeToggle` y `UserMenu` - [x] Validar el `id` de las rutas dinámicas y llamar a `notFound()` si no es un número ### Techo de esta ronda Limpieza mecánica en un PR chico. Fuera: rediseñar la capa de datos del frontend y mover la venta al servidor (#3). ### Superficie Web (apps/web) ### Módulos Web / frontend, API / backend, Base de datos / contrato Prisma ### Esfuerzo S — un PR chico ### Riesgo de no tocarlo Bajo
Jose was assigned by Carlos 2026-10-02 20:04:01 +00:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RynextTechnologies/PDV#22