Sistema backend desarrollado con Next.js 15, TypeScript, Prisma ORM y PostgreSQL siguiendo los principios de Clean Architecture.
- Framework: Next.js 15.x (App Router)
- Lenguaje: TypeScript 5.x (strict mode)
- ORM: Prisma 5.x
- Base de Datos: PostgreSQL 16.x
- Validación: Zod 3.x
- Email: Resend
- WhatsApp: Ultramsg
- IDs: ULID (identificadores únicos lexicográficamente ordenables)
Este proyecto implementa Clean Architecture con separación clara de responsabilidades:
app/api/ → API Routes (Controllers)
lib/services/ → Business Logic Layer
lib/repositories/ → Data Access Layer
lib/validations/ → Zod Schemas
lib/db/ → Prisma Client
types/ → TypeScript Types
API Route (Controller)
↓
Service (Business Logic)
↓
Repository (Data Access)
↓
Prisma Client
↓
PostgreSQL Database
Antes de comenzar, asegúrate de tener instalado:
- Node.js 20 LTS o superior (descargar)
- npm 10.0.0 o superior (incluido con Node.js)
- PostgreSQL 16.x o una cuenta en Supabase (recomendado)
- Git para control de versiones
-
Resend (envío de emails)
- Crear cuenta: https://resend.com
- Obtener API Key en dashboard
- Email
onboarding@resend.devdisponible para desarrollo
-
Ultramsg (envío de WhatsApp)
- Crear cuenta: https://ultramsg.com
- Obtener API Key e Instance ID
- Conectar número de WhatsApp
git clone <url-del-repositorio>
cd sistema-cotizacion-transporte-b2bnpm installEsto instalará todas las dependencias listadas en package.json:
- Next.js, React, TypeScript
- Prisma (ORM)
- Zod (validación)
- Resend (emails)
- ULID (IDs únicos)
Copia el archivo de ejemplo y completa con tus valores reales:
Windows:
copy .env.example .envLinux/Mac:
cp .env.example .envEdita .env y completa las siguientes variables:
# Base de Datos PostgreSQL
DATABASE_URL=postgresql://user:password@localhost:5432/cotizaciones_db
# Resend (Emails)
RESEND_API_KEY=re_xxxxx
EMAIL_FROM=onboarding@resend.dev
EMAIL_ADMIN=tu-email@empresa.com
# Ultramsg (WhatsApp)
ULTRAMSG_API_KEY=xxxxx
ULTRAMSG_INSTANCE_ID=instance12345
WHATSAPP_ADMIN_NUMBER=573001234567
# App Config
NODE_ENV=development
NEXT_PUBLIC_APP_URL=http://localhost:3000Si usas PostgreSQL instalado localmente:
DATABASE_URL=postgresql://postgres:password@localhost:5432/cotizaciones_dbCrear base de datos:
createdb cotizaciones_db- Crear proyecto en https://supabase.com
- Ir a Settings → Database
- Copiar Connection string en modo URI
- Reemplazar
[YOUR-PASSWORD]con tu password real
DATABASE_URL=postgresql://postgres:[PASSWORD]@db.[PROJECT_REF].supabase.co:5432/postgresGenerar el cliente de Prisma:
npm run db:generateEsto generará los tipos TypeScript basados en prisma/schema.prisma.
Las migraciones se ejecutarán en el PROMPT 2: MODELO DE DATOS.
Ejecuta estos comandos para verificar que todo está correctamente configurado:
npm run type-check✅ Debe completarse sin errores.
npm run dev✅ Servidor debe iniciar en http://localhost:3000
npx prisma db pull✅ Prisma debe conectar correctamente (incluso si no hay tablas aún).
npm run db:studio✅ Abre interfaz visual de base de datos en http://localhost:5555
proyecto/
│
├── app/ # Next.js App Router
│ ├── api/ # API Routes (REST endpoints)
│ │ ├── solicitudes/
│ │ │ ├── route.ts # POST /api/solicitudes (crear)
│ │ │ └── [id]/
│ │ │ └── route.ts # GET, PATCH /api/solicitudes/:id
│ │ └── health/
│ │ └── route.ts # GET /api/health (health check)
│ └── layout.tsx # Layout principal
│
├── lib/ # Lógica de negocio y utilidades
│ ├── db/
│ │ └── prisma.ts # Cliente Prisma singleton
│ ├── repositories/ # Data Access Layer (se implementará en PROMPT 3)
│ ├── services/ # Business Logic Layer (se implementará en PROMPT 4)
│ ├── validations/ # Zod schemas (se implementará en PROMPT 4)
│ └── utils/ # Funciones utilitarias
│
├── types/ # Definiciones TypeScript globales
│ └── index.ts
│
├── prisma/
│ └── schema.prisma # Schema de base de datos (se completará en PROMPT 2)
│
├── .env # Variables de entorno (NO commitear)
├── .env.example # Template de variables de entorno
├── .gitignore # Archivos ignorados por Git
├── package.json # Dependencias y scripts
├── tsconfig.json # Configuración TypeScript
└── README.md # Este archivo
npm run dev # Iniciar servidor desarrollo (localhost:3000)
npm run build # Compilar proyecto para producción
npm run start # Iniciar servidor de producción
npm run lint # Ejecutar ESLint
npm run type-check # Validar tipos TypeScript sin compilarnpm run db:generate # Generar cliente Prisma (después de cambios en schema)
npm run db:push # Sincronizar schema con BD (sin migraciones)
npm run db:migrate # Crear y aplicar migración
npm run db:studio # Abrir Prisma Studio (GUI para BD)Este es el PROMPT 1 de una serie de 6 prompts para construir el backend completo.
✅ COMPLETADO: Setup del proyecto
⬜ SIGUIENTE: PROMPT 2 - Modelo de Datos y Prisma Schema
- ✅ Setup Proyecto (este prompt) → Infraestructura base
- ⬜ Modelo de Datos → Definir schema Prisma
- ⬜ Capa Repositorio → Data Access Layer
- ⬜ Capa Servicios → Business Logic
- ⬜ Integraciones Externas → Email y WhatsApp
- ⬜ Capa API → REST Endpoints
Consulta prompts/BACK_README.md para más detalles.
Causa: Problema con path aliases de TypeScript.
Solución: Verifica que tsconfig.json tiene:
{
"compilerOptions": {
"paths": {
"@/*": ["./*"]
}
}
}Causa: Cliente Prisma no se generó después de cambios en schema.
Solución:
npm run db:generateCausa: DATABASE_URL incorrecta o PostgreSQL no está ejecutándose.
Solución:
- Verifica
DATABASE_URLen.env - Si es local, inicia PostgreSQL:
# Linux sudo systemctl start postgresql # Mac brew services start postgresql # Windows # Usar pgAdmin o Services
- Si es Supabase, verifica project status en dashboard
Causa: Otro proceso usa el puerto 3000.
Solución:
# Usar otro puerto
PORT=3001 npm run dev
# O matar proceso en puerto 3000 (Linux/Mac)
lsof -ti:3000 | xargs kill -9
# Windows
netstat -ano | findstr :3000
taskkill /PID [PID] /Fdefinicion-FuncionalyTecnica/DEFINICION_FUNCIONAL.md- Requerimientos de negociodefinicion-FuncionalyTecnica/DEFINICION_TECNICA.md- Especificaciones técnicasprompts/BACK_README.md- Guía completa de implementación backend
Este proyecto sigue los principios de:
- ✅ Clean Architecture
- ✅ SOLID Principles
- ✅ TypeScript Strict Mode
- ✅ JSDoc para documentación
- ✅ Repository Pattern
- ✅ Service Layer Pattern
[Especificar licencia]
Desarrollado con: Next.js 15 + TypeScript + Prisma + PostgreSQL
¿Dudas o problemas? Consulta la documentación en prompts/BACK_README.md