import { main } from './main.proposal';
/**
 * Proposal for Database
 * root: db
 */
export declare namespace database {
    /**
     * Types used in proposals
     */
    namespace types {
        /**
         * Identifier of the row affected row
         */
        type RowId = any;
        /**
         * Document in the database
         */
        type Doc = {
            [key: string]: any;
        };
        /**
         * Query for Other operations
         */
        type Query = {
            [key: string]: any;
        };
        /**
         * Number of effected rows
         */
        type NumAffected = number;
    }
    /**
     * Request packages for operations
     */
    namespace Packages {
        interface _base {
            [key: string]: any;
            resource: string;
            runValidations?: boolean;
        }
        interface Create extends _base {
            data: types.Doc;
            query?: types.Query;
        }
        interface Read extends _base {
            /**
             * Limits the number of output in the read
             */
            limit?: number;
            /**
             * Specific elements from the resource
             */
            elements?: {
                [element: string]: Boolean;
            };
            sort?: [{
                element: boolean;
            }];
            /**
             * Join the results on specific element
             */
            joins?: {
                [originElement: string]: {
                    targetResource: string;
                    targetElement: string;
                    scope: Read;
                };
            };
            /**
             * Query to be performed
             */
            query?: types.Query;
        }
        interface Update extends _base {
            query: types.Query;
            data: types.Doc;
        }
        interface Patch extends _base {
            query: types.Query;
            data: types.Doc;
        }
        interface Delete extends _base {
            query: types.Query;
        }
    }
    /**
     * Returned from the operations in proposal
     */
    namespace Returns {
        /**
         * Create operations return the inserted row id
         */
        type Create = types.RowId;
        /**
         * Read operations returned an array of documents
         */
        type Read = Array<types.Doc>;
        /**
         * Update operations return the effected row id
         */
        type Update = types.RowId;
        /**
         * Patch operations return the effected row id
         */
        type Patch = types.RowId;
        /**
         * Delete operations return the number of affected rows
         */
        type Delete = types.NumAffected;
    }
    /**
     * Operations included in proposal
     */
    interface Proposal {
        /**
         *
         */
        read: main.types.MicroService;
        /**
         *
         */
        create: main.types.MicroService;
        /**
         *
         */
        update: main.types.MicroService;
        /**
         *
         */
        delete: main.types.MicroService;
        /**
         *
         */
        patch: main.types.MicroService;
    }
}
