feat(m6): board with threads/comments, markdown, tests, e2e

- BoardRepository (thread/comment CRUD, soft-delete, search, pagination,
  pinned-first ordering) + BoardService (membership permission,
  author/admin edit/delete, comment->board_commented notification,
  board_posted/comment_added activity logs, category validation)
- APIs: threads list/create/detail/edit/delete, comments create/edit/delete
- MarkdownBody (react-markdown + remark-gfm + rehype-sanitize),
  ThreadForm, CommentForm, board list + thread detail screens, ProjectNav link
- Unit tests (BoardRepository, BoardService) + e2e board.spec
This commit is contained in:
Ken Yasue
2026-06-25 01:28:08 +02:00
parent ac598a50f2
commit 2017585f84
16 changed files with 1448 additions and 1 deletions

View File

@ -7,6 +7,8 @@ import { UserRepository } from '@/repositories/UserRepository';
import { ProjectService } from '@/services/ProjectService';
import { NotificationService } from '@/services/NotificationService';
import { ActivityLogService } from '@/services/ActivityLogService';
import { BoardService } from '@/services/BoardService';
import { BoardRepository } from '@/repositories/BoardRepository';
/**
* Route Handler用に各Repository/Serviceを構築するファクトリ。
@ -30,6 +32,16 @@ export function createActivityLogService(): ActivityLogService {
return new ActivityLogService(new ActivityLogRepository(getDb()));
}
export function createBoardService(): BoardService {
const db = getDb();
return new BoardService(
new BoardRepository(db),
new ProjectMemberRepository(db),
new NotificationService(new NotificationRepository(db)),
new ActivityLogService(new ActivityLogRepository(db))
);
}
export function createUserRepository(): UserRepository {
return new UserRepository(getDb());
}