/** * Phase 10 (TASK-0106..0109) — the forms module. * * Providers: * FormsService form CRUD + publish gate (database-scoped, EDIT/VIEW) * QuestionsService per-question ops (shared validation on every write) * PublicFormsService the public surface: payload + submit pipeline + * anonymous form-attributed file sessions * SubmissionsService responses: joined list (IP masking), cascade delete, * export stub * FormRateLimiter the 5/min per-IP per-form sliding window (Redis) * * `NotificationsModule` is imported for the submit pipeline's owner * notification (Phase-7 service) — the module boundary keeps the * notification internals out of this module's own provider list. */ import { Module } from "@nestjs/common"; import { FormsController } from "./forms.controller.js"; import { PublicFormsController } from "./public-forms.controller.js"; import { SubmissionsController } from "./submissions.controller.js"; import { DebugController } from "./debug.controller.js"; import { FormsService } from "./forms.service.js"; import { QuestionsService } from "./questions.service.js"; import { PublicFormsService } from "./public-forms.service.js"; import { SubmissionsService } from "./submissions.service.js"; import { FormRateLimiter } from "./rate-limit.js"; import { NotificationsModule } from "../notifications/notifications.module.js"; @Module({ imports: [NotificationsModule], controllers: [FormsController, PublicFormsController, SubmissionsController, DebugController], providers: [FormsService, QuestionsService, PublicFormsService, SubmissionsService, FormRateLimiter], exports: [FormsService, QuestionsService, PublicFormsService, SubmissionsService] }) export class FormsModule {}