0.0.37 • Published 2 years ago

grunt-generate-database v0.0.37

Weekly downloads
31
License
Apache-2.0
Repository
github
Last release
2 years ago

grunt-generate-database

Build Status

Репозиторий, который хранит в себе плагин для создания DBWrapper, триггера и функции управления триггером с помощью typeorm и postgres

Установка

npm install grunt-generate-database

Как начать использовать

  • Создайте declaration.json в корневом каталоге
[
    {
      "db": "postgres",
      "name" : "base1",
      "dbtype" : "dbtype1",
      "dbhost" : "dbhost1",
      "dbport" : "dbport1",
      "dbusername" : "dbusername1",
      "dbpassword" : "dbpassword1",
      "dbdatabase" : "dbdatabase1",
      "pathToDBWrappers": "./dbscript",
      "schemas" : 
     [
       {
         "namespace": "testnamespace",
         "recreate":true,
         "tables":
         [
           {
             "name": "Class", 
             "pathToModel": "./models/class"
           }
         ]
       }
     ]
   }
 ]
  • Установите декораты на нужные модели.
import {Column, Entity, PrimaryGeneratedColumn} from "typeorm";
import { GenerateHistory } from "grunt-generate-history-model";

@Entity()
@GenerateHistory({"historyPath": "./test/src/model/hero"})
export class Hero {
    @PrimaryGeneratedColumn()
    public id?: number;
    @Column()
    public name: string;
    public data: string;
    @Column()
    public detailId?: number;
    @Column({"type": "integer", "array": true, "nullable": true})
    public simpleArray: number[];
}
  • В package.json добавьте инициализирующую команду в свойство "scripts":
  "scripts": {
    "generation": "generateDatabase"
  }

где "generateDatabase" - строка для запуска плагина

  • npm run generation

  • после завершения работы плагина по пути, указанному в declaration.json в свойстве "pathToDBWrappers", появятся файлы с расширением ".ts" : * DBWrapper

    import { Class } from '../../../models/class';
    import { createbase1TriggerFuncstestnamespace } from './function';
    import { createbase1Triggerstestnamespace } from './trigger';
    import * as dotenv from 'dotenv';
    import {createConnection, Connection, getManager, EntityManager} from 'typeorm';

export class testnamespaceDBWrapper {

private static connection: Connection;

public static async initialize(dropSchema?: boolean, sync?: boolean): Promise<void> {
    await this.close();

    if (! dropSchema) {
        dropSchema = false;
    }
    if (! sync) {
        sync = false;
    }

    this.connection = await this.createTables(dropSchema, sync);
    if (dropSchema) {
        await createbase1TriggerFuncstestnamespace();
        await createbase1Triggerstestnamespace();
    }
}

private static async createTables(dropSchema?: boolean, sync?: boolean) {
    return await createConnection({
        name: 'testnamespace',
        type: 'postgres',
        replication: {
            master: {
                host:  process.env.dbhost1,
                port: parseInt(process.env.dbport1, 10),
                username:  process.env.dbusername1,
                password: process.env.dbpassword1,
                database: process.env.dbdatabase1
            },
            slaves: []
        },
        entities: [
        Class

], schema: 'testnamespace', synchronize: sync, dropSchema: dropSchema }); } public static getEntityManager (): EntityManager { return getManager('testnamespace'); }

public static async close(): Promise<void> {
    if (this.connection) {
        await this.connection.close();
        this.connection = null;
    }
}

}

  * Триггерная функция(пустая в примере в связи с отсутствием модели логирования)
```typescript
import {createConnection, ConnectionOptions} from 'typeorm';


export async function createbase1TriggerFuncstestnamespace() {
const pgp = require('pg-promise')({});
await pgp.end();
const connectionString = 'postgres://' + process.env.dbusername1 + ':' +
process.env.dbpassword1 + '@' + process.env.dbhost1 + ':' + process.env.dbport1 + '/' + process.env.dbdatabase1;

const db = pgp(connectionString);
let queryproc = '';
pgp.end();

}
  • Триггер
import {createConnection, ConnectionOptions} from 'typeorm';


export async function createbase1Triggerstestnamespace() {
    const pgp = require('pg-promise')({});
    await pgp.end();
    const connectionString = 'postgres://' + process.env.dbusername1 + ':' +
    process.env.dbpassword1 + '@' + process.env.dbhost1 + ':' + process.env.dbport1 + '/' + process.env.dbdatabase1;
    const db = pgp(connectionString);
    let queryproc;
    let lowerStringName;
    let lowewrStringSchema;
    pgp.end();
}

Примечания к файлу конфигурации

  • Поле "db" имеет два значения : "mongo" и "postgres"
  • Значениями полей ,начинающихся с db(кроме поля "db") являются названия переменных в объекте process.env
  • Элементом массива является описание отдельной базы данных.
  • Свойства с префиксом db являются параметрами подключения к базе.
  • namespace отображает имя схемы в базе данных.
  • Массив tables показывает какие таблицы будут использоваться при работе со схемой.
  • У каждого элемента table существует опциональное поле historyPath, которое показывает есть ли у модели модель логирования.
  • Желательно для создания моделей логирования использовать npm пакет grunt-generate-history-model и его декораторы, а не созданные вручную модели логирования.
  • При использовании npm пакета для создания моделей логирования не обязательно указывать путь к моделям логирования в конфигурации.
0.0.37

2 years ago

0.0.36

2 years ago

0.0.34

2 years ago

0.0.35

2 years ago

0.0.33

2 years ago

0.0.32

2 years ago

0.0.31

2 years ago

0.0.30

3 years ago

0.0.29

3 years ago

0.0.28

3 years ago

0.0.27

4 years ago

0.0.26

4 years ago

0.0.25

4 years ago

0.0.24

4 years ago

0.0.23

4 years ago

0.0.22

4 years ago

0.0.21

5 years ago

0.0.20

5 years ago

0.0.19

5 years ago

0.0.18

6 years ago

0.0.17

6 years ago

0.0.16

6 years ago

0.0.15

6 years ago

0.0.14

6 years ago

0.0.13

6 years ago

0.0.12

6 years ago

0.0.10

6 years ago

0.0.9

6 years ago

0.0.8

6 years ago

0.0.7

6 years ago

0.0.6

6 years ago

0.0.5

6 years ago

0.0.4

6 years ago

0.0.3

6 years ago

0.0.2

7 years ago

0.0.1

7 years ago