diff --git a/apps/api/src/app.module.ts b/apps/api/src/app.module.ts index 5f7a35b..169cfa7 100644 --- a/apps/api/src/app.module.ts +++ b/apps/api/src/app.module.ts @@ -26,6 +26,7 @@ import { StatisticsModule } from './modules/statistics/statistics.module'; import { UploadsModule } from './modules/uploads/uploads.module'; import { EventsModule } from './modules/events/events.module'; import { HealthController } from './health.controller'; +import { RootController } from './root.controller'; import { ApiKeysModule } from './modules/api-keys/api-keys.module'; import { AIModule } from './modules/ai/ai.module'; import { SettingsModule } from './modules/settings/settings.module'; @@ -97,7 +98,7 @@ import { WebSocketModule } from './modules/websocket/websocket.module'; BulkModule, // Bulk messaging with variables WebSocketModule, // Real-time event subscriptions ], - controllers: [HealthController], + controllers: [RootController, HealthController], providers: [ { provide: APP_GUARD, diff --git a/apps/api/src/main.ts b/apps/api/src/main.ts index ce355e9..7c33bf5 100644 --- a/apps/api/src/main.ts +++ b/apps/api/src/main.ts @@ -3,7 +3,7 @@ import { NestFactory } from '@nestjs/core'; import { FastifyAdapter, NestFastifyApplication } from '@nestjs/platform-fastify'; -import { ValidationPipe } from '@nestjs/common'; +import { RequestMethod, ValidationPipe } from '@nestjs/common'; import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; import { IoAdapter } from '@nestjs/platform-socket.io'; import { AppModule } from './app.module'; @@ -40,7 +40,9 @@ async function bootstrap() { // Global prefix for REST API console.log('🔧 [3/7] Setting global prefix...'); - app.setGlobalPrefix('api/v1'); + app.setGlobalPrefix('api/v1', { + exclude: [{ path: '/', method: RequestMethod.GET }], + }); console.log('✅ [3/7] Global prefix set'); // CORS diff --git a/apps/api/src/modules/accounts/accounts.service.ts b/apps/api/src/modules/accounts/accounts.service.ts index 5c94d53..769d801 100644 --- a/apps/api/src/modules/accounts/accounts.service.ts +++ b/apps/api/src/modules/accounts/accounts.service.ts @@ -27,7 +27,7 @@ export class AccountsService { const workspaceIds = user.organization?.workspaces?.map(w => w.id) || []; - const accounts = await prisma.account.findMany({ + let accounts = await prisma.account.findMany({ where: { workspaceId: { in: workspaceIds }, status: 'ACTIVE', @@ -38,6 +38,21 @@ export class AccountsService { orderBy: { createdAt: 'desc' }, }); + if (accounts.length === 0 && workspaceIds.length > 0) { + const account = await prisma.account.create({ + data: { + workspaceId: workspaceIds[0], + name: 'Default Account', + description: 'Automatically created for WhatsApp profiles', + settings: {}, + }, + include: { + workspace: true, + }, + }); + accounts = [account]; + } + return accounts; } diff --git a/apps/api/src/modules/auth/auth.service.ts b/apps/api/src/modules/auth/auth.service.ts index ad48310..824650a 100644 --- a/apps/api/src/modules/auth/auth.service.ts +++ b/apps/api/src/modules/auth/auth.service.ts @@ -45,6 +45,15 @@ export class AuthService { }, }); + await prisma.account.create({ + data: { + workspaceId: workspace.id, + name: 'Default Account', + description: 'Automatically created for WhatsApp profiles', + settings: {}, + }, + }); + // Create user const passwordHash = await this.hashPassword(dto.password); const user = await prisma.user.create({ diff --git a/apps/api/src/root.controller.ts b/apps/api/src/root.controller.ts new file mode 100644 index 0000000..234f1f3 --- /dev/null +++ b/apps/api/src/root.controller.ts @@ -0,0 +1,17 @@ +import { Controller, Get } from '@nestjs/common'; +import { ApiExcludeController } from '@nestjs/swagger'; + +@ApiExcludeController() +@Controller() +export class RootController { + @Get() + root() { + return { + service: 'multiwa-gateway-api', + status: 'ok', + docs: '/api/docs', + api: '/api/v1', + health: '/api/v1/health', + }; + } +}