import { AxioDB } from "../../../Services/Indexation.operation";
import { FastifyRequest } from "fastify";
/**
 * CRUD Controller class for handling database operations
 */
export default class CRUDController {
    private AxioDBInstance;
    constructor(AxioDBInstance: AxioDB);
    /**
     * Retrieves all documents from a specified collection with pagination.
     *
     * @param request - The Fastify request object containing query parameters
     * @param request.query.dbName - The name of the database to query
     * @param request.query.collectionName - The name of the collection to query
     * @param request.query.page - The page number for pagination (starts from 1)
     *
     * @returns A response object with:
     *   - Status code 200 and documents data if successful
     *   - Status code 400 if database name, collection name, or page number is invalid
     *   - Status code 404 if no documents are found
     *
     * @example
     * // GET /documents?dbName=users&collectionName=profiles&page=1
     */
    getAllDocuments(request: FastifyRequest): Promise<import("../../helper/responseBuilder.helper").ResponseBuilder>;
    /**
     * Retrieves documents from a specified collection based on a query with pagination.
     *
     * @param request - The Fastify request object containing query parameters and body data.
     * @param request.query - Query parameters for the database and collection.
     * @param request.query.dbName - The name of the database to query.
     * @param request.query.collectionName - The name of the collection to query.
     * @param request.query.page - The page number for pagination (starts from 1).
     * @param request.body - The request body containing the query object.
     * @param request.body.query - The query object to filter documents.
     *
     * @returns A response object with:
     *   - Status code 200 and the retrieved documents if successful.
     *   - Status code 400 if any required parameters are invalid.
     *   - Status code 404 if no documents are found.
     *
     * @example
     * // Example request:
     * {
     *   query: {
     *     dbName: "users",
     *     collectionName: "profiles",
     *     page: 1
     *   },
     *   body: {
     *     query: { age: { $gte: 18 } }
     *   }
     * }
     */
    getDocumentsByQuery(request: FastifyRequest): Promise<import("../../helper/responseBuilder.helper").ResponseBuilder>;
    /**
     * Retrieves a document from a specified collection in a database by its ID.
     *
     * @param request - The Fastify request object containing query parameters.
     * @param request.query - Query parameters for the database and collection.
     * @param request.query.dbName - The name of the database to query.
     * @param request.query.collectionName - The name of the collection to query.
     * @param request.query.documentId - The ID of the document to retrieve.
     *
     * @returns A response object with:
     *   - Status code 200 and the retrieved document if successful.
     *   - Status code 400 if any required parameters are invalid.
     *   - Status code 404 if no document is found.
     *
     * @example
     * // Example request:
     * {
     *   query: {
     *     dbName: "users",
     *     collectionName: "profiles",
     *     documentId: "12345"
     *   }
     * }
     */
    getDocumentsById(request: FastifyRequest): Promise<import("../../helper/responseBuilder.helper").ResponseBuilder>;
    /**
     * Creates a new document in a specified collection within a database.
     *
     * @param request - The Fastify request object containing query parameters and body data
     * @param request.query - Query parameters containing database and collection names
     * @param request.query.dbName - The name of the database to store the document in
     * @param request.query.collectionName - The name of the collection to store the document in
     * @param request.body - The document data to be inserted
     *
     * @returns A response object with appropriate status code and message:
     *  - 201 (Created) with the inserted document data on success
     *  - 400 (Bad Request) if any required parameters are invalid
     *  - 500 (Internal Server Error) if document insertion fails
     *
     * @throws May throw exceptions if database or collection operations fail
     */
    createNewDocument(request: FastifyRequest): Promise<import("../../helper/responseBuilder.helper").ResponseBuilder>;
    /**
     * Creates multiple new documents in a specified collection within a database.
     *
     * @param request - The Fastify request object containing query parameters and body data
     * @param request.query - Query parameters containing database and collection names
     * @param request.query.dbName - The name of the database to store the documents in
     * @param request.query.collectionName - The name of the collection to store the documents in
     * @param request.body - An array of document data to be inserted
     *
     * @returns A response object with appropriate status code and message:
     *  - 201 (Created) with the inserted document data on success
     *  - 400 (Bad Request) if any required parameters are invalid
     *  - 500 (Internal Server Error) if document insertion fails
     *
     * @throws May throw exceptions if database or collection operations fail
     */
    createManyNewDocument(request: FastifyRequest): Promise<import("../../helper/responseBuilder.helper").ResponseBuilder>;
    /**
     * Update an existing document in a specified collection within a database.
     * @param request - The Fastify request object containing query parameters and body data
     * @param request.query - Query parameters containing database, collection, and document IDs
     * @param request.query.dbName - The name of the database
     * @param request.query.collectionName - The name of the collection
     * @param request.query.documentId - The ID of the document to update
     * @param request.body - The updated document data
     */
    updateDocumentById(request: FastifyRequest): Promise<import("../../helper/responseBuilder.helper").ResponseBuilder>;
    /**
     * Updates documents in a specified collection based on a query.
     * @param request - The Fastify request object containing query parameters and body data
     * @param request.query - Query parameters containing database, collection, and update options
     * @param request.query.dbName - The name of the database
     * @param request.query.collectionName - The name of the collection
     * @param request.query.isMany - Flag indicating if multiple documents should be updated
     * @param request.body - The update query and data
     * @param request.body.query - The query to match documents
     * @param request.body.update - The updated document data
     * @returns A response object with the status of the update operation
     */
    updateDocumentByQuery(request: FastifyRequest): Promise<import("../../helper/responseBuilder.helper").ResponseBuilder>;
    /**
     * Deletes a document from a specified collection in a database.
     *
     * @param request - The Fastify request object containing query parameters
     * @param request.query.dbName - The name of the database
     * @param request.query.collectionName - The name of the collection
     * @param request.query.documentId - The ID of the document to delete
     *
     * @returns A response object with appropriate status code and message:
     *   - 200 (OK) if the document was successfully deleted
     *   - 400 (BAD REQUEST) if any required parameters are missing or invalid
     *   - 500 (INTERNAL SERVER ERROR) if the deletion operation fails
     *
     * @throws May throw exceptions during database operations
     */
    deleteDocumentById(request: FastifyRequest): Promise<import("../../helper/responseBuilder.helper").ResponseBuilder>;
    /**
     * Deletes one or more documents from a collection based on a query
     *
     * @param request - The Fastify request object containing the query parameters
     * @param request.query.dbName - The name of the database
     * @param request.query.collectionName - The name of the collection
     * @param request.query.query - The query object to match documents for deletion
     * @param request.query.isMany - Boolean flag indicating whether to delete multiple documents (true) or a single document (false)
     *
     * @returns A response object with status code and message
     * - 200 OK if the document(s) were successfully deleted
     * - 400 BAD_REQUEST if any of the required parameters are invalid
     * - 500 INTERNAL_SERVER_ERROR if the deletion operation failed
     *
     * @throws May throw exceptions from database operations
     */
    deleteDocumentByQuery(request: FastifyRequest): Promise<import("../../helper/responseBuilder.helper").ResponseBuilder>;
    /**
     * Executes an aggregation pipeline on a specified collection.
     *
     * @param request - The Fastify request object containing query parameters.
     * @param request.query.dbName - The name of the database to use.
     * @param request.query.collectionName - The name of the collection to perform aggregation on.
     * @param request.query.aggregation - An array of aggregation pipeline stages.
     *
     * @returns A response object with status code, message, and aggregation results if successful.
     * If the aggregation fails, returns an error response with appropriate status code.
     *
     * @example
     * // Example request query:
     * {
     *   dbName: "myDatabase",
     *   collectionName: "users",
     *   aggregation: [
     *     { $match: { age: { $gt: 21 } } },
     *     { $group: { _id: "$status", count: { $sum: 1 } } }
     *   ]
     * }
     */
    runAggregation(request: FastifyRequest): Promise<import("../../helper/responseBuilder.helper").ResponseBuilder>;
}
