Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

187384622/new email model - PR2 - Add Email Address Data Migration Script #50

Merged
merged 4 commits into from
Apr 15, 2024

Conversation

perryzjc
Copy link
Member

@perryzjc perryzjc commented Apr 13, 2024

Pivotal Tracker Link

What this PR does:

This pull request is the second in a series intended to facilitate easier code review. The first PR can be found here. For this PR, there is only one file change, which aims to safely migrate the email address data (email & personal_email) in the teacher model to the new email_address model (no deletion of emails from Teacher model), with comprehensive logging

Include screenshots, videos, etc.

Below are some screenshots of testing the db before & after running the script.

Before Script: 50 teachers with original teacher model & 2 teachers (the admins) with email addresses already in the email_address model

The testing data was generated by the below command, and the seed data in the PR1
The command:

# Generate 50 sample Teacher records
50.times do |i|
 Teacher.create(
 first_name: "First#{i}",
 last_name: "Last#{i}",
 admin: i.even?, # Alternate true/false
 status: 0, # Assuming '0' is a valid status
 application_status: "Not Reviewed",
 school: School.find_or_create_by(name: "UC Berkeley"),
 email: "user#{i}@berkeley.edu", # Unique email for each teacher
 personal_email:  "user_personal_email_#{i}@berkeley.edu"
 )
end
After this command
image
DB State for Teacher
image
DB State for EmailAddress
image
Frontend View Effect
image image

After Script: 50 teachers with original teacher model & 2 teachers (the admins) with email addresses already in the email_address model

After running the script with the command rake email_address_migration:migrate_email_addresses, the output is

(base) jingchaozhong@wifi-10-44-13-243 BJC-Teacher-Tracker-App % rake email_address_migration:migrate_email_addresses
[INFO] Processing Teacher ID: 1, Name: Michael Ball
[ERROR] Failed to migrate email [email protected] for Teacher ID: 1: Email has already been taken, Primary There can only be one primary email per teacher.
[INFO] Failed email [email protected] remains at Teacher model and has not been removed due to migration errors.
[INFO] Processing Teacher ID: 2, Name: Lauren Mock
[ERROR] Failed to migrate email [email protected] for Teacher ID: 2: Email has already been taken, Primary There can only be one primary email per teacher.
[INFO] Failed email [email protected] remains at Teacher model and has not been removed due to migration errors.
[INFO] Processing Teacher ID: 3, Name: First0 Last0
[INFO] Successfully migrated email [email protected] for Teacher ID: 3
[INFO] Successfully migrated email [email protected] for Teacher ID: 3
[INFO] Processing Teacher ID: 4, Name: First1 Last1
[INFO] Successfully migrated email [email protected] for Teacher ID: 4
[INFO] Successfully migrated email [email protected] for Teacher ID: 4
[INFO] Processing Teacher ID: 5, Name: First2 Last2
[INFO] Successfully migrated email [email protected] for Teacher ID: 5
[INFO] Successfully migrated email [email protected] for Teacher ID: 5
[INFO] Processing Teacher ID: 6, Name: First3 Last3
[INFO] Successfully migrated email [email protected] for Teacher ID: 6
[INFO] Successfully migrated email [email protected] for Teacher ID: 6
[INFO] Processing Teacher ID: 7, Name: First4 Last4
[INFO] Successfully migrated email [email protected] for Teacher ID: 7
[INFO] Successfully migrated email [email protected] for Teacher ID: 7
[INFO] Processing Teacher ID: 8, Name: First5 Last5
[INFO] Successfully migrated email [email protected] for Teacher ID: 8
[INFO] Successfully migrated email [email protected] for Teacher ID: 8
[INFO] Processing Teacher ID: 9, Name: First6 Last6
[INFO] Successfully migrated email [email protected] for Teacher ID: 9
[INFO] Successfully migrated email [email protected] for Teacher ID: 9
[INFO] Processing Teacher ID: 10, Name: First7 Last7
[INFO] Successfully migrated email [email protected] for Teacher ID: 10
[INFO] Successfully migrated email [email protected] for Teacher ID: 10
[INFO] Processing Teacher ID: 11, Name: First8 Last8
[INFO] Successfully migrated email [email protected] for Teacher ID: 11
[INFO] Successfully migrated email [email protected] for Teacher ID: 11
[INFO] Processing Teacher ID: 12, Name: First9 Last9
[INFO] Successfully migrated email [email protected] for Teacher ID: 12
[INFO] Successfully migrated email [email protected] for Teacher ID: 12
[INFO] Processing Teacher ID: 13, Name: First10 Last10
[INFO] Successfully migrated email [email protected] for Teacher ID: 13
[INFO] Successfully migrated email [email protected] for Teacher ID: 13
[INFO] Processing Teacher ID: 14, Name: First11 Last11
[INFO] Successfully migrated email [email protected] for Teacher ID: 14
[INFO] Successfully migrated email [email protected] for Teacher ID: 14
[INFO] Processing Teacher ID: 15, Name: First12 Last12
[INFO] Successfully migrated email [email protected] for Teacher ID: 15
[INFO] Successfully migrated email [email protected] for Teacher ID: 15
[INFO] Processing Teacher ID: 16, Name: First13 Last13
[INFO] Successfully migrated email [email protected] for Teacher ID: 16
[INFO] Successfully migrated email [email protected] for Teacher ID: 16
[INFO] Processing Teacher ID: 17, Name: First14 Last14
[INFO] Successfully migrated email [email protected] for Teacher ID: 17
[INFO] Successfully migrated email [email protected] for Teacher ID: 17
[INFO] Processing Teacher ID: 18, Name: First15 Last15
[INFO] Successfully migrated email [email protected] for Teacher ID: 18
[INFO] Successfully migrated email [email protected] for Teacher ID: 18
[INFO] Processing Teacher ID: 19, Name: First16 Last16
[INFO] Successfully migrated email [email protected] for Teacher ID: 19
[INFO] Successfully migrated email [email protected] for Teacher ID: 19
[INFO] Processing Teacher ID: 20, Name: First17 Last17
[INFO] Successfully migrated email [email protected] for Teacher ID: 20
[INFO] Successfully migrated email [email protected] for Teacher ID: 20
[INFO] Processing Teacher ID: 21, Name: First18 Last18
[INFO] Successfully migrated email [email protected] for Teacher ID: 21
[INFO] Successfully migrated email [email protected] for Teacher ID: 21
[INFO] Processing Teacher ID: 22, Name: First19 Last19
[INFO] Successfully migrated email [email protected] for Teacher ID: 22
[INFO] Successfully migrated email [email protected] for Teacher ID: 22
[INFO] Processing Teacher ID: 23, Name: First20 Last20
[INFO] Successfully migrated email [email protected] for Teacher ID: 23
[INFO] Successfully migrated email [email protected] for Teacher ID: 23
[INFO] Processing Teacher ID: 24, Name: First21 Last21
[INFO] Successfully migrated email [email protected] for Teacher ID: 24
[INFO] Successfully migrated email [email protected] for Teacher ID: 24
[INFO] Processing Teacher ID: 25, Name: First22 Last22
[INFO] Successfully migrated email [email protected] for Teacher ID: 25
[INFO] Successfully migrated email [email protected] for Teacher ID: 25
[INFO] Processing Teacher ID: 26, Name: First23 Last23
[INFO] Successfully migrated email [email protected] for Teacher ID: 26
[INFO] Successfully migrated email [email protected] for Teacher ID: 26
[INFO] Processing Teacher ID: 27, Name: First24 Last24
[INFO] Successfully migrated email [email protected] for Teacher ID: 27
[INFO] Successfully migrated email [email protected] for Teacher ID: 27
[INFO] Processing Teacher ID: 28, Name: First25 Last25
[INFO] Successfully migrated email [email protected] for Teacher ID: 28
[INFO] Successfully migrated email [email protected] for Teacher ID: 28
[INFO] Processing Teacher ID: 29, Name: First26 Last26
[INFO] Successfully migrated email [email protected] for Teacher ID: 29
[INFO] Successfully migrated email [email protected] for Teacher ID: 29
[INFO] Processing Teacher ID: 30, Name: First27 Last27
[INFO] Successfully migrated email [email protected] for Teacher ID: 30
[INFO] Successfully migrated email [email protected] for Teacher ID: 30
[INFO] Processing Teacher ID: 31, Name: First28 Last28
[INFO] Successfully migrated email [email protected] for Teacher ID: 31
[INFO] Successfully migrated email [email protected] for Teacher ID: 31
[INFO] Processing Teacher ID: 32, Name: First29 Last29
[INFO] Successfully migrated email [email protected] for Teacher ID: 32
[INFO] Successfully migrated email [email protected] for Teacher ID: 32
[INFO] Processing Teacher ID: 33, Name: First30 Last30
[INFO] Successfully migrated email [email protected] for Teacher ID: 33
[INFO] Successfully migrated email [email protected] for Teacher ID: 33
[INFO] Processing Teacher ID: 34, Name: First31 Last31
[INFO] Successfully migrated email [email protected] for Teacher ID: 34
[INFO] Successfully migrated email [email protected] for Teacher ID: 34
[INFO] Processing Teacher ID: 35, Name: First32 Last32
[INFO] Successfully migrated email [email protected] for Teacher ID: 35
[INFO] Successfully migrated email [email protected] for Teacher ID: 35
[INFO] Processing Teacher ID: 36, Name: First33 Last33
[INFO] Successfully migrated email [email protected] for Teacher ID: 36
[INFO] Successfully migrated email [email protected] for Teacher ID: 36
[INFO] Processing Teacher ID: 37, Name: First34 Last34
[INFO] Successfully migrated email [email protected] for Teacher ID: 37
[INFO] Successfully migrated email [email protected] for Teacher ID: 37
[INFO] Processing Teacher ID: 38, Name: First35 Last35
[INFO] Successfully migrated email [email protected] for Teacher ID: 38
[INFO] Successfully migrated email [email protected] for Teacher ID: 38
[INFO] Processing Teacher ID: 39, Name: First36 Last36
[INFO] Successfully migrated email [email protected] for Teacher ID: 39
[INFO] Successfully migrated email [email protected] for Teacher ID: 39
[INFO] Processing Teacher ID: 40, Name: First37 Last37
[INFO] Successfully migrated email [email protected] for Teacher ID: 40
[INFO] Successfully migrated email [email protected] for Teacher ID: 40
[INFO] Processing Teacher ID: 41, Name: First38 Last38
[INFO] Successfully migrated email [email protected] for Teacher ID: 41
[INFO] Successfully migrated email [email protected] for Teacher ID: 41
[INFO] Processing Teacher ID: 42, Name: First39 Last39
[INFO] Successfully migrated email [email protected] for Teacher ID: 42
[INFO] Successfully migrated email [email protected] for Teacher ID: 42
[INFO] Processing Teacher ID: 43, Name: First40 Last40
[INFO] Successfully migrated email [email protected] for Teacher ID: 43
[INFO] Successfully migrated email [email protected] for Teacher ID: 43
[INFO] Processing Teacher ID: 44, Name: First41 Last41
[INFO] Successfully migrated email [email protected] for Teacher ID: 44
[INFO] Successfully migrated email [email protected] for Teacher ID: 44
[INFO] Processing Teacher ID: 45, Name: First42 Last42
[INFO] Successfully migrated email [email protected] for Teacher ID: 45
[INFO] Successfully migrated email [email protected] for Teacher ID: 45
[INFO] Processing Teacher ID: 46, Name: First43 Last43
[INFO] Successfully migrated email [email protected] for Teacher ID: 46
[INFO] Successfully migrated email [email protected] for Teacher ID: 46
[INFO] Processing Teacher ID: 47, Name: First44 Last44
[INFO] Successfully migrated email [email protected] for Teacher ID: 47
[INFO] Successfully migrated email [email protected] for Teacher ID: 47
[INFO] Processing Teacher ID: 48, Name: First45 Last45
[INFO] Successfully migrated email [email protected] for Teacher ID: 48
[INFO] Successfully migrated email [email protected] for Teacher ID: 48
[INFO] Processing Teacher ID: 49, Name: First46 Last46
[INFO] Successfully migrated email [email protected] for Teacher ID: 49
[INFO] Successfully migrated email [email protected] for Teacher ID: 49
[INFO] Processing Teacher ID: 50, Name: First47 Last47
[INFO] Successfully migrated email [email protected] for Teacher ID: 50
[INFO] Successfully migrated email [email protected] for Teacher ID: 50
[INFO] Processing Teacher ID: 51, Name: First48 Last48
[INFO] Successfully migrated email [email protected] for Teacher ID: 51
[INFO] Successfully migrated email [email protected] for Teacher ID: 51
[INFO] Processing Teacher ID: 52, Name: First49 Last49
[INFO] Successfully migrated email [email protected] for Teacher ID: 52
[INFO] Successfully migrated email [email protected] for Teacher ID: 52
[INFO] Migration summary: Total emails processed: 102, Migrated: 100, Failed: 2, Skipped: 0
[INFO] Detailed failed migrations:
[ERROR] Failed email: [email protected], Errors: Email has already been taken, Primary There can only be one primary email per teacher.
[ERROR] Failed email: [email protected], Errors: Email has already been taken, Primary There can only be one primary email per teacher.
(base) jingchaozhong@wifi-10-44-13-243 BJC-Teacher-Tracker-App % 
DB State for Teacher
image
DB State for EmailAddress
image ##### Frontend View Effect image image

Who authored this PR?

  1. Perry (Jingchao) Zhong @perryzjc
  2. Michael Tao @realmichaeltao

How should this PR be tested?

  • Is there a deploy we can view?
  • What do the specs/features test?
  • Are there edge cases to watch out for?

YES, there are edge cases.

  1. For example, the original teacher model didn't have email validation, but now it does for the new email_address model. So, a potential case might be when the script trying to migrate the email from teacher to email_address could fail. Based on the discussion with Professor Ball @cycomachead, he wants to see a report of these, such as how many emails migrated successfully, and which failed. For safety and the advice from Michael, this script doesn't remove emails from Teacher. They will be removed at next PR which drops the email& personal_email column from Teacher
  2. For email migration, both email and personal_email should successfully get migrated to EmailAddress

Are there any complications to deploying this?

This script touches the db, but it doesn't hurt existing data (no deletions for existing data). Check my above testings.

Checklist:

  • Has this been deployed to a staging environment or reviewed by a customer?
  • Tag someone for code review (either a coach / team member)
  • I have renamed the branch to match PivotTracker's suggested one (necessary for BlueJay) (e.g. michael/12345-add-new-feature Any branch name will do as long as the story ID is there. You can use git checkout -b [new-branch-name])

@perryzjc perryzjc marked this pull request as ready for review April 13, 2024 19:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants