feat(content): eager invalidation and optimistic lock for cqrs

M4: ADR-038 Eager Invalidation + ADR-039 Optimistic Lock

- EagerInvalidationService: Redis DEL after MySQL commit

- Cache key conventions for textbook/chapter/kp/question

- Version header check (If-Match/X-Expected-Version) on write endpoints

- 409 Conflict on version mismatch

- All write endpoints return updatedAt timestamp
This commit is contained in:
SpecialX
2026-07-15 01:28:20 +08:00
parent 47a062606f
commit a75527be80
26 changed files with 673 additions and 72 deletions

View File

@@ -3,9 +3,10 @@ import { QuestionsController } from "./questions.controller.js";
import { QuestionsService } from "./questions.service.js";
import { QuestionsRepository } from "./questions.repository.js";
import { OutboxModule } from "../shared/outbox/outbox.module.js";
import { CacheModule } from "../shared/cache/cache.module.js";
@Module({
imports: [OutboxModule],
imports: [OutboxModule, CacheModule],
controllers: [QuestionsController],
providers: [QuestionsService, QuestionsRepository],
exports: [QuestionsService, QuestionsRepository],