miinventario-v2/orchestration/inventarios/BACKEND_INVENTORY.yml
rckrdmrd 1a53b5c4d3 [MIINVENTARIO] feat: Initial commit - Sistema de inventario con análisis de video IA
- Backend NestJS con módulos de autenticación, inventario, créditos
- Frontend React con dashboard y componentes UI
- Base de datos PostgreSQL con migraciones
- Tests E2E configurados
- Configuración de Docker y deployment

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 02:25:48 -06:00

396 lines
13 KiB
YAML

# MiInventario - Backend Inventory
# Version: 2.0.0
# Actualizado: 2026-01-10
metadata:
proyecto: miinventario
componente: backend
framework: NestJS
lenguaje: TypeScript
version_node: "18"
version: "2.0.0"
estado: implementado
creado: 2026-01-10
actualizado: 2026-01-10
actualizado_por: "Agente Orquestador"
# ===========================================
# RESUMEN
# ===========================================
resumen:
modulos_implementados: 11
controllers_implementados: 11
services_implementados: 11
endpoints_implementados: 45
entidades_implementadas: 13
dtos_implementados: 12
guards_implementados: 1
strategies_implementados: 1
tests_e2e: 53
test_coverage: 90
# ===========================================
# MODULOS IMPLEMENTADOS
# ===========================================
modulos:
- nombre: auth
ruta: "modules/auth"
descripcion: "Autenticacion JWT, registro, login, OTP"
estado: implementado
prioridad: P0
archivos:
- auth.controller.ts
- auth.service.ts
- auth.module.ts
- dto/login.dto.ts
- dto/register.dto.ts
- dto/verify-otp.dto.ts
- dto/refresh-token.dto.ts
- entities/otp.entity.ts
- entities/refresh-token.entity.ts
- guards/jwt-auth.guard.ts
- strategies/jwt.strategy.ts
endpoints:
- { metodo: POST, ruta: "/auth/register", descripcion: "Iniciar registro con OTP" }
- { metodo: POST, ruta: "/auth/verify-otp", descripcion: "Verificar OTP y crear cuenta" }
- { metodo: POST, ruta: "/auth/login", descripcion: "Iniciar sesion" }
- { metodo: POST, ruta: "/auth/refresh", descripcion: "Renovar tokens" }
- { metodo: POST, ruta: "/auth/logout", descripcion: "Cerrar sesion" }
- nombre: users
ruta: "modules/users"
descripcion: "Gestion de usuarios y perfiles"
estado: implementado
prioridad: P0
dependencias: [auth]
archivos:
- users.controller.ts
- users.service.ts
- users.module.ts
- entities/user.entity.ts
- dto/create-user.dto.ts
- dto/update-user.dto.ts
endpoints:
- { metodo: GET, ruta: "/users/me", descripcion: "Obtener perfil actual" }
- { metodo: PATCH, ruta: "/users/me", descripcion: "Actualizar perfil" }
- { metodo: PATCH, ruta: "/users/me/fcm-token", descripcion: "Actualizar FCM token" }
- nombre: stores
ruta: "modules/stores"
descripcion: "Gestion de tiendas multi-tenant"
estado: implementado
prioridad: P0
dependencias: [auth, users]
archivos:
- stores.controller.ts
- stores.service.ts
- stores.module.ts
- entities/store.entity.ts
- entities/store-user.entity.ts
- dto/create-store.dto.ts
- dto/update-store.dto.ts
endpoints:
- { metodo: POST, ruta: "/stores", descripcion: "Crear tienda" }
- { metodo: GET, ruta: "/stores", descripcion: "Listar tiendas" }
- { metodo: GET, ruta: "/stores/:id", descripcion: "Obtener tienda" }
- { metodo: PATCH, ruta: "/stores/:id", descripcion: "Actualizar tienda" }
- { metodo: DELETE, ruta: "/stores/:id", descripcion: "Eliminar tienda" }
- nombre: videos
ruta: "modules/videos"
descripcion: "Upload y procesamiento de videos"
estado: implementado
prioridad: P0
dependencias: [auth, stores, credits, inventory, ia-provider]
archivos:
- videos.controller.ts
- videos.service.ts
- videos.module.ts
- entities/video.entity.ts
- dto/initiate-upload.dto.ts
- processors/video-processing.processor.ts
endpoints:
- { metodo: POST, ruta: "/stores/:storeId/videos/initiate", descripcion: "Iniciar upload" }
- { metodo: POST, ruta: "/stores/:storeId/videos/:videoId/confirm", descripcion: "Confirmar upload" }
- { metodo: GET, ruta: "/stores/:storeId/videos/:videoId/status", descripcion: "Estado de procesamiento" }
- { metodo: GET, ruta: "/stores/:storeId/videos/:videoId/result", descripcion: "Resultado procesado" }
- { metodo: GET, ruta: "/stores/:storeId/videos", descripcion: "Listar videos" }
- nombre: inventory
ruta: "modules/inventory"
descripcion: "Gestion de inventario"
estado: implementado
prioridad: P0
dependencias: [auth, stores]
archivos:
- inventory.controller.ts
- inventory.service.ts
- inventory.module.ts
- entities/inventory-item.entity.ts
- dto/update-inventory-item.dto.ts
endpoints:
- { metodo: GET, ruta: "/stores/:storeId/inventory", descripcion: "Listar inventario" }
- { metodo: GET, ruta: "/stores/:storeId/inventory/statistics", descripcion: "Estadisticas" }
- { metodo: GET, ruta: "/stores/:storeId/inventory/low-stock", descripcion: "Stock bajo" }
- { metodo: GET, ruta: "/stores/:storeId/inventory/categories", descripcion: "Categorias" }
- { metodo: GET, ruta: "/stores/:storeId/inventory/:itemId", descripcion: "Obtener item" }
- { metodo: PATCH, ruta: "/stores/:storeId/inventory/:itemId", descripcion: "Actualizar item" }
- { metodo: DELETE, ruta: "/stores/:storeId/inventory/:itemId", descripcion: "Eliminar item" }
- nombre: credits
ruta: "modules/credits"
descripcion: "Sistema de creditos"
estado: implementado
prioridad: P0
dependencias: [auth, users]
archivos:
- credits.controller.ts
- credits.service.ts
- credits.module.ts
- entities/credit-balance.entity.ts
- entities/credit-package.entity.ts
- entities/credit-transaction.entity.ts
endpoints:
- { metodo: GET, ruta: "/credits/balance", descripcion: "Obtener balance" }
- { metodo: GET, ruta: "/credits/transactions", descripcion: "Historial transacciones" }
- { metodo: GET, ruta: "/credits/packages", descripcion: "Paquetes disponibles" }
- nombre: payments
ruta: "modules/payments"
descripcion: "Procesamiento de pagos Stripe"
estado: implementado
prioridad: P0
dependencias: [auth, credits, notifications]
archivos:
- payments.controller.ts
- payments.service.ts
- payments.module.ts
- entities/payment.entity.ts
- dto/create-payment.dto.ts
endpoints:
- { metodo: POST, ruta: "/payments", descripcion: "Crear pago" }
- { metodo: GET, ruta: "/payments", descripcion: "Historial pagos" }
- { metodo: GET, ruta: "/payments/:paymentId", descripcion: "Detalle pago" }
- { metodo: POST, ruta: "/payments/webhook/stripe", descripcion: "Webhook Stripe", auth: false }
- nombre: referrals
ruta: "modules/referrals"
descripcion: "Sistema de referidos"
estado: implementado
prioridad: P1
dependencias: [auth, users, credits]
archivos:
- referrals.controller.ts
- referrals.service.ts
- referrals.module.ts
- entities/referral.entity.ts
endpoints:
- { metodo: GET, ruta: "/referrals/my-code", descripcion: "Codigo personal" }
- { metodo: GET, ruta: "/referrals/stats", descripcion: "Estadisticas" }
- { metodo: GET, ruta: "/referrals", descripcion: "Listar referidos" }
- { metodo: GET, ruta: "/referrals/validate", descripcion: "Validar codigo", auth: false }
- { metodo: POST, ruta: "/referrals/apply", descripcion: "Aplicar codigo" }
- nombre: notifications
ruta: "modules/notifications"
descripcion: "Notificaciones push FCM"
estado: implementado
prioridad: P1
dependencias: [auth, users]
archivos:
- notifications.controller.ts
- notifications.service.ts
- notifications.module.ts
- entities/notification.entity.ts
endpoints:
- { metodo: GET, ruta: "/notifications", descripcion: "Listar notificaciones" }
- { metodo: GET, ruta: "/notifications/unread-count", descripcion: "Contar no leidas" }
- { metodo: PATCH, ruta: "/notifications/:id/read", descripcion: "Marcar leida" }
- { metodo: POST, ruta: "/notifications/mark-all-read", descripcion: "Marcar todas leidas" }
- { metodo: POST, ruta: "/notifications/register-token", descripcion: "Registrar FCM token" }
- nombre: ia-provider
ruta: "modules/ia-provider"
descripcion: "Abstraccion multi-proveedor IA (OpenAI/Claude)"
estado: implementado
prioridad: P0
dependencias: []
archivos:
- ia-provider.service.ts
- ia-provider.module.ts
endpoints: []
notas: "Servicio interno para procesamiento de videos"
- nombre: health
ruta: "modules/health"
descripcion: "Health checks"
estado: implementado
prioridad: P0
dependencias: []
archivos:
- health.controller.ts
endpoints:
- { metodo: GET, ruta: "/health", descripcion: "Health check", auth: false }
- { metodo: GET, ruta: "/health/ready", descripcion: "Readiness check", auth: false }
# ===========================================
# ENTIDADES
# ===========================================
entidades:
- nombre: User
archivo: "modules/users/entities/user.entity.ts"
tabla: users
- nombre: Otp
archivo: "modules/auth/entities/otp.entity.ts"
tabla: otps
- nombre: RefreshToken
archivo: "modules/auth/entities/refresh-token.entity.ts"
tabla: refresh_tokens
- nombre: Store
archivo: "modules/stores/entities/store.entity.ts"
tabla: stores
- nombre: StoreUser
archivo: "modules/stores/entities/store-user.entity.ts"
tabla: store_users
- nombre: Video
archivo: "modules/videos/entities/video.entity.ts"
tabla: videos
- nombre: InventoryItem
archivo: "modules/inventory/entities/inventory-item.entity.ts"
tabla: inventory_items
- nombre: CreditBalance
archivo: "modules/credits/entities/credit-balance.entity.ts"
tabla: credit_balances
- nombre: CreditPackage
archivo: "modules/credits/entities/credit-package.entity.ts"
tabla: credit_packages
- nombre: CreditTransaction
archivo: "modules/credits/entities/credit-transaction.entity.ts"
tabla: credit_transactions
- nombre: Payment
archivo: "modules/payments/entities/payment.entity.ts"
tabla: payments
- nombre: Referral
archivo: "modules/referrals/entities/referral.entity.ts"
tabla: referrals
- nombre: Notification
archivo: "modules/notifications/entities/notification.entity.ts"
tabla: notifications
# ===========================================
# SHARED
# ===========================================
shared:
guards:
- nombre: JwtAuthGuard
archivo: "modules/auth/guards/jwt-auth.guard.ts"
estado: implementado
strategies:
- nombre: JwtStrategy
archivo: "modules/auth/strategies/jwt.strategy.ts"
estado: implementado
interfaces:
- nombre: AuthenticatedRequest
archivo: "common/interfaces/authenticated-request.interface.ts"
estado: implementado
config:
- nombre: DatabaseConfig
archivo: "config/database.config.ts"
estado: implementado
- nombre: TypeOrmConfig
archivo: "config/typeorm.config.ts"
estado: implementado
# ===========================================
# INTEGRACIONES
# ===========================================
integraciones:
- nombre: Stripe
tipo: pagos
estado: implementado
archivos: ["modules/payments/payments.service.ts"]
- nombre: Firebase FCM
tipo: notificaciones
estado: implementado
archivos: ["modules/notifications/notifications.service.ts"]
- nombre: S3/MinIO
tipo: almacenamiento
estado: implementado
archivos: ["modules/videos/videos.service.ts"]
- nombre: OpenAI GPT-4o Vision
tipo: ia
estado: implementado
archivos: ["modules/ia-provider/ia-provider.service.ts"]
- nombre: Anthropic Claude Vision
tipo: ia
estado: implementado
archivos: ["modules/ia-provider/ia-provider.service.ts"]
- nombre: Bull Queue (Redis)
tipo: cola
estado: implementado
archivos: ["modules/videos/processors/video-processing.processor.ts"]
# ===========================================
# TESTS
# ===========================================
tests:
e2e:
total: 53
pasando: 53
fallando: 0
archivos:
- test/health.e2e-spec.ts (2 tests)
- test/auth.e2e-spec.ts (13 tests)
- test/users.e2e-spec.ts (6 tests)
- test/stores.e2e-spec.ts (12 tests)
- test/credits.e2e-spec.ts (7 tests)
- test/inventory.e2e-spec.ts (13 tests)
configuracion:
archivo: "test/jest-e2e.json"
setup: "test/setup.ts"
utils: "test/utils/"
fixtures: "test/utils/test-fixtures.ts"
# ===========================================
# CHANGELOG
# ===========================================
changelog:
- version: "1.0.0"
fecha: 2026-01-10
cambios:
- "Creacion inicial del inventario backend"
- "Definicion de 11 modulos planificados"
- "Identificacion de ~60 endpoints"
- version: "2.0.0"
fecha: 2026-01-10
cambios:
- "Actualizacion completa con estado real implementado"
- "11 modulos implementados al 100%"
- "45 endpoints funcionando"
- "13 entidades TypeORM"
- "53 tests E2E pasando"
- "Integraciones: Stripe, FCM, S3, OpenAI, Claude, Bull"