/** Typed wrappers around TypeORM operations for test convenience. */ import { ObjectLiteral, FindOptionsWhere, EntityTarget, DeepPartial, FindManyOptions, Repository } from 'typeorm'; import { getDefaultDataSource } from './setup'; /** Finds a single entity by criteria. Returns null if not found. */ export async function findEntity( EntityClass: EntityTarget, where: FindOptionsWhere ): Promise { const ds = getDefaultDataSource(); return await ds.manager.findOne(EntityClass, { where }); } /** Finds a single entity by criteria. Throws if not found. */ export async function findEntityOrFail( EntityClass: EntityTarget, where: FindOptionsWhere ): Promise { const ds = getDefaultDataSource(); return await ds.manager.findOneOrFail(EntityClass, { where }); } export async function updateEntity( EntityClass: EntityTarget, id: string, updates: Partial ): Promise { const ds = getDefaultDataSource(); await ds.manager.update(EntityClass, id, updates as Parameters[2]); } /** Saves (inserts or updates) an entity. */ export async function saveEntity( EntityClass: EntityTarget, data: DeepPartial ): Promise { const ds = getDefaultDataSource(); return await ds.manager.save(EntityClass, data); } export async function findEntities( EntityClass: EntityTarget, options?: FindManyOptions ): Promise { const ds = getDefaultDataSource(); return await ds.manager.find(EntityClass, options); } /** Counts entities matching criteria. If no where clause provided, counts all rows. */ export async function countEntities( EntityClass: EntityTarget, where?: FindOptionsWhere ): Promise { const ds = getDefaultDataSource(); return await ds.manager.count(EntityClass, where ? { where } : undefined); } export async function deleteEntities( EntityClass: EntityTarget, where: FindOptionsWhere ): Promise { const ds = getDefaultDataSource(); await ds.manager.delete(EntityClass, where); } /** * Returns a TypeORM Repository for the given entity class. * Prefer findEntity/saveEntity/updateEntity for simple operations. */ export function getEntityRepository( EntityClass: EntityTarget ): Repository { const ds = getDefaultDataSource(); return ds.getRepository(EntityClass); }