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>
28 lines
869 B
TypeScript
28 lines
869 B
TypeScript
import { Controller, Get, Post, Body, Req, UseGuards } from '@nestjs/common';
|
|
import { ApiTags, ApiBearerAuth } from '@nestjs/swagger';
|
|
import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
|
|
import { IdeasService } from './ideas.service';
|
|
import { CreateIdeaDto } from './dto/create-idea.dto';
|
|
|
|
@ApiTags('ideas')
|
|
@Controller('ideas')
|
|
@ApiBearerAuth()
|
|
@UseGuards(JwtAuthGuard)
|
|
export class IdeasController {
|
|
constructor(private ideasService: IdeasService) {}
|
|
|
|
@Post()
|
|
async create(@Req() req: any, @Body() dto: CreateIdeaDto) {
|
|
const orgId = req.user.orgId;
|
|
const userId = req.user.userId || req.user.sub;
|
|
const idea = await this.ideasService.create(orgId, userId, dto);
|
|
return { success: true, idea };
|
|
}
|
|
|
|
@Get()
|
|
async findByOrg(@Req() req: any) {
|
|
const orgId = req.user.orgId;
|
|
return this.ideasService.findByOrg(orgId);
|
|
}
|
|
}
|