Source: sources/converters/TAbstractDataInserter.js

/**
 * @author [Tristan Valcke]{@link https://github.com/Itee}
 * @license [BSD-3-Clause]{@link https://opensource.org/licenses/BSD-3-Clause}
 *
 * @file Todo
 *
 * @example Todo
 *
 */

    // Todo: Extend from TDataQueueProcessor
class TAbstractDataInserter {

    constructor ( parameters = {} ) {

        const _parameters = {
            ...{
                driver: null
            }, ...parameters
        }

        this._driver = _parameters.driver

        this._isProcessing = false
        this._queue        = []

    }

    save ( data, parameters, onSuccess, onProgress, onError ) {

        if ( !data ) {
            onError( 'Data cannot be null or empty, aborting database insert !!!' )
            return
        }

        if ( !parameters ) {
            onError( 'Invalid parent id, unable to set children to unknown database node !!!' )
            return
        }

        this._queue.push( {
            data,
            parameters,
            onSuccess,
            onProgress,
            onError
        } )

        this._processQueue()

    }

    _processQueue () {

        if ( this._queue.length === 0 || this._isProcessing ) { return }

        this._isProcessing = true

        const self       = this
        const dataBloc   = this._queue.shift()
        const data       = dataBloc.data
        const parameters = dataBloc.parameters
        const onSuccess  = dataBloc.onSuccess
        const onProgress = dataBloc.onProgress
        const onError    = dataBloc.onError

        self._save(
            data,
            parameters,
            _onSaveSuccess,
            _onSaveProgress,
            _onSaveError
        )

        function _onSaveSuccess ( result ) {

            onSuccess( result )

            self._isProcessing = false
            self._processQueue()

        }

        function _onSaveProgress ( progress ) {

            onProgress( progress )

        }

        function _onSaveError ( error ) {

            onError( error )

            self._isProcessing = false
            self._processQueue()

        }

    }

    _save ( /*data, parameters, onSuccess, onProgress, onError*/ ) {}

}

export { TAbstractDataInserter }