Deleted users that awarded achievements cause invalid UserAchievements
## Problem We observed that the `awardedByUser` field on the `UserAchievement` type can error out because of `null` values on this non-nullable field. ```json "errors": [ { "message": "Cannot return null for non-nullable field UserAchievement.awardedByUser" } ] ``` The relation on the `UserAchievement` model is defined as `optional: false` (which effectively makes it required) ```rb belongs_to :awarded_by_user, class_name: 'User', inverse_of: :awarded_user_achievements, optional: false ``` (https://gitlab.com/gitlab-org/gitlab/-/blob/a31062c8a87c6299b3a14a3d8e2174935c85b162/app/models/achievements/user_achievement.rb#L8-11) The problem is that the foreign key is defined with `on_delete: :nullify` (https://gitlab.com/gitlab-org/gitlab/-/blob/a31062c8a87c6299b3a14a3d8e2174935c85b162/db/migrate/20221214204247_user_achievements_foreign_keys.rb#L8) \ This causes the field to be set to null when the user that awarded the achievement is deleted. But a `awarded_by_user` of `null` is invalid and causes errors when queried with GraphQL. The record probably can't be updated as well because of the model validations. (Initial investigation happened in the community discord: https://canary.discord.com/channels/778180511088640070/1151947235081334835/1151957658509779004) ## Proposed solution Migrate this field to the Ghost user (@ghost1 on ~gitlab.com) by adding it to `Users::MigrateRecordsToGhostUserService` (https://gitlab.com/gitlab-org/gitlab/-/blob/a31062c8a87c6299b3a14a3d8e2174935c85b162/app/services/users/migrate_records_to_ghost_user_service.rb) We probably also need a migration that will back-fill all null values in `awarded_by_user` with the Ghost user to fix already broken records.
issue