Skip to content

Commit

Permalink
Merge pull request #140 from docknetwork/fix/data-store-issues
Browse files Browse the repository at this point in the history
fix/data migration for typeorm
  • Loading branch information
maycon-mello authored Aug 8, 2023
2 parents 9159b55 + 014a713 commit 1a1e2ab
Show file tree
Hide file tree
Showing 4 changed files with 113 additions and 1 deletion.
11 changes: 10 additions & 1 deletion packages/data-store/src/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {NetworkEntity} from './entities/network.entity';
import {DocumentEntity} from './entities/document/document.entity';
import {DocumentTypeEntity} from './entities/document-type.entity';
import {WalletEntity} from './entities/wallet.entity';
import typeOrmMigrations from './migrations';

export function documentHasType(document: any, type: string) {
if (Array.isArray(document.type)) {
Expand All @@ -15,7 +16,7 @@ export function documentHasType(document: any, type: string) {
return document.type === type;
}

export async function initializeTypeORM(options: DataStoreConfigs) {
export function getDataSource(options: DataStoreConfigs) {
const dataSource = new DataSource({
type: (options.dbType as any) || 'sqlite',
database: options.databasePath,
Expand All @@ -24,9 +25,17 @@ export async function initializeTypeORM(options: DataStoreConfigs) {
dropSchema: options.dropSchema,
driver: options.driver,
sqlJsConfig: options.sqlJsConfig,
migrationsRun: process.env.NODE_ENV === 'test',
migrations: typeOrmMigrations,
...(options.typeORMConfigs || {}),
});

return dataSource;
}

export async function initializeTypeORM(options: DataStoreConfigs) {
const dataSource = getDataSource(options);

await dataSource
.initialize()
.then(() => {
Expand Down
6 changes: 6 additions & 0 deletions packages/data-store/src/migrations-data-source.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import {getDataSource} from './helpers';

export default getDataSource({
dbType: 'sqlite',
databasePath: 'data-store.sqlite',
});
94 changes: 94 additions & 0 deletions packages/data-store/src/migrations/1691498362273-bootstrap.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
import {MigrationInterface, QueryRunner} from 'typeorm';

export class Bootstrap1691498362273 implements MigrationInterface {
name = 'Bootstrap1691498362273';

public async up(queryRunner: QueryRunner): Promise<void> {
console.log('Running table bootstrap migration');

try {
const result = await queryRunner.query(`SELECT * FROM "network_entity"`);
console.log('Table already bootstrapped');
console.log(result);
return;
} catch (err) {
console.error(err);
}

console.log('Running table bootstrap migration');

await queryRunner.query(
`CREATE TABLE "network_entity" ("id" varchar PRIMARY KEY NOT NULL, "name" varchar NOT NULL, "configs" varchar NOT NULL)`,
);
await queryRunner.query(
`CREATE TABLE "document_type_entity" ("id" text PRIMARY KEY NOT NULL)`,
);
await queryRunner.query(
`CREATE TABLE "document_entity" ("id" text PRIMARY KEY NOT NULL, "networkId" text, "type" text NOT NULL, "correlation" text NOT NULL, "data" blob NOT NULL)`,
);
await queryRunner.query(
`CREATE TABLE "wallet_entity" ("id" varchar PRIMARY KEY NOT NULL, "version" varchar, "networkId" varchar NOT NULL)`,
);
await queryRunner.query(
`CREATE TABLE "document_entity__type_rel_document_type_entity" ("documentEntityId" text NOT NULL, "documentTypeEntityId" text NOT NULL, PRIMARY KEY ("documentEntityId", "documentTypeEntityId"))`,
);
await queryRunner.query(
`CREATE INDEX "IDX_e929f32563f62d753a51bcd8b9" ON "document_entity__type_rel_document_type_entity" ("documentEntityId") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_7d377ef9ddb323247aedd63d66" ON "document_entity__type_rel_document_type_entity" ("documentTypeEntityId") `,
);
await queryRunner.query(`DROP INDEX "IDX_e929f32563f62d753a51bcd8b9"`);
await queryRunner.query(`DROP INDEX "IDX_7d377ef9ddb323247aedd63d66"`);
await queryRunner.query(
`CREATE TABLE "temporary_document_entity__type_rel_document_type_entity" ("documentEntityId" text NOT NULL, "documentTypeEntityId" text NOT NULL, CONSTRAINT "FK_e929f32563f62d753a51bcd8b9b" FOREIGN KEY ("documentEntityId") REFERENCES "document_entity" ("id") ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT "FK_7d377ef9ddb323247aedd63d663" FOREIGN KEY ("documentTypeEntityId") REFERENCES "document_type_entity" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, PRIMARY KEY ("documentEntityId", "documentTypeEntityId"))`,
);
await queryRunner.query(
`INSERT INTO "temporary_document_entity__type_rel_document_type_entity"("documentEntityId", "documentTypeEntityId") SELECT "documentEntityId", "documentTypeEntityId" FROM "document_entity__type_rel_document_type_entity"`,
);
await queryRunner.query(
`DROP TABLE "document_entity__type_rel_document_type_entity"`,
);
await queryRunner.query(
`ALTER TABLE "temporary_document_entity__type_rel_document_type_entity" RENAME TO "document_entity__type_rel_document_type_entity"`,
);
await queryRunner.query(
`CREATE INDEX "IDX_e929f32563f62d753a51bcd8b9" ON "document_entity__type_rel_document_type_entity" ("documentEntityId") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_7d377ef9ddb323247aedd63d66" ON "document_entity__type_rel_document_type_entity" ("documentTypeEntityId") `,
);
}

public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`DROP INDEX "IDX_7d377ef9ddb323247aedd63d66"`);
await queryRunner.query(`DROP INDEX "IDX_e929f32563f62d753a51bcd8b9"`);
await queryRunner.query(
`ALTER TABLE "document_entity__type_rel_document_type_entity" RENAME TO "temporary_document_entity__type_rel_document_type_entity"`,
);
await queryRunner.query(
`CREATE TABLE "document_entity__type_rel_document_type_entity" ("documentEntityId" text NOT NULL, "documentTypeEntityId" text NOT NULL, PRIMARY KEY ("documentEntityId", "documentTypeEntityId"))`,
);
await queryRunner.query(
`INSERT INTO "document_entity__type_rel_document_type_entity"("documentEntityId", "documentTypeEntityId") SELECT "documentEntityId", "documentTypeEntityId" FROM "temporary_document_entity__type_rel_document_type_entity"`,
);
await queryRunner.query(
`DROP TABLE "temporary_document_entity__type_rel_document_type_entity"`,
);
await queryRunner.query(
`CREATE INDEX "IDX_7d377ef9ddb323247aedd63d66" ON "document_entity__type_rel_document_type_entity" ("documentTypeEntityId") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_e929f32563f62d753a51bcd8b9" ON "document_entity__type_rel_document_type_entity" ("documentEntityId") `,
);
await queryRunner.query(`DROP INDEX "IDX_7d377ef9ddb323247aedd63d66"`);
await queryRunner.query(`DROP INDEX "IDX_e929f32563f62d753a51bcd8b9"`);
await queryRunner.query(
`DROP TABLE "document_entity__type_rel_document_type_entity"`,
);
await queryRunner.query(`DROP TABLE "wallet_entity"`);
await queryRunner.query(`DROP TABLE "document_entity"`);
await queryRunner.query(`DROP TABLE "document_type_entity"`);
await queryRunner.query(`DROP TABLE "network_entity"`);
}
}
3 changes: 3 additions & 0 deletions packages/data-store/src/migrations/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import {Bootstrap1691498362273} from './1691498362273-bootstrap';

export default [Bootstrap1691498362273];

0 comments on commit 1a1e2ab

Please sign in to comment.