|
|
|
import PouchDB from 'pouchdb'
|
|
|
|
import PouchDBfind from 'pouchdb-find'
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Repository
|
|
|
|
*
|
|
|
|
* @author Björn Hase, me@herr-hase.wtf
|
|
|
|
* @license http://opensource.org/licenses/MIT The MIT License
|
|
|
|
* @link https://gitea.node001.net/HerrHase/super-hog
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
class Repository
|
|
|
|
{
|
|
|
|
constructor()
|
|
|
|
{
|
|
|
|
PouchDB.plugin(PouchDBfind)
|
|
|
|
this.db = new PouchDB('./../../storage/database', {
|
|
|
|
revs_limit: 0
|
|
|
|
})
|
|
|
|
|
|
|
|
// adding index
|
|
|
|
this.index = [
|
|
|
|
'type'
|
|
|
|
]
|
|
|
|
|
|
|
|
if (this.index && this.index.lenth > 0) {
|
|
|
|
this.addIndex(this.index)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* add index
|
|
|
|
*
|
|
|
|
* @param {array} fields
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
async addIndex(fields)
|
|
|
|
{
|
|
|
|
try {
|
|
|
|
await this.db.createIndex({
|
|
|
|
index: {
|
|
|
|
fields: fields
|
|
|
|
}
|
|
|
|
})
|
|
|
|
} catch (error) {
|
|
|
|
console.log(error);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param {array} data
|
|
|
|
* @param {function} success
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
create(data)
|
|
|
|
{
|
|
|
|
//data._id = uuidv4()
|
|
|
|
data.type = this.type
|
|
|
|
|
|
|
|
// if beforeCreate exists
|
|
|
|
if (typeof this['beforeCreate'] === 'function') {
|
|
|
|
data = this.beforeCreate(data)
|
|
|
|
}
|
|
|
|
|
|
|
|
return this.db.post(data)
|
|
|
|
.then((response) => {
|
|
|
|
|
|
|
|
console.log(response)
|
|
|
|
|
|
|
|
// if afterCreate exists
|
|
|
|
if (typeof this['afterCreate'] === 'function') {
|
|
|
|
this.afterCreate(response)
|
|
|
|
}
|
|
|
|
|
|
|
|
return response
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param {array} data
|
|
|
|
* @param {function} success
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
update(data)
|
|
|
|
{
|
|
|
|
// if beforeUpdate exists
|
|
|
|
if (typeof this['beforeUpdate'] === 'function') {
|
|
|
|
data = this.beforeUpdate(data)
|
|
|
|
}
|
|
|
|
|
|
|
|
return this.db.put(data)
|
|
|
|
.then((response) => {
|
|
|
|
|
|
|
|
// if beforeUpdate exists
|
|
|
|
if (typeof this['afterUpdate'] === 'function') {
|
|
|
|
this.afterUpdate(response)
|
|
|
|
}
|
|
|
|
|
|
|
|
return response
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param {string} id
|
|
|
|
* @param {function} success
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
async remove(id)
|
|
|
|
{
|
|
|
|
this.findOne({
|
|
|
|
'selector': {
|
|
|
|
'_id': id
|
|
|
|
}
|
|
|
|
}).then((document) => {
|
|
|
|
if (document) {
|
|
|
|
|
|
|
|
// if beforeUpdate exists
|
|
|
|
if (typeof this['beforeRemove'] === 'function') {
|
|
|
|
this.beforeRemove(document)
|
|
|
|
}
|
|
|
|
|
|
|
|
return this.db.remove(document._id, document._rev, () => {
|
|
|
|
return document
|
|
|
|
})
|
|
|
|
|
|
|
|
// if beforeUpdate exists
|
|
|
|
if (typeof this['afterRemove'] === 'function') {
|
|
|
|
this.afterRemove(document)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* find documents
|
|
|
|
*
|
|
|
|
* @param {object} fields
|
|
|
|
* @param {object} query
|
|
|
|
* @param {function} success
|
|
|
|
*/
|
|
|
|
find(query)
|
|
|
|
{
|
|
|
|
return this.db.find(query).then((documents) => {
|
|
|
|
return documents.docs
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* find documents
|
|
|
|
*
|
|
|
|
* @param {object} fields
|
|
|
|
* @param {object} query
|
|
|
|
* @param {function} success
|
|
|
|
*/
|
|
|
|
findOne(query)
|
|
|
|
{
|
|
|
|
return this.db.find(query).then((documents) => {
|
|
|
|
if (documents.docs.length === 0) {
|
|
|
|
return null
|
|
|
|
} else {
|
|
|
|
return documents.docs[0]
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export default Repository
|