import { Provide } from '@midwayjs/core'; import { InjectEntityModel } from '@midwayjs/typeorm'; import { Repository } from 'typeorm'; import { Menus } from '../../entity/system/menus.entity'; import { get, isNull, isUndefined } from 'lodash'; import { User } from '../../entity/system/user.entity'; import { Admin } from '../../entity/system/admin.entity'; import { Achievement } from '../../entity/platform/achievement.entity'; import { Demand } from '../../entity/platform/demand.entity'; import { Design } from '../../entity/platform/design.entity'; import { Footplate } from '../../entity/platform/footplate.entity'; import { Journal } from '../../entity/platform/journal.entity'; import { Match } from '../../entity/platform/match.entity'; import { News } from '../../entity/platform/news.entity'; import { Notes } from '../../entity/platform/notes.entity'; import { Project } from '../../entity/platform/project.entity'; import { Sector } from '../../entity/platform/sector.entity'; import { Supply } from '../../entity/platform/supply.entity'; import { Support } from '../../entity/platform/support.entity'; @Provide() export class DataDealService { @InjectEntityModel(Menus) Menus: Repository; @InjectEntityModel(User) User: Repository; @InjectEntityModel(Admin) Admin: Repository; @InjectEntityModel(Achievement) Achievement: Repository; @InjectEntityModel(Demand) Demand: Repository; @InjectEntityModel(Design) Design: Repository; @InjectEntityModel(Footplate) Footplate: Repository; @InjectEntityModel(Journal) Journal: Repository; @InjectEntityModel(Match) Match: Repository; @InjectEntityModel(News) News: Repository; @InjectEntityModel(Notes) Notes: Repository; @InjectEntityModel(Project) Project: Repository; @InjectEntityModel(Sector) Sector: Repository; @InjectEntityModel(Supply) Supply: Repository; @InjectEntityModel(Support) Support: Repository; count = 0; isNoValue(val) { return isNull(val) || isUndefined(val); } async JsonbAddDefault() { // const menusRes = await this.menusModel.createQueryBuilder().where() const modelList = ['Menus', 'User', 'Admin', 'Achievement', 'Demand', 'Design', 'Footplate', 'Journal', 'Match', 'News', 'Notes', 'Project', 'Sector', 'Supply', 'Support']; // const modelList = ['Design']; for (const mn of modelList) { const model = get(this, mn); if (!model) continue; await this.getModelJsonbConfig(model); } console.log(this.count); } async getModelJsonbConfig(model) { const columns = model.metadata.columns; const defaultDataObject = {}; const props = []; for (const c of columns) { if (get(c, 'type') !== 'jsonb') continue; const propertyName = get(c, 'propertyName'); const defaultVal = get(c, 'default'); defaultDataObject[propertyName] = defaultVal; props.push(propertyName); } // console.group(get(model, 'name')); // console.log(defaultDataObject); // console.log(props); if (props.length <= 0) return; const builder = model.createQueryBuilder(); for (let i = 0; i < props.length; i++) { const prop = props[i]; if (i === 0) { builder.where(`"${prop}" Is NULL`); } else { builder.orWhere(`"${prop}" Is NULL`); } } const list = await builder.getMany(); for (const i of list) { const updateData = {}; for (const p of props) { const val = get(i, p); if (this.isNoValue(val)) updateData[p] = defaultDataObject[p]; } await model.update(i.id, updateData); this.count = this.count + 1; } // console.groupEnd(); } }