mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
9628253fd8
Summary: There is a new column in users table called ref (user reference). It holds user's unique reference number that can be used for features that require some kind of ownership logic (like comments). Test Plan: Updated tests Reviewers: georgegevoian, paulfitz Reviewed By: georgegevoian, paulfitz Differential Revision: https://phab.getgrist.com/D3641
34 lines
1.3 KiB
TypeScript
34 lines
1.3 KiB
TypeScript
import {User} from 'app/gen-server/entity/User';
|
|
import {makeId} from 'app/server/lib/idUtils';
|
|
import {MigrationInterface, QueryRunner, TableColumn} from "typeorm";
|
|
|
|
export class UserUUID1663851423064 implements MigrationInterface {
|
|
public async up(queryRunner: QueryRunner): Promise<any> {
|
|
// Add ref column, for now make it nullable and not unique, we
|
|
// first need to put a value in it for all existing users.
|
|
await queryRunner.addColumn("users", new TableColumn({
|
|
name: "ref",
|
|
type: 'varchar',
|
|
isNullable: true,
|
|
isUnique: false,
|
|
}));
|
|
|
|
// Updating so many rows in a multiple queries is not ideal. We will send updates in chunks.
|
|
// 300 seems to be a good number, for 24k rows we have 80 queries.
|
|
const userList = await queryRunner.manager.createQueryBuilder()
|
|
.select("users")
|
|
.from(User, "users")
|
|
.getMany();
|
|
userList.forEach(u => u.ref = makeId());
|
|
await queryRunner.manager.save(userList, { chunk: 300 });
|
|
|
|
// We are not making this column unique yet, because it can fail
|
|
// if there are some old workers still running, and any new user
|
|
// is created. We will make it unique in a later migration.
|
|
}
|
|
|
|
public async down(queryRunner: QueryRunner): Promise<any> {
|
|
await queryRunner.dropColumn("users", "ref");
|
|
}
|
|
}
|