import { desc, eq, is, or, SQL, sql, type AnyColumn, type InferSelectModel, } from "drizzle-orm"; import { PgTimestampString, type SelectedFields } from "drizzle-orm/pg-core"; import { type SelectResultFields } from "../../node_modules//drizzle-orm/query-builders/select.types"; import { db } from "@/database/db"; import { project, task } from "@/database/schema"; export function distinctOn(column: Column) { return sql`distinct on (${column}) ${column}`; } export function jsonBuildObject(shape: T) { const chunks: SQL[] = []; Object.entries(shape).forEach(([key, value]) => { if (chunks.length > 0) { chunks.push(sql.raw(`,`)); } chunks.push(sql.raw(`'${key}',`)); // json_build_object formats to ISO 8601 ... if (is(value, PgTimestampString)) { chunks.push(sql`timezone('UTC', ${value})`); } else { chunks.push(sql`${value}`); } }); return sql>`coalesce(json_build_object(${sql.join( chunks )}), '{}')`; } export function jsonAggBuildObject(shape: T) { return sql[]>`coalesce(jsonb_agg(${jsonBuildObject( shape )}), '${sql`[]`}')`; }