Adds idea submission capability gated by a per-tenant feature flag. Super admins can enable/disable ideation for specific tenants via the admin tenant detail drawer. Users see a lightbulb icon in the header when enabled, opening a modal to submit ideas (title + description). Ideas are stored in shared schema for cross-tenant backlog querying. - Database: shared.ideas table (018-ideas.sql migration) - Backend: Ideas NestJS module (entity, service, controller) - Admin API: GET /admin/ideas, PUT /admin/ideas/:id/status, PUT /admin/organizations/:id/settings - Frontend: IdeaModal component, lightbulb ActionIcon in header - Admin UI: Feature Toggles card with ideation Switch in drawer Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
57 lines
1.8 KiB
TypeScript
57 lines
1.8 KiB
TypeScript
import { Module } from '@nestjs/common';
|
|
import { JwtModule } from '@nestjs/jwt';
|
|
import { PassportModule } from '@nestjs/passport';
|
|
import { ConfigModule, ConfigService } from '@nestjs/config';
|
|
import { AuthController } from './auth.controller';
|
|
import { AdminController } from './admin.controller';
|
|
import { MfaController } from './mfa.controller';
|
|
import { SsoController } from './sso.controller';
|
|
import { PasskeyController } from './passkey.controller';
|
|
import { AuthService } from './auth.service';
|
|
import { AdminAnalyticsService } from './admin-analytics.service';
|
|
import { RefreshTokenService } from './refresh-token.service';
|
|
import { MfaService } from './mfa.service';
|
|
import { SsoService } from './sso.service';
|
|
import { PasskeyService } from './passkey.service';
|
|
import { JwtStrategy } from './strategies/jwt.strategy';
|
|
import { LocalStrategy } from './strategies/local.strategy';
|
|
import { UsersModule } from '../users/users.module';
|
|
import { OrganizationsModule } from '../organizations/organizations.module';
|
|
import { IdeasModule } from '../ideas/ideas.module';
|
|
|
|
@Module({
|
|
imports: [
|
|
UsersModule,
|
|
OrganizationsModule,
|
|
IdeasModule,
|
|
PassportModule,
|
|
JwtModule.registerAsync({
|
|
imports: [ConfigModule],
|
|
inject: [ConfigService],
|
|
useFactory: (configService: ConfigService) => ({
|
|
secret: configService.get<string>('JWT_SECRET'),
|
|
signOptions: { expiresIn: '1h' },
|
|
}),
|
|
}),
|
|
],
|
|
controllers: [
|
|
AuthController,
|
|
AdminController,
|
|
MfaController,
|
|
SsoController,
|
|
PasskeyController,
|
|
],
|
|
providers: [
|
|
AuthService,
|
|
AdminAnalyticsService,
|
|
RefreshTokenService,
|
|
MfaService,
|
|
SsoService,
|
|
PasskeyService,
|
|
JwtStrategy,
|
|
LocalStrategy,
|
|
],
|
|
exports: [AuthService, RefreshTokenService, JwtModule],
|
|
})
|
|
export class AuthModule {}
|