import { getRequestOrgId, getRequestUserEmail, } from "@agent-native/core/server/request-context"; import { eq, or, sql, type SQL } from "drizzle-orm"; import { schema } from "../db/index.js"; export function parseDocumentFavorite( value: boolean | number | string | null | undefined, ): boolean { if (typeof value === "boolean") return value; if (typeof value === "number") return value === 1; if (typeof value === "string") { const normalized = value.trim().toLowerCase(); return normalized === "1" || normalized === "true" || normalized === "t"; } return false; } export function parseDocumentHideFromSearch( value: boolean | number | string | null | undefined, ): boolean { return parseDocumentFavorite(value); } export function documentDiscoveryFilter(options?: { userEmail?: string | null; orgIds?: string[]; }): SQL { const userEmail = options?.userEmail ?? getRequestUserEmail(); const orgIds = options?.orgIds ?? (getRequestOrgId() ? [getRequestOrgId() as string] : []); const clauses: SQL[] = [ eq(schema.documents.hideFromSearch, 0), sql`${schema.documents.hideFromSearch} IS NULL`, sql`${schema.documents.visibility} <> 'org'`, ]; if (userEmail) { clauses.push(eq(schema.documents.ownerEmail, userEmail)); clauses.push(sql`exists (select 1 from ${schema.documentShares} where ${schema.documentShares.resourceId} = ${schema.documents.id} and ${schema.documentShares.principalType} = 'user' and ${schema.documentShares.principalId} = ${userEmail})`); } for (const orgId of orgIds) { clauses.push(eq(schema.documents.orgId, orgId)); clauses.push(sql`exists (select 1 from ${schema.documentShares} where ${schema.documentShares.resourceId} = ${schema.documents.id} and ${schema.documentShares.principalType} = 'org' and ${schema.documentShares.principalId} = ${orgId})`); } return or(...clauses) ?? sql`1=0`; } export function getCurrentOwnerEmail(): string { const email = getRequestUserEmail(); if (!email) throw new Error("no authenticated user"); return email; }