Some checks failed
Build / Build Backend (push) Has been cancelled
Build / Build Mobile (TypeScript Check) (push) Has been cancelled
Lint / Lint Backend (push) Has been cancelled
Lint / Lint Mobile (push) Has been cancelled
Test / Backend E2E Tests (push) Has been cancelled
Test / Mobile Unit Tests (push) Has been cancelled
Build / Build Docker Image (push) Has been cancelled
- Add exports module with PDF/CSV/Excel generation - Add reports module for inventory analytics - Add POS integrations module - Add database migrations for exports, movements and integrations - Add GitHub Actions CI/CD workflow with Docker support - Add mobile export and reports screens with tests - Update epic documentation with traceability - Add deployment and security guides Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
486 lines
17 KiB
YAML
486 lines
17 KiB
YAML
# MiInventario - Backend Inventory
|
|
# Version: 3.0.0
|
|
# Actualizado: 2026-01-13
|
|
|
|
metadata:
|
|
proyecto: miinventario
|
|
componente: backend
|
|
framework: NestJS
|
|
lenguaje: TypeScript
|
|
version_node: "18"
|
|
version: "3.0.0"
|
|
estado: completado
|
|
creado: 2026-01-10
|
|
actualizado: 2026-01-13
|
|
actualizado_por: "Agente Arquitecto de Documentación"
|
|
|
|
# ===========================================
|
|
# RESUMEN
|
|
# ===========================================
|
|
resumen:
|
|
modulos_implementados: 14
|
|
controllers_implementados: 14
|
|
services_implementados: 16
|
|
endpoints_implementados: 61
|
|
entidades_implementadas: 21
|
|
dtos_implementados: 12
|
|
guards_implementados: 2
|
|
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: 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 }
|
|
|
|
- nombre: admin
|
|
ruta: "modules/admin"
|
|
descripcion: "Panel de administracion: dashboard, moderacion, paquetes, promociones, proveedores, audit-log"
|
|
estado: implementado
|
|
prioridad: P0
|
|
dependencias: [auth, users]
|
|
archivos:
|
|
- admin.controller.ts
|
|
- admin.module.ts
|
|
- services/dashboard.service.ts
|
|
- services/moderation.service.ts
|
|
- services/packages.service.ts
|
|
- services/promotions.service.ts
|
|
- services/providers.service.ts
|
|
- services/audit-log.service.ts
|
|
endpoints:
|
|
- { metodo: GET, ruta: "/admin/dashboard", descripcion: "Dashboard principal" }
|
|
- { metodo: GET, ruta: "/admin/dashboard/stats", descripcion: "Estadisticas del dashboard" }
|
|
- { metodo: GET, ruta: "/admin/moderation", descripcion: "Lista de moderacion" }
|
|
- { metodo: PATCH, ruta: "/admin/moderation/:id", descripcion: "Actualizar estado moderacion" }
|
|
- { metodo: GET, ruta: "/admin/packages", descripcion: "Listar paquetes" }
|
|
- { metodo: POST, ruta: "/admin/packages", descripcion: "Crear paquete" }
|
|
- { metodo: PATCH, ruta: "/admin/packages/:id", descripcion: "Actualizar paquete" }
|
|
- { metodo: DELETE, ruta: "/admin/packages/:id", descripcion: "Eliminar paquete" }
|
|
- { metodo: GET, ruta: "/admin/promotions", descripcion: "Listar promociones" }
|
|
- { metodo: POST, ruta: "/admin/promotions", descripcion: "Crear promocion" }
|
|
- { metodo: PATCH, ruta: "/admin/promotions/:id", descripcion: "Actualizar promocion" }
|
|
- { metodo: DELETE, ruta: "/admin/promotions/:id", descripcion: "Eliminar promocion" }
|
|
- { metodo: GET, ruta: "/admin/providers", descripcion: "Listar proveedores" }
|
|
- { metodo: PATCH, ruta: "/admin/providers/:id", descripcion: "Actualizar proveedor" }
|
|
- { metodo: GET, ruta: "/admin/audit-log", descripcion: "Ver audit log" }
|
|
- { metodo: GET, ruta: "/admin/audit-log/:id", descripcion: "Detalle audit log" }
|
|
- { metodo: GET, ruta: "/admin/users", descripcion: "Listar usuarios admin" }
|
|
|
|
- nombre: feedback
|
|
ruta: "modules/feedback"
|
|
descripcion: "Sistema de feedback: correcciones, ground truth, envio de productos"
|
|
estado: implementado
|
|
prioridad: P1
|
|
dependencias: [auth, users, stores]
|
|
archivos:
|
|
- feedback.controller.ts
|
|
- feedback.service.ts
|
|
- feedback.module.ts
|
|
- entities/correction.entity.ts
|
|
- entities/ground-truth.entity.ts
|
|
- entities/product-submission.entity.ts
|
|
endpoints:
|
|
- { metodo: GET, ruta: "/feedback", descripcion: "Listar feedback" }
|
|
- { metodo: POST, ruta: "/feedback", descripcion: "Enviar feedback" }
|
|
- { metodo: GET, ruta: "/feedback/:id", descripcion: "Obtener feedback" }
|
|
- { metodo: POST, ruta: "/feedback/corrections", descripcion: "Enviar correccion" }
|
|
- { metodo: POST, ruta: "/feedback/ground-truth", descripcion: "Enviar ground truth" }
|
|
- { metodo: POST, ruta: "/feedback/product-submission", descripcion: "Enviar producto" }
|
|
|
|
- nombre: validations
|
|
ruta: "modules/validations"
|
|
descripcion: "Motor de validaciones y requests de validacion"
|
|
estado: implementado
|
|
prioridad: P1
|
|
dependencias: [auth, stores, inventory]
|
|
archivos:
|
|
- validations.controller.ts
|
|
- validations.service.ts
|
|
- validation-engine.service.ts
|
|
- validations.module.ts
|
|
- entities/validation-request.entity.ts
|
|
- entities/validation-response.entity.ts
|
|
endpoints:
|
|
- { metodo: POST, ruta: "/validations", descripcion: "Crear validacion" }
|
|
- { metodo: GET, ruta: "/validations/:id", descripcion: "Obtener validacion" }
|
|
- { metodo: GET, ruta: "/validations/:id/response", descripcion: "Obtener respuesta validacion" }
|
|
- { metodo: GET, ruta: "/stores/:storeId/validations", descripcion: "Listar validaciones de tienda" }
|
|
|
|
# ===========================================
|
|
# 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: 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
|
|
|
|
- nombre: Correction
|
|
archivo: "modules/feedback/entities/correction.entity.ts"
|
|
tabla: corrections
|
|
|
|
- nombre: GroundTruth
|
|
archivo: "modules/feedback/entities/ground-truth.entity.ts"
|
|
tabla: ground_truths
|
|
|
|
- nombre: ProductSubmission
|
|
archivo: "modules/feedback/entities/product-submission.entity.ts"
|
|
tabla: product_submissions
|
|
|
|
- nombre: ValidationRequest
|
|
archivo: "modules/validations/entities/validation-request.entity.ts"
|
|
tabla: validation_requests
|
|
|
|
- nombre: ValidationResponse
|
|
archivo: "modules/validations/entities/validation-response.entity.ts"
|
|
tabla: validation_responses
|
|
|
|
# ===========================================
|
|
# SHARED
|
|
# ===========================================
|
|
shared:
|
|
guards:
|
|
- nombre: JwtAuthGuard
|
|
archivo: "modules/auth/guards/jwt-auth.guard.ts"
|
|
estado: implementado
|
|
|
|
- nombre: RolesGuard
|
|
archivo: "src/common/guards/roles.guard.ts"
|
|
estado: implementado
|
|
|
|
decorators:
|
|
- nombre: Roles
|
|
archivo: "src/common/decorators/roles.decorator.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"
|
|
|
|
- version: "3.0.0"
|
|
fecha: 2026-01-13
|
|
cambios:
|
|
- "Eliminado modulo fantasma 'videos' que no existia en el codigo"
|
|
- "Agregado modulo 'admin' con 17 endpoints (dashboard, moderation, packages, promotions, providers, audit-log)"
|
|
- "Agregado modulo 'feedback' con 6 endpoints y entidades: Correction, GroundTruth, ProductSubmission"
|
|
- "Agregado modulo 'validations' con 4 endpoints y entidades: ValidationRequest, ValidationResponse"
|
|
- "Agregado RolesGuard y Roles decorator en common/"
|
|
- "Total: 14 modulos, 61 endpoints, 21 entidades"
|
|
- "Actualizado por: Agente Arquitecto de Documentacion"
|