// Ядро: проверка членства в пространстве. Ведёт Claude. // Кодекс вызывает: await requireMember(request, spaceId) в начале каждого модульного хендлера. import { db } from './db.js'; class HttpError extends Error { constructor(status, code, message) { super(message); this.status = status; this.code = code; } } // Бросает 403/404, если юзер не участник пространства. Иначе возвращает запись membership. export async function requireMember(request, spaceId) { const space = db.prepare('SELECT id FROM spaces WHERE id = ?').get(spaceId); if (!space) { throw new HttpError(404, 'NOT_FOUND', 'Пространство не найдено'); } const member = db .prepare('SELECT * FROM space_members WHERE space_id = ? AND user_id = ?') .get(spaceId, request.user.id); if (!member) { throw new HttpError(403, 'FORBIDDEN', 'Нет доступа к этому пространству'); } return member; } export { HttpError };