Refactoring: (step1 of 4) make creator of project clearer #2042
+23
−19
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Rename project "regional_delivery_officer" to "creator"
The
Project#regional_delivery_officer
association is misleading. It dates from an earlier time when only RGOs could create projects. However, today Regional Casework Services (RCSs) can also create projects and so can have theiruser.ids
set inprojects.regional_delivery_officer_id
.That's a recipe for confusion, which Laura has documented in The project's "Added by" user is wrong.
A more accurate name for this association is
Project#creator
.However, renaming a database column (in this case also a foreign key) is best done in steps to avoid errors in code or in referential integrity checks e.g. this scenario at a point during the deployment process:
projects.regional_delivery_officer_id
toprojects.creator_id
projects.creator_id
rather thanprojects.regional_delivery_officer_id
has deployed, a user attempts to create a transfer/conversion. BOOM!To avoid these errors without taking the service offline we'll perform the refactoring over 4 steps, to be performed in 4 separate deployments:
1. (THIS PR) introduce new foreign key column
projects.creator_id
column, allow to be nullprojects.creator_id
projects.creator_id
projects.creator_id
in addition to existingprojects.regional_delivery_officer_id
(e.g. when a project is created, when the 'added_by' is updated)2. back-fill new foreign key column
projects.creator_id
with existing references fromprojects.regional_delivery_officer_id
3. discontinue use of old foreign key column
projects.creator_id
non-nullableprojects.creator_id
in all places.4. remove old foreign key column