| const mongoose = require('mongoose') |
| const { Schema } = mongoose |
|
|
| module.exports = class mongoDB { |
| constructor(url, options = { useNewUrlParser: true, useUnifiedTopology: true }) { |
| this.url = url |
| this.data = this._data = this._schema = this._model = {} |
| this.db |
| this.options = options |
| } |
| async read() { |
| this.db = await mongoose.connect(this.url, { ...this.options }) |
| this.connection = mongoose.connection |
| let schema = this._schema = new Schema({ |
| data: { |
| type: Object, |
| required: true, |
| default: {} |
| } |
| }) |
| |
| try { this._model = mongoose.model('data', schema) } catch { this._model = mongoose.model('data') } |
| this._data = await this._model.findOne({}) |
| if (!this._data) { |
| this.data = {} |
| await this.write(this.data) |
| this._data = await this._model.findOne({}) |
| } else this.data = this._data.data |
| return this.data |
| } |
|
|
|
|
| async write(data) { |
| if (!data) return data |
| if (!this._data) return (new this._model({ data })).save() |
| this._model.findById(this._data._id, (err, docs) => { |
| if (!err) { |
| if (!docs.data) docs.data = {} |
| docs.data = data |
| return docs.save() |
| } |
| }) |
| } |
| } |