adba
Version:
Any DataBase to API
158 lines (157 loc) • 6.8 kB
TypeScript
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;
}