Template base para proyectos SaaS multi-tenant. Estructura inicial: - apps/backend (NestJS API) - apps/frontend (React/Vite) - apps/database (PostgreSQL DDL) - docs/ (Documentación) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
91 lines
4.0 KiB
JavaScript
91 lines
4.0 KiB
JavaScript
"use strict";
|
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
if (k2 === undefined) k2 = k;
|
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
}
|
|
Object.defineProperty(o, k2, desc);
|
|
}) : (function(o, m, k, k2) {
|
|
if (k2 === undefined) k2 = k;
|
|
o[k2] = m[k];
|
|
}));
|
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
}) : function(o, v) {
|
|
o["default"] = v;
|
|
});
|
|
var __importStar = (this && this.__importStar) || (function () {
|
|
var ownKeys = function(o) {
|
|
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
var ar = [];
|
|
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
return ar;
|
|
};
|
|
return ownKeys(o);
|
|
};
|
|
return function (mod) {
|
|
if (mod && mod.__esModule) return mod;
|
|
var result = {};
|
|
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
})();
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const core_1 = require("@nestjs/core");
|
|
const common_1 = require("@nestjs/common");
|
|
const swagger_1 = require("@nestjs/swagger");
|
|
const config_1 = require("@nestjs/config");
|
|
const helmet_1 = __importDefault(require("helmet"));
|
|
const compression = __importStar(require("compression"));
|
|
const app_module_1 = require("./app.module");
|
|
async function bootstrap() {
|
|
const app = await core_1.NestFactory.create(app_module_1.AppModule);
|
|
const configService = app.get(config_1.ConfigService);
|
|
app.use((0, helmet_1.default)());
|
|
app.use(compression());
|
|
app.enableCors({
|
|
origin: configService.get('CORS_ORIGIN') || 'http://localhost:3000',
|
|
credentials: true,
|
|
});
|
|
app.setGlobalPrefix('api/v1');
|
|
app.useGlobalPipes(new common_1.ValidationPipe({
|
|
whitelist: true,
|
|
forbidNonWhitelisted: true,
|
|
transform: true,
|
|
transformOptions: {
|
|
enableImplicitConversion: true,
|
|
},
|
|
}));
|
|
if (configService.get('NODE_ENV') !== 'production') {
|
|
const config = new swagger_1.DocumentBuilder()
|
|
.setTitle('Template SaaS API')
|
|
.setDescription('Multi-tenant SaaS Platform API')
|
|
.setVersion('1.0')
|
|
.addBearerAuth()
|
|
.addTag('auth', 'Authentication endpoints')
|
|
.addTag('tenants', 'Tenant management')
|
|
.addTag('users', 'User management')
|
|
.addTag('billing', 'Billing and subscriptions')
|
|
.build();
|
|
const document = swagger_1.SwaggerModule.createDocument(app, config);
|
|
swagger_1.SwaggerModule.setup('api/docs', app, document);
|
|
}
|
|
const port = configService.get('PORT') || 3001;
|
|
await app.listen(port);
|
|
console.log(`
|
|
╔════════════════════════════════════════════════╗
|
|
║ Template SaaS Backend ║
|
|
╠════════════════════════════════════════════════╣
|
|
║ Server running on: http://localhost:${port} ║
|
|
║ API Docs: http://localhost:${port}/api/docs ║
|
|
║ Environment: ${configService.get('NODE_ENV') || 'development'} ║
|
|
╚════════════════════════════════════════════════╝
|
|
`);
|
|
}
|
|
bootstrap();
|
|
//# sourceMappingURL=main.js.map
|