UNPKG

devfty

Version:

Devfty is a library for developer building low code factory

174 lines (163 loc) 5.9 kB
import DB_BASE from './base' export default class PB_TABLE { db: DB_BASE // 数据库 name: string // 表名 keyField: string // 主键字段 constructor(db: DB_BASE, tableName: string, keyField: string) { this.db = db this.name = tableName this.keyField = keyField if (!db.getTableData(tableName)) { db.setTableData(tableName, {}) } } insert(data: any) { const key = data?.[this.keyField] if (!key) return { code: -1, msg: '主键不存在' } const pb_table = this.db.getTableData(this.name) if (pb_table[key]) { return { code: -2, msg: `主键【${key}】重复` } } pb_table[key] = data this.db.setTableData(this.name, pb_table) return { code: 0, msg: '' } } batchInsert(data: any) { if (!Array.isArray(data)) return { code: -1, msg: '数据不存在' } let res = { code: 0, msg: '' } const pb_table = this.db.getTableData(this.name) for (let i = 0; i < data.length; i++) { const row = data[i] const key = row?.[this.keyField] if (!key) { res = { code: -1, msg: '主键不存在' } break } if (pb_table[key]) { res = { code: -2, msg: `主键【${key}】重复` } break } pb_table[key] = row } if (res.code !== 0) { return res } this.db.setTableData(this.name, pb_table) return res } delete(data: any) { const key = data?.[this.keyField] const pb_table = this.db.getTableData(this.name) if (!key) { return { code: -1, msg: '主键不存在' } } if (!pb_table[key]) { return { code: -2, msg: `记录【${key}】不存在` } } delete pb_table[key] this.db.setTableData(this.name, pb_table) return { code: 0, msg: '' } } batchDelete(data: any) { if (!Array.isArray(data)) return { code: -1, msg: '数据不存在' } let res = { code: 0, msg: '' } const pb_table = this.db.getTableData(this.name) for (let i = 0; i < data.length; i++) { const row = data[i] const key = row?.[this.keyField] if (!key) { res = { code: -1, msg: '主键不存在' } break } if (!pb_table[key]) { return { code: -2, msg: `记录【${key}】不存在` } } delete pb_table[key] } if (res.code !== 0) { return res } this.db.setTableData(this.name, pb_table) return res } select(key?: any) { const pb_table: any = this.db.getTableData(this.name) const list: any[] = [] if (typeof key === 'string' || typeof key === 'number') { if (!pb_table[key]) { return { code: -2, msg: `记录【${key}】不存在` } } list.push(pb_table[key]) } else { let o = key if (Array.isArray(o)) { const arr = o o = {} arr.reduce((a, b) => { a['name'] = b.value return 1 }, o) } for (const key in pb_table) { const row = pb_table[key] let flag: any = undefined if (typeof o === 'function') { flag = o(row, key) } else if (typeof o === 'object' && Object.keys(o).length > 0) { let equal = true for (const name in o) { if (row[name] && o[name] && `${row[name]}`.indexOf(`${o[name]}`) == -1) { equal = false break } } flag = equal } if (flag === undefined || flag) { list.push(pb_table[key]) } } } return { code: 0, msg: '', data: list } } update(data: any) { const key = data?.[this.keyField] const pb_table = this.db.getTableData(this.name) if (!pb_table[key]) { return { code: -2, msg: `记录【${key}】不存在` } } const { code } = pb_table[key] const newData = { ...pb_table[key], ...data, code } pb_table[key] = newData this.db.setTableData(this.name, pb_table) return { code: 0, msg: '', data: newData } } batchUpdate(data: any) { if (!Array.isArray(data)) return { code: -1, msg: '数据不存在' } let res = { code: 0, msg: '' } const pb_table = this.db.getTableData(this.name) for (let i = 0; i < data.length; i++) { const row = data[i] const key = row?.[this.keyField] if (!key) { res = { code: -1, msg: '主键不存在' } break } const oldRow = pb_table[key] if (!oldRow) { console.log(`[warning] batchUpdate 记录【${key}】不存在`, row) // return { code: -2, msg: `记录【${key}】不存在` } pb_table[key] = row continue } const { code } = oldRow const newRow = { ...oldRow, ...row, code } pb_table[key] = newRow } if (res.code !== 0) { return res } this.db.setTableData(this.name, pb_table) return res } }