feat(m15): full test completion + quality gate + validation fixes
- Add E2E notifications.spec (member-added notification -> list -> mark read) and activity-log.spec (board_posted + todo_created recorded) - Set Playwright workers=1 for deterministic full-suite runs (SSE test under parallel load); full E2E suite (18 tests / 13 specs incl. 12 mandated scenarios) green - Quality gate: 251 unit/integration tests, lint clean, typecheck clean, build succeeds, coverage 91.13% Repository/Service (>=80%) - Validation fixes (mandatory): SearchService now searches ALL items (large pageSize) instead of first page only; MeetingService. checkScheduleConflicts now requires membership (actorId) to prevent non-member info enumeration
This commit is contained in:
@ -75,6 +75,7 @@ export class MeetingService {
|
||||
this.requireMember(projectId, actorId);
|
||||
this.validate(input);
|
||||
const conflicts = this.checkScheduleConflicts(
|
||||
actorId,
|
||||
projectId,
|
||||
input.memberIds,
|
||||
input.startAt,
|
||||
@ -175,12 +176,14 @@ export class MeetingService {
|
||||
* 重複は警告(作成ブロックしない)。時間重複 = NOT(existing.end <= new.start OR existing.start >= new.end)
|
||||
*/
|
||||
checkScheduleConflicts(
|
||||
actorId: number,
|
||||
projectId: number,
|
||||
memberIds: number[],
|
||||
startAt: string,
|
||||
endAt: string,
|
||||
excludeMeetingId?: number
|
||||
): ScheduleConflict[] {
|
||||
this.requireMember(projectId, actorId);
|
||||
const conflicts: ScheduleConflict[] = [];
|
||||
const newStart = new Date(startAt).getTime();
|
||||
const newEnd = new Date(endAt).getTime();
|
||||
|
||||
Reference in New Issue
Block a user