import { Request, Response, NextFunction } from 'express';
import { ResponseType } from '../types/BaseControllerTypes';
export default class BaseController {
    protected _model: import("sequelize").ModelCtor<import("sequelize").Model<any, any>> | undefined;
    _modelName: string | undefined;
    protected broadcastOnCreate: boolean;
    protected broadcastOnUpdate: boolean;
    protected broadcastOnDelete: boolean;
    constructor(model?: string);
    /**
     * Find all the rows matching your query, within a specified offset / limit,
     * and get the total number of rows matching your query.
     * -- added distinct:true
     * ```js
     * Controller.find(req, res, next)
     * ```
     * @param req
     * @param res
     * @param next
     */
    find(req: Request, res: Response, next?: NextFunction): Promise<ResponseType>;
    /**
     * Search for a single instance by its primary key.
     * This applies LIMIT 1, so the listener will always be called with a single instance.
     * @param req
     * @param res
     * @param next
     */
    findById(req: Request, res: Response, next?: NextFunction): Promise<ResponseType>;
    /**
     *
     * @param req
     * @param res
     * @param next
     */
    create(req: Request, res: Response, next?: NextFunction): Promise<ResponseType>;
    /**
     * Update multiple instances that match the where options. The promise returns an array with one or two elements. The first element is always the number of affected rows, while the second element is the actual affected rows (only supported in postgres and mssql with options.returning true.)
     * @param req
     * @param res
     * @param next
     */
    update(req: Request, res: Response, next?: NextFunction): Promise<ResponseType>;
    /**
     * Delete multiple instances, or set their deletedAt timestamp to the current time if paranoid is enabled.
     * @param req
     * @param res
     * @param next
     */
    delete(req: Request, res: Response, next?: NextFunction): Promise<ResponseType>;
    /**
     * Find all the rows matching your query, within a specified offset / limit,
     * and get the total number of rows matching your query.
     * ```js
     * Controller.find(req, res, next)
     * ```
     * @param req
     * @param res
     * @param next
     */
    archives(req: Request, res: Response, next?: NextFunction): Promise<ResponseType>;
    restore(req: Request, res: Response, next?: NextFunction): Promise<ResponseType>;
    /**
     * count total number of records
     * @param req
     * @param res
     * @param next
     * @returns
     */
    count(req: Request, res: Response, next?: NextFunction): Promise<{
        count: number;
    }>;
    /**
     * Return a basic statistics based on the query and group provided.
     * ```js
     * Controller.find(req, res, next)
     * ```
     * @param req
     * @param res
     * @param next
     */
    stats(req: Request, res: Response, next?: NextFunction): Promise<any>;
    /**
     * ###############################################################
     * ###################### LIFE CYCLE HOOKS #######################
     * ###############################################################
     */
    beforeCreate(req: Request): Promise<void>;
    afterCreate(req: Request, rec: any): Promise<void>;
    beforeUpdate(req: Request): Promise<void>;
    afterUpdate(req: Request, rec: any, orig: any): Promise<void>;
    beforeDelete(req: Request): Promise<void>;
    afterDelete(req: Request, rec: any): Promise<void>;
    beforeFind(req: Request): Promise<void>;
    afterFind(req: Request): Promise<void>;
}
//# sourceMappingURL=BaseController.d.ts.map