[SAM] Add seat assignment sync service

Background

Part of [Seat Assignment Model] Backend Foundation (&16982)

On GitLab.com, users with memberships in a namespace hierarchy should have a corresponding seat assignment record at the root namespace level.

Currently, we need a mechanism to ensure the seat assignment record remains properly synced when membership changes occur.

Proposal

Create a dedicated service that will:

  1. Create a seat assignment record for the top-level namespace when the user becomes a member within the namespace hierarchy
  2. Update an existing seat assignment record when a membership changes within the namespace hierarchy
  3. Remove the seat assignment record when the user has no group or project memberships in the namespace hierarchy

This service should be invoked whenever relevant membership changes occur within the namespace hierarchy.

Edited by Katherine Richards