import { BaseModel } from "../../../common/model/base"; import { Err } from "../../../common/status/error"; import { getMysqlInstance } from "../db/mysql"; import { generateCreateSql, generateDeleteSql, generateQuerySql, generateSnowId, generateUpdateSql } from "../util/sql"; export abstract class Mapper { private model:T constructor(model:T){ this.model=model } async createConfig(info:T["model"]){} async create(info:T["model"]):Promise { if(!info || info.id){ throw Err.Common.paramError } await this.createConfig(info); info.id=await generateSnowId(); var mysql=getMysqlInstance() await mysql.execute(generateCreateSql(this.model,info)) } async getById(id:string):Promise { if(!id) { throw Err.Common.itemNotFound } var mysql=getMysqlInstance(); let ret=await mysql.executeOne(generateQuerySql(this.model,[],{id})) return ret } async updateConfig(info:T["model"]){} async update(data:T["model"]):Promise { let info:T["model"]={} Object.assign(info,data) if(!info.id) { throw Err.Common.itemNotFound } var mysql=getMysqlInstance(); await this.updateConfig(info) let id=info.id; delete info.id if(info.created_time) { delete info.created_time } if(info.modified_time) { delete info.modified_time } await mysql.execute(generateUpdateSql(this.model,info,{id})) } async delete(id):Promise { if(!id) { throw Err.Common.itemNotFound } var mysql=getMysqlInstance(); await mysql.execute(generateDeleteSql(this.model,{id})) } async copy(id):Promise { if(!id) { throw Err.Common.itemNotFound } var mysql=getMysqlInstance(); let ret=await mysql.executeOne(generateQuerySql(this.model,[],{id})) if(!ret) { throw Err.Common.itemNotFound } delete ret.created_time,ret.modified_time,ret.id await this.create(ret); let obj=this.getById(ret.id) return obj; } }