From 1ed095c563628b877bb04e86b851fc6094f684fc Mon Sep 17 00:00:00 2001 From: NEUDitao Date: Sat, 28 Nov 2020 11:09:16 -0500 Subject: [PATCH 1/6] initial attemt at backfill, waiting for dajin to wake up --- .../backfill/backfill-phone-notifs.command.ts | 4 +-- .../separate-first-last-names.command.ts | 36 +++++++++++++++++++ packages/server/src/profile/user.entity.ts | 6 ++++ 3 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 packages/server/src/backfill/separate-first-last-names.command.ts diff --git a/packages/server/src/backfill/backfill-phone-notifs.command.ts b/packages/server/src/backfill/backfill-phone-notifs.command.ts index d171e8994..a262bc40d 100644 --- a/packages/server/src/backfill/backfill-phone-notifs.command.ts +++ b/packages/server/src/backfill/backfill-phone-notifs.command.ts @@ -1,9 +1,9 @@ -import { Command } from 'nestjs-command'; import { Injectable } from '@nestjs/common'; +import { Command } from 'nestjs-command'; import { PhoneNotifModel } from 'notification/phone-notif.entity'; -import { IsNull } from 'typeorm'; import { TwilioService } from 'notification/twilio/twilio.service'; import { UserModel } from 'profile/user.entity'; +import { IsNull } from 'typeorm'; @Injectable() export class BackfillPhoneNotifs { diff --git a/packages/server/src/backfill/separate-first-last-names.command.ts b/packages/server/src/backfill/separate-first-last-names.command.ts new file mode 100644 index 000000000..27bbeff7c --- /dev/null +++ b/packages/server/src/backfill/separate-first-last-names.command.ts @@ -0,0 +1,36 @@ +import { Injectable } from '@nestjs/common'; +import { Command } from 'nestjs-command'; +import { UserModel } from 'profile/user.entity'; + +@Injectable() +export class BackfillSeparateFirstLastNames { + @Command({ + command: 'backfill:first-last-names', + describe: 'change all names to first and last names', + autoExit: true, + }) + async fix(): Promise { + const users = await UserModel.find(); + users.forEach((user) => { + try { + return { + ...user, + name: '', + firstName: user.name.split[0], + lastName: user.name.split[1], + }; + } catch (e) { + return { + ...user, + name: '', + firstName: user.name, + lastName: '', + }; + } + }); + + await UserModel.save(users); + + console.log(`Updated user names`); + } +} diff --git a/packages/server/src/profile/user.entity.ts b/packages/server/src/profile/user.entity.ts index d84e7b1b3..d2ccbd1ec 100644 --- a/packages/server/src/profile/user.entity.ts +++ b/packages/server/src/profile/user.entity.ts @@ -25,6 +25,12 @@ export class UserModel extends BaseEntity { @Column('text') name: string; + @Column('text') + firstName: string; + + @Column('text') + lastName: string; + @Column('text') photoURL: string; From 290b5fba23ff40e5a7e9240ddcdd706a220dc9b1 Mon Sep 17 00:00:00 2001 From: NEUDitao Date: Sat, 28 Nov 2020 18:59:07 -0500 Subject: [PATCH 2/6] made the backfill less cringe --- .../server/src/backfill/backfill.module.ts | 7 ++++++- .../separate-first-last-names.command.ts | 18 +++++------------- packages/server/src/login/login.controller.ts | 2 ++ packages/server/src/profile/user.entity.ts | 4 ++-- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/packages/server/src/backfill/backfill.module.ts b/packages/server/src/backfill/backfill.module.ts index ac539b7bc..272a64530 100644 --- a/packages/server/src/backfill/backfill.module.ts +++ b/packages/server/src/backfill/backfill.module.ts @@ -2,9 +2,14 @@ import { Module } from '@nestjs/common'; import { NotificationModule } from 'notification/notification.module'; import { BackfillPhoneNotifs } from './backfill-phone-notifs.command'; import { BackfillQuestionFirstHelpedAt } from './question-first-helped-at.command'; +import { BackfillSeparateFirstLastNames } from './separate-first-last-names.command'; @Module({ imports: [NotificationModule], - providers: [BackfillPhoneNotifs, BackfillQuestionFirstHelpedAt], + providers: [ + BackfillPhoneNotifs, + BackfillQuestionFirstHelpedAt, + BackfillSeparateFirstLastNames, + ], }) export class BackfillModule {} diff --git a/packages/server/src/backfill/separate-first-last-names.command.ts b/packages/server/src/backfill/separate-first-last-names.command.ts index 27bbeff7c..37b0d1988 100644 --- a/packages/server/src/backfill/separate-first-last-names.command.ts +++ b/packages/server/src/backfill/separate-first-last-names.command.ts @@ -13,24 +13,16 @@ export class BackfillSeparateFirstLastNames { const users = await UserModel.find(); users.forEach((user) => { try { - return { - ...user, - name: '', - firstName: user.name.split[0], - lastName: user.name.split[1], - }; + user.firstName = user.name.split(' ')[0]; + user.lastName = user.name.split(' ').slice(1).join(' '); } catch (e) { - return { - ...user, - name: '', - firstName: user.name, - lastName: '', - }; + user.firstName = user.name; } }); await UserModel.save(users); + const count = UserModel.count(); - console.log(`Updated user names`); + console.log(`Updated names for ${count} users`); } } diff --git a/packages/server/src/login/login.controller.ts b/packages/server/src/login/login.controller.ts index 24d528e04..3f1ace10d 100644 --- a/packages/server/src/login/login.controller.ts +++ b/packages/server/src/login/login.controller.ts @@ -69,6 +69,8 @@ export class LoginController { // Q: Do we need this if it's not going to change? user = Object.assign(user, { email: body.email, + firstName: body.first_name, + lastName: body.last_name, name: body.first_name + ' ' + body.last_name, photoURL: '', }); diff --git a/packages/server/src/profile/user.entity.ts b/packages/server/src/profile/user.entity.ts index d2ccbd1ec..80a635767 100644 --- a/packages/server/src/profile/user.entity.ts +++ b/packages/server/src/profile/user.entity.ts @@ -25,10 +25,10 @@ export class UserModel extends BaseEntity { @Column('text') name: string; - @Column('text') + @Column('text', { nullable: true }) firstName: string; - @Column('text') + @Column('text', { nullable: true }) lastName: string; @Column('text') From f15518106e0eae1f924964e48f4adb245c4c812e Mon Sep 17 00:00:00 2001 From: NEUDitao Date: Sat, 28 Nov 2020 19:17:51 -0500 Subject: [PATCH 3/6] migration --- .../migration/1606609022417-AddFirstLastName.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 packages/server/migration/1606609022417-AddFirstLastName.ts diff --git a/packages/server/migration/1606609022417-AddFirstLastName.ts b/packages/server/migration/1606609022417-AddFirstLastName.ts new file mode 100644 index 000000000..35da539f5 --- /dev/null +++ b/packages/server/migration/1606609022417-AddFirstLastName.ts @@ -0,0 +1,15 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddFirstLastName1606609022417 implements MigrationInterface { + name = 'AddFirstLastName1606609022417'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "user_model" ADD "firstName" text`); + await queryRunner.query(`ALTER TABLE "user_model" ADD "lastName" text`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "user_model" DROP COLUMN "lastName"`); + await queryRunner.query(`ALTER TABLE "user_model" DROP COLUMN "firstName"`); + } +} From 02ce3cac7f7e77223e9ff214e405ace616b40169 Mon Sep 17 00:00:00 2001 From: NEUDitao Date: Sat, 28 Nov 2020 19:21:55 -0500 Subject: [PATCH 4/6] test snapshot updated --- .../server/src/queue/__snapshots__/queue.service.spec.ts.snap | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/server/src/queue/__snapshots__/queue.service.spec.ts.snap b/packages/server/src/queue/__snapshots__/queue.service.spec.ts.snap index b638da55a..a5707da98 100644 --- a/packages/server/src/queue/__snapshots__/queue.service.spec.ts.snap +++ b/packages/server/src/queue/__snapshots__/queue.service.spec.ts.snap @@ -10,7 +10,9 @@ ListQuestionsResponse { "createdAt": 2020-11-02T12:00:00.000Z, "creator": UserModel { "email": "user@neu.edu", + "firstName": null, "id": 1, + "lastName": null, "name": "User", "photoURL": "https://pics/user", }, @@ -45,7 +47,9 @@ ListQuestionsResponse { "creator": UserModel { "desktopNotifsEnabled": false, "email": "user@neu.edu", + "firstName": null, "id": 1, + "lastName": null, "name": "User", "phoneNotifsEnabled": false, "photoURL": "https://pics/user", From 40b2b6571d987832e1eddbd525abdd40d530aa47 Mon Sep 17 00:00:00 2001 From: NEUDitao Date: Sat, 28 Nov 2020 19:34:35 -0500 Subject: [PATCH 5/6] test snapshot updated boogaloo --- packages/server/test/__snapshots__/course.integration.ts.snap | 2 ++ packages/server/test/__snapshots__/question.integration.ts.snap | 2 ++ 2 files changed, 4 insertions(+) diff --git a/packages/server/test/__snapshots__/course.integration.ts.snap b/packages/server/test/__snapshots__/course.integration.ts.snap index 49a1b930f..4980a27fd 100644 --- a/packages/server/test/__snapshots__/course.integration.ts.snap +++ b/packages/server/test/__snapshots__/course.integration.ts.snap @@ -26,7 +26,9 @@ Object { "staffList": Array [ Object { "email": "user@neu.edu", + "firstName": null, "id": 1, + "lastName": null, "name": "User", "photoURL": "https://pics/user", }, diff --git a/packages/server/test/__snapshots__/question.integration.ts.snap b/packages/server/test/__snapshots__/question.integration.ts.snap index d9349427f..8cb17d7fe 100644 --- a/packages/server/test/__snapshots__/question.integration.ts.snap +++ b/packages/server/test/__snapshots__/question.integration.ts.snap @@ -6,7 +6,9 @@ Object { "createdAt": "2020-03-01T05:00:00.000Z", "creator": Object { "email": "user@neu.edu", + "firstName": null, "id": 1, + "lastName": null, "name": "User", "photoURL": "https://pics/user", }, From 44dcd073db7500389e55caa769895a95957f276a Mon Sep 17 00:00:00 2001 From: NEUDitao Date: Sat, 28 Nov 2020 19:40:09 -0500 Subject: [PATCH 6/6] log --- .../server/src/backfill/separate-first-last-names.command.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/server/src/backfill/separate-first-last-names.command.ts b/packages/server/src/backfill/separate-first-last-names.command.ts index 37b0d1988..93f15a01e 100644 --- a/packages/server/src/backfill/separate-first-last-names.command.ts +++ b/packages/server/src/backfill/separate-first-last-names.command.ts @@ -17,6 +17,7 @@ export class BackfillSeparateFirstLastNames { user.lastName = user.name.split(' ').slice(1).join(' '); } catch (e) { user.firstName = user.name; + console.log(`Updating name failed for ${user.name}`); } });