lrf 10 months ago
parent
commit
d9345af055

+ 1 - 1
src/controller/home.controller.ts

@@ -8,7 +8,7 @@ export class HomeController {
   @Get('/')
   async home(): Promise<any> {
     // const result: any = await this.adminService.create();
-    const res = await this.service.initData();
+    const res = await this.service.DBTransaction();
     return res;
     // return 'starting...';
   }

+ 1 - 0
src/entity/platform/achievement.entity.ts

@@ -2,6 +2,7 @@ import { Column, Entity } from 'typeorm';
 import { BaseModel } from '../../frame/BaseModel';
 import * as dayjs from 'dayjs';
 // 成果需要与用户连接,否则就只能属于平台的了
+// 成果
 @Entity('achievement')
 export class Achievement extends BaseModel {
   @Column({ type: 'integer', nullable: true, comment: '平台用户id' })

+ 1 - 0
src/entity/platform/chat.entity.ts

@@ -1,6 +1,7 @@
 import { Entity, Column } from 'typeorm';
 import { BaseModel } from '../../frame/BaseModel';
 import * as dayjs from 'dayjs';
+// 聊天
 @Entity('chat')
 export class Chat extends BaseModel {
   @Column({ type: 'integer', comment: '发送者id' })

+ 1 - 0
src/entity/platform/collection.entity.ts

@@ -1,6 +1,7 @@
 import { Column, Entity } from 'typeorm';
 import { BaseModel } from '../../frame/BaseModel';
 import * as dayjs from 'dayjs';
+// 收藏
 @Entity('collection')
 export class Collection extends BaseModel {
   @Column({ type: 'integer', nullable: true, comment: '平台用户id' })

+ 1 - 1
src/entity/platform/demand.entity.ts

@@ -1,6 +1,6 @@
 import { Entity, Column } from 'typeorm';
 import { BaseModel } from '../../frame/BaseModel';
-
+// 需求
 @Entity('demand')
 export class Demand extends BaseModel {
   @Column({ type: 'integer', nullable: true, comment: '平台用户id' })

+ 1 - 1
src/entity/platform/design.entity.ts

@@ -1,6 +1,6 @@
 import { Entity, Column } from 'typeorm';
 import { BaseModel } from '../../frame/BaseModel';
-
+// 平台设置
 @Entity('design')
 export class Design extends BaseModel {
   @Column({ type: 'character varying', nullable: true, comment: '标题' })

+ 1 - 1
src/entity/platform/match.entity.ts

@@ -1,6 +1,6 @@
 import { Entity, Column } from 'typeorm';
 import { BaseModel } from '../../frame/BaseModel';
-
+//赛事
 @Entity('match')
 export class Match extends BaseModel {
   @Column({ type: 'integer', nullable: true, comment: '平台用户id' })

+ 1 - 0
src/entity/platform/news.entity.ts

@@ -1,6 +1,7 @@
 import { Entity, Column } from 'typeorm';
 import { BaseModel } from '../../frame/BaseModel';
 import * as dayjs from 'dayjs';
+// 新闻
 @Entity('news')
 export class News extends BaseModel {
   @Column({ type: 'character varying', nullable: true, comment: '标题' })

+ 1 - 1
src/entity/platform/project.entity.ts

@@ -1,6 +1,6 @@
 import { Entity, Column } from 'typeorm';
 import { BaseModel } from '../../frame/BaseModel';
-
+//项目
 @Entity('project')
 export class Project extends BaseModel {
   @Column({ type: 'integer', nullable: true, comment: '平台用户id' })

+ 1 - 1
src/entity/platform/sign.entity.ts

@@ -1,6 +1,6 @@
 import { Entity, Column } from 'typeorm';
 import { BaseModel } from '../../frame/BaseModel';
-
+//赛事报名
 @Entity('sign')
 export class Sign extends BaseModel {
   @Column({ type: 'integer', nullable: true, comment: '平台用户id' })

+ 1 - 1
src/entity/platform/supply.entity.ts

@@ -1,6 +1,6 @@
 import { Entity, Column } from 'typeorm';
 import { BaseModel } from '../../frame/BaseModel';
-
+// 供给
 @Entity('supply')
 export class Supply extends BaseModel {
   @Column({ type: 'integer', nullable: true, comment: '平台用户id' })

+ 1 - 1
src/entity/platform/tags.entity.ts

@@ -1,6 +1,6 @@
 import { Entity, Column } from 'typeorm';
 import { BaseModel } from '../../frame/BaseModel';
-
+// 标签
 @Entity('tags')
 export class Tags extends BaseModel {
   @Column({ type: 'character varying', nullable: true, comment: '标题' })

+ 1 - 1
src/entity/system/admin.entity.ts

@@ -1,7 +1,7 @@
 import { Column, Entity } from 'typeorm';
 import { BaseModel } from '../../frame/BaseModel';
 import * as bcrypt from 'bcryptjs';
-
+// 管理员
 @Entity('admin')
 export class Admin extends BaseModel {
   @Column({ type: 'character varying', nullable: true, comment: '管理员名称' })

+ 1 - 1
src/entity/system/dept.entity.ts

@@ -1,6 +1,6 @@
 import { Column, Entity } from 'typeorm';
 import { BaseModel } from '../../frame/BaseModel';
-
+// 部门
 @Entity('dept', { comment: '部门' })
 export class Dept extends BaseModel {
   @Column({ type: 'character varying', comment: '部门名称' })

+ 1 - 1
src/entity/system/dictData.entity.ts

@@ -1,6 +1,6 @@
 import { Column, Entity } from 'typeorm';
 import { BaseModel } from '../../frame/BaseModel';
-
+// 字典数据表
 @Entity('dictData')
 export class DictData extends BaseModel {
   @Column({ type: 'character varying', comment: '字典类型编码' })

+ 1 - 1
src/entity/system/dictType.entity.ts

@@ -1,6 +1,6 @@
 import { Column, Entity } from 'typeorm';
 import { BaseModel } from '../../frame/BaseModel';
-
+// 字典类型表
 @Entity('dictType')
 export class DictType extends BaseModel {
   @Column({ type: 'character varying', comment: '字典类型名称' })

+ 1 - 0
src/entity/system/menus.entity.ts

@@ -6,6 +6,7 @@ import { BaseModel } from '../../frame/BaseModel';
 //   code: '页面功能编码';
 //   controller_code: '接口函数名路径';
 // }
+// 菜单表
 @Entity('menus')
 export class Menus extends BaseModel {
   @Column({ type: 'character varying', comment: '目录名称' })

+ 1 - 1
src/entity/system/role.entity.ts

@@ -1,6 +1,6 @@
 import { Column, Entity } from 'typeorm';
 import { BaseModel } from '../../frame/BaseModel';
-
+// 角色表
 @Entity('role')
 export class Role extends BaseModel {
   @Column({ type: 'character varying', comment: '角色名称' })

+ 1 - 1
src/entity/system/user.entity.ts

@@ -1,7 +1,7 @@
 import { Column, Entity } from 'typeorm';
 import { BaseModel } from '../../frame/BaseModel';
 import * as bcrypt from 'bcryptjs';
-
+// 用户表
 @Entity('user')
 export class User extends BaseModel {
   @Column({ type: 'character varying', nullable: true, comment: '昵称' })

+ 15 - 0
src/entity/test.entity.ts

@@ -0,0 +1,15 @@
+import { Column, Entity } from 'typeorm';
+import { BaseModel } from '../frame/BaseModel';
+@Entity('test')
+export class Test extends BaseModel {
+  @Column({ type: 'character varying', nullable: true, comment: '昵称' })
+  nick_name: string;
+  @Column({ type: 'character varying', nullable: true, comment: '账号' })
+  account: string;
+  @Column({ type: 'jsonb', nullable: true, comment: '爱好' })
+  hobby: Array<any>;
+  @Column({ type: 'jsonb', nullable: true, comment: '属性' })
+  props: object;
+  @Column({ type: 'jsonb', nullable: true, comment: '数组属性' })
+  array_props: Array<object>;
+}

+ 1 - 1
src/entity/users/association.entity.ts

@@ -1,6 +1,6 @@
 import { Column, Entity } from 'typeorm';
 import { BaseModel } from '../../frame/BaseModel';
-
+// 商协会
 @Entity('association')
 export class Association extends BaseModel {
   @Column({ type: 'integer', comment: '平台用户id' })

+ 1 - 0
src/entity/users/company.entity.ts

@@ -1,6 +1,7 @@
 import { Column, Entity } from 'typeorm';
 import { BaseModel } from '../../frame/BaseModel';
 import * as dayjs from 'dayjs';
+// 企业
 @Entity('company')
 export class Company extends BaseModel {
   @Column({ type: 'integer', nullable: true, comment: '平台用户id' })

+ 1 - 1
src/entity/users/competition.entity.ts

@@ -1,6 +1,6 @@
 import { Column, Entity } from 'typeorm';
 import { BaseModel } from '../../frame/BaseModel';
-
+// 赛事管理人
 @Entity('competition')
 export class Competition extends BaseModel {
   @Column({ type: 'integer', comment: '平台用户id' })

+ 1 - 0
src/entity/users/expert.entity.ts

@@ -2,6 +2,7 @@ import { Column, Entity } from 'typeorm';
 import { BaseModel } from '../../frame/BaseModel';
 import dayjs = require('dayjs');
 // 导入的数据没有归属,只能不加权限的查询,也无法作为用户的证明
+// 专家
 @Entity('expert')
 export class Expert extends BaseModel {
   @Column({ type: 'integer', nullable: true, comment: '平台用户id' })

+ 1 - 0
src/entity/users/incubator.entity.ts

@@ -1,5 +1,6 @@
 import { Column, Entity } from 'typeorm';
 import { BaseModel } from '../../frame/BaseModel';
+//孵化器
 @Entity('incubator')
 export class Incubator extends BaseModel {
   @Column({ type: 'integer', comment: '平台用户id' })

+ 1 - 0
src/entity/users/investment.entity.ts

@@ -1,5 +1,6 @@
 import { Column, Entity } from 'typeorm';
 import { BaseModel } from '../../frame/BaseModel';
+// 投资人
 @Entity('investment')
 export class Investment extends BaseModel {
   @Column({ type: 'integer', nullable: true, comment: '平台用户id' })

+ 1 - 0
src/entity/users/state.entity.ts

@@ -1,5 +1,6 @@
 import { Column, Entity } from 'typeorm';
 import { BaseModel } from '../../frame/BaseModel';
+// 政府部门
 @Entity('state')
 export class State extends BaseModel {
   @Column({ type: 'integer', nullable: true, comment: '平台用户id' })

+ 1 - 0
src/entity/users/unit.entity.ts

@@ -1,5 +1,6 @@
 import { Column, Entity } from 'typeorm';
 import { BaseModel } from '../../frame/BaseModel';
+// 科研机构
 @Entity('unit')
 export class Unit extends BaseModel {
   @Column({ type: 'integer', nullable: true, comment: '平台用户id' })

+ 5 - 5
src/frame/BaseModel.ts

@@ -6,20 +6,20 @@ import * as dayjs from 'dayjs';
 export class BaseModel {
   /**数据id */
   @PrimaryGeneratedColumn({ type: 'integer' })
-  id: number;
+  id?: number;
 
   /**数据创建时间 */
   @CreateDateColumn({ type: 'timestamp without time zone', transformer: { from: value => dayjs(value).format('YYYY-MM-DD HH:mm:ss'), to: value => value } })
-  created_time: Date;
+  created_time?: Date;
   /**数据最后更新时间 */
   @UpdateDateColumn({ type: 'timestamp without time zone', transformer: { from: value => dayjs(value).format('YYYY-MM-DD HH:mm:ss'), to: value => value } })
-  update_time: Date;
+  update_time?: Date;
 
   /**数据创建者 */
   @Column({ type: 'character varying', nullable: true, comment: '数据创建者' })
-  data_owner: string;
+  data_owner?: string;
 
   /**数据版本 */
   @VersionColumn({ type: 'integer', default: 1 })
-  __v: number;
+  __v?: number;
 }

+ 34 - 3
src/service/util.service.ts

@@ -4,7 +4,7 @@ import { compact, get, isArray, isObject } from 'lodash';
 import path = require('path');
 import { Repository } from 'typeorm';
 // import { Achievement } from '../entity/platform/achievement.entity';
-import { InjectEntityModel } from '@midwayjs/typeorm';
+import { InjectEntityModel, TypeORMDataSourceManager } from '@midwayjs/typeorm';
 import { News } from '../entity/platform/news.entity';
 import { Demand } from '../entity/platform/demand.entity';
 import { Expert } from '../entity/users/expert.entity';
@@ -12,13 +12,13 @@ import { Company } from '../entity/users/company.entity';
 import { Context } from '@midwayjs/koa';
 import * as Excel from 'exceljs';
 import { Achievement } from '../entity/platform/achievement.entity';
+import { Test } from '../entity/test.entity';
+import { ServiceError } from '../error/service.error';
 // import { upperFirst } from 'lodash';
 
 // import { User } from '../entity/system/user.entity';
 @Provide()
 export class UtilService {
-  // @InjectEntityModel(User)
-  // uModel: ReturnModelType<typeof User>;
   @Inject()
   ctx: Context;
   randomStr(len = 6) {
@@ -34,6 +34,37 @@ export class UtilService {
     //   await this.uModel.updateOne({ _id: data.user }, { status: '0' });
     // }
   }
+  @Inject()
+  dataSourceManager: TypeORMDataSourceManager;
+  async DBTransaction() {
+    const dataSource = this.dataSourceManager.getDataSource('default');
+    const data: Test = {
+      nick_name: '测试',
+      account: `test-${new Date().getTime()}`, //
+      hobby: ['睡觉'],
+      props: { hobby: '睡觉' },
+      array_props: [{ hobby: '睡觉', lik: 'nothing' }],
+    };
+    await dataSource.transaction(async em => {
+      // 事务中的操作会依次做好,并且下一步会在上一步的基础上进行.只有整个函数执行完,才会落实到数据库中
+      // const res = await em.update(Test, { id: 1 }, { account: 'test' });
+      // const ri = await em.insert(Test, data);
+      // const r2 = await em.count(Test, { where: { account: 'test-2' } });
+      // if (r2 > 0) throw new ServiceError('data exists');
+      // const r = await em.getRepository(Test).query('select json_query(\'{"a": [1, 2, 3, 4, 5], "b": ["2", "a b"], "c": {"d": 4, "e": "ab c"}}\'::jsonb,\'$.b\');');
+      const tb = em
+        .getRepository(Test)
+        .createQueryBuilder()
+        // .where('props @> :hobby', { hobby: { hobby: '睡觉' } });
+        .where('hobby @> :hobby', { hobby: '睡觉' });
+      const tres = await tb.getOne();
+      console.log(tres);
+      // const builder = em.getRepository(Test).createQueryBuilder('test').select(['test.id', 'test.array_props']).where({ id: 1 });
+      // console.log(builder.getSql());
+      // const res = await builder.getOne();
+      // console.log(res);
+    });
+  }
 
   @InjectEntityModel(Demand)
   model: Repository<Demand>;