Estoy tratando de resolver esto:
Tengo un módulo, digamos "usuarios", para el cual tengo un servicio con operaciones básicas de base de datos (buscar, encontrarMuchos, guardar, etc.).
Quiero crear más módulos que tengan las mismas operaciones básicas de base de datos, pero no quiero tener que volver a escribirlos todos.
Para facilitar las cosas, tengo estas 2 funciones en un archivo utils:
export async function find<T extends Model>(model: T, query, options?): Promise<T> { return model.find(query) }y
export async function findOne<T extends Model>(model: T, query, options?): Promise<T> { return model.findOne(query) }¿Cómo puedo hacerlo para importar cada una de estas funciones a una clase (usando decoradores de TypeScript u otra magia de TS)?
quiero tener algo asi
import { attachAllBasicDatabaseMethods } from "./model-utils/operations" export class UserController { @attachAllBasicDatabaseMethods() private constructor() {} }entonces en mi controlador puedo usar un método como este:
async getSomeUsers() { const users = await this.findMany(UserModel, this.query, this.options); return users; }La idea del decorador es algo en lo que he pensado, pero sé que hay otros métodos para resolver esto.
O mejor: usar ese decorador con el modelo como parámetro vincula automáticamente el modelo a los métodos, por lo que puedo usar this.find(this.query, this.options)