perf(access): TTL-кэш getAccessibleTaskIds с точечной инвалидацией
Шаг 0.12 плана production-готовности: - accessibleTasksCache (45с) per userId:orgId внутри storage-метода - инвалидация в storage-слое: роли, делегирования, form access, assignees, createTask/updateTask, appRole пользователя - 9 новых юнит-тестов (65/65 зелёные)
This commit is contained in:
@@ -3,6 +3,7 @@ import { db } from "../db";
|
||||
import { eq, and, desc, asc, sql, ilike, or, gte, lte, inArray, isNull } from "drizzle-orm";
|
||||
import crypto from "crypto";
|
||||
import { userStatusesStorage } from "./user-statuses.storage";
|
||||
import { invalidateAccessibleTasksForUser } from "../utils/cache";
|
||||
|
||||
export interface ListUsersOptions {
|
||||
search?: string;
|
||||
@@ -270,6 +271,10 @@ export class UsersStorage {
|
||||
.set({ ...updates, updatedAt: new Date() })
|
||||
.where(eq(users.id, id))
|
||||
.returning();
|
||||
// Смена appRole (например, получение tasks.view_all) меняет набор доступных задач
|
||||
if ('appRole' in updates && user?.organizationId) {
|
||||
invalidateAccessibleTasksForUser(id, user.organizationId);
|
||||
}
|
||||
return user;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user