This commit is contained in:
hunlongyu
2020-01-17 10:52:26 +08:00
parent 36e1372f51
commit d1dd9491da
10 changed files with 144 additions and 179 deletions

View File

@@ -0,0 +1,36 @@
import Nedb from 'nedb'
export default class {
db: any
constructor () {
this.db = null
}
create (db: any) {
const name = process.env.NODE_ENV === 'development' ? 'ZY-dev' : 'ZY'
const database: any = {}
database.setting = new Nedb({
filename: name + db.setting,
autoload: true
})
database.video = new Nedb({
filename: name + db.video,
autoload: true
})
return database
}
init () {
if (this.db) {
return this.db
}
this.db = this.create({
setting: '-setting',
video: '-video'
})
return this.db
}
}

View File

@@ -0,0 +1,9 @@
// import { setting } from './index'
// export default {
// add (data: any) {
// return new Promise((resolve, reject) => {
// // setting
// })
// }
// }

View File

@@ -0,0 +1,16 @@
// import { video } from './index'
// // const id = require('nanoid')
// import { uuid } from 'uuidv4'
// export default {
// add (key: string, value: any) {
// return new Promise((resolve, reject) => {
// value._id = uuid()
// video.setItem(key, value).then(res => {
// resolve(res)
// }).catch(err => {
// reject(err)
// })
// })
// }
// }

View File

@@ -1,133 +0,0 @@
export class Table {
name: string
db: IDBDatabase
constructor (name: string, db:IDBDatabase) {
this.name = name
this.db = db
}
// create transaction
transaction (mode = true) {
return this.db.transaction([this.name], mode === true ? 'readwrite' : 'readonly')
}
// open or conntect this table
request () {
return this.transaction().objectStore(this.name)
}
// get
select (selector: any) {
let index: string
let indexValue: any
for (let name in selector) {
index = name
indexValue = selector[name]
}
return new Promise((resolve, reject) => {
const selectRequest = this.request().index(index).getAll(indexValue)
selectRequest.onsuccess = (e:any) => {
resolve(e.target.result)
}
selectRequest.onerror = (e:any) => {
reject(e.target.result)
}
})
}
selectId (id:number) {
return new Promise((resolve, reject) => {
const selectRequest = this.request().get(id)
selectRequest.onsuccess = (e:any) => {
resolve(e.target.result)
}
selectRequest.onerror = (e:any) => {
reject(e.target.result)
}
})
}
selectAll () {
return new Promise((resolve, reject) => {
const selectRequest = this.request().getAll()
selectRequest.onsuccess = (e:any) => {
resolve(e.target.result)
}
selectRequest.onerror = (e:any) => {
reject(e.target.result)
}
})
}
// some
some (index: any, start:any, end:any) {
return new Promise((resolve, reject) => {
const temp:any = []
const cursor = this.request().index(index)
const range = IDBKeyRange.bound(start, end)
cursor.openCursor(range).onsuccess = (ev:any) => {
const res = ev.target.result
if (res) {
temp.push(res.value)
res.continue()
} else {
resolve(temp)
}
}
cursor.openCursor(range).onerror = (ev: any) => {
reject(ev)
}
})
}
// put
update (data: any) {
return new Promise((resolve, reject) => {
const updateRequest = this.request().put(data)
updateRequest.onsuccess = (e:any) => {
resolve(e)
}
updateRequest.onerror = (e:any) => {
reject(e)
}
})
}
// add
insert (data: any) {
return new Promise((resolve, reject) => {
const addRequest = this.request().add(data)
addRequest.onsuccess = (e:any) => {
resolve(e)
}
addRequest.onerror = (e:any) => {
reject(e)
}
})
}
// get -> delete
delete (selector: any) {
return new Promise((resolve, reject) => {
this.select(selector).then((res: any) => {
if (res.length) {
res.forEach((item: any, index: any, arr: any) => {
const request = this.request()
const keyPath = request.keyPath as string
const deleteRequest = request.delete(item[keyPath])
deleteRequest.onsuccess = (e: any) => {
if (index === arr.length - 1) {
resolve(e)
}
}
deleteRequest.onerror = (e: any) => {
reject(e)
}
})
}
})
})
}
clear () {
return new Promise((resolve, reject) => {
const deleteRequest = this.request().clear()
deleteRequest.onsuccess = (e: any) => {
resolve(e)
}
deleteRequest.onerror = (e: any) => {
reject(e)
}
})
}
}

View File

@@ -1,5 +0,0 @@
import tiny from 'tinydb'
const db = {}
export default db

View File

@@ -1,34 +0,0 @@
export interface Database {
databaseName: string
tables: Array<DatabaseTable>
version?: number
}
export interface DatabaseTable {
name: string
keyPath: string
autoIncrement: boolean
indexs: Array<RuleIndex>
}
export interface RuleIndex {
index: string
relativeIndex: string
unique: boolean
}
export interface TinyDBRule {
db: IDBDatabase
name: string
version: number
table: IDBObjectStore
tables: Array<DatabaseTable>
connect(): Promise<IDBDatabase>
}
export interface TableFn {
select(): any
update(): any
insert(): any
delete(): any
}