UNPKG

adba

Version:
158 lines (157 loc) 6.8 kB
import { Model, QueryBuilderType, WhereMethod } from "objection"; import type { IIds, ISearch, IStatusCode } from "./types"; /** * @class Controller * * @description * A controller class for handling database queries using Objection.js models. */ export default class Controller { Model: typeof Model; qcolumns: string[] | undefined; /** * @constructor * * @param {typeof Model} SqliteModel - The Objection.js model. * @param {Object} options - Additional options for the controller. * @param {string[]} [options.searchIn] - Columns to search in by default. */ constructor(SqliteModel: typeof Model, options?: { searchIn?: string[]; }); /** * Finds string type columns in the model's JSON schema. * * @param {typeof Model} ModelIn - The model to inspect. Defaults to this.Model. * @returns {string[]} A list of string type column names. */ findTypeString(ModelIn?: typeof Model): string[]; /** * Lists records based on search criteria. * * @param {ISearch} dataSearch - The search criteria. * @param {QueryBuilderType<any>} [queryBuilder] - Optional query builder instance. * @returns {Promise<object>} The promise of the resulting data. */ list(dataSearch: ISearch, queryBuilder?: QueryBuilderType<any>): Promise<IStatusCode>; /** * Applies multi-column ordering to an Objection or Knex query builder. * * Accepts an object like `{ created_at: 'desc', 'user.name': 'asc' }`. * * - Dotted paths (e.g. `user.name`) are used as provided. Ensure related * tables have been joined via `joinRelated` or `withGraphJoined`. * - Columns without a dot are qualified with the model table name. * - Any invalid direction defaults to `'asc'`. * * @param queryBuilderIn - Query builder instance to apply ordering to. * @param orderBy - Mapping of column paths to sort direction. * * @example * ```ts * const query = SampleModel.query(); * controller.applyOrderByLite(query, { * created_at: 'desc', * 'profile.name': 'asc' * }); * ``` */ applyOrderByLite(queryBuilderIn: any, // QueryBuilder orderBy?: Record<string, string>): void; /** * Selects a record by its ID. * @param {IIds} param0 - The ID or IDs to select. * @param {QueryBuilderType<any>} [queryBuilder] - Optional query builder instance. * @returns {Promise<object>} The promise of the resulting data. */ selectById({ id }: IIds, queryBuilder?: QueryBuilderType<any>): Promise<IStatusCode>; /** * Selects one active record based on given criteria. * @param {object} find - Criteria to find the record. * @param {QueryBuilderType<any>} [queryBuilder] - Optional query builder instance. * @returns {Promise<object>} The promise of the resulting data. */ selectOneActive(find: object, queryBuilder?: QueryBuilderType<any>): Promise<IStatusCode>; /** * Selects one record based on given criteria without considering active state. * @param {object} find - Criteria to find the record. * @param {QueryBuilderType<any>} [queryBuilder] - Optional query builder instance. * @returns {Promise<object>} The promise of the resulting data. */ selectOne(find: object, queryBuilder?: QueryBuilderType<any>): Promise<IStatusCode>; /** * Selects one record by its name field. * @param {object} param0 - Object containing the name parameter. * @param {string} param0.name - The name to search for. * @param {QueryBuilderType<any>} [queryBuilder] - Optional query builder instance. * @returns {Promise<object>} The promise of the resulting data. */ selectByName({ name }: { name: string; }, queryBuilder?: QueryBuilderType<any>): Promise<IStatusCode>; /** * Inserts one or multiple records. * * @param {Record<string, any>} data - The data to insert. * @param {QueryBuilderType<any>} [queryBuilder] - Optional query builder instance. * @returns {Promise<object>} The promise of the resulting data. */ insert(data: Record<string, any>, queryBuilder?: QueryBuilderType<any>): Promise<IStatusCode>; /** * Updates records using an upsert operation. * * @param {Record<string, any>} data - The data for upsert. * @param {QueryBuilderType<any>} [queryBuilder] - Optional query builder instance. * @returns {Promise<object>} The promise of the resulting data. */ update(data: Record<string, any>, queryBuilder?: QueryBuilderType<any>): Promise<IStatusCode>; /** * Deletes records based on where clause. * * @param {WhereMethod<any>} whereData - Criteria for delete operation. * @param {QueryBuilderType<any>} [queryBuilder] - Optional query builder instance. * @returns {Promise<object>} The promise of the resulting data. */ deleteWhere(whereData: WhereMethod<any>, queryBuilder?: QueryBuilderType<any>): Promise<IStatusCode>; /** * Deletes records by ID(s). * * @param {IIds} param0 - The ID or IDs of records to delete. * @param {QueryBuilderType<any>} [queryBuilder] - Optional query builder instance. * @returns {Promise<object>} The promise of the resulting data. */ delete({ id, ids }: IIds, queryBuilder?: QueryBuilderType<any>): Promise<IStatusCode>; /** * Returns metadata information about the table. * * @returns {Promise<IStatusCode>} The promise with table metadata. */ meta(): Promise<IStatusCode>; /** * Formats a successful response object. * * @param {any} data - The data to return in the response. * @param {number} [status=200] - The HTTP status code. * @param {number} [code=0] - Additional status code. * @returns {object} The success response object. */ protected success(data?: any, status?: number, code?: number): IStatusCode; /** * Merges additional data into a successful response object. * * @param {any} data - The data to return in the response. * @param {number} [status=200] - The HTTP status code. * @param {number} [code=0] - Additional status code. * @returns {object} The merged success response object. */ protected successMerge(data?: any, status?: number, code?: number): IStatusCode; /** * Formats an error response object. * * @param {any} errorObj - The error object or message. * @param {number} [status=500] - The HTTP status code. * @param {number} [code=0] - Additional status code. * @returns {object} The error response object. */ protected error(errorObj?: any, status?: number, code?: number): IStatusCode; }