Issue:
feat: new apis for accept invite and list merchant

- new JWT auth based api for accept invite api
- new SPT auth based api for list merchants
- send accept invite from email instead of reset password for newly invited users

Resolution:
<think>
PR Context:
- Title: feat(users): new routes to accept invite and list merchants
- Merged: 2024-05-09T13:24:15Z
- Files changed: 10 files
- Commits: 11 commits

Implementation approach:
## Type of Change
<!-- Put an `x` in the boxes that apply -->

- [ ] Bugfix
- [x] New feature
- [x] Enhancement
- [x] Refactoring
- [ ] Dependency updates
- [ ] Documentation
- [ ] CI/CD

## Description
This PR:
- adds new route to accept invite from dashboard with JWT Auth
- adds new routes to get list of merchants to select for user, SPT Auth
- modifies to send accept invite from email instead of set password for new user in token only flow


### Additional Changes

- [x] T
</think>

To implement this, you'll need to modify:


**Detailed Implementation:**


**Commit 1:** feat(users): new routes to accept invite and list merchants (#4591)
Files to modify:


**crates/api_models/src/events/user_role.rs**
  Modify existing code

**crates/api_models/src/user_role.rs**
  Remove:
    - struct: pub::AcceptInvitationRequest
  Add:
    - struct: pub::MerchantSelectRequest

**crates/router/src/core/user.rs**
  Modify existing code

**crates/router/src/core/user_role.rs**
  Modify existing code

**crates/router/src/routes/app.rs**
  Modify existing code

**crates/router/src/routes/lock_utils.rs**
  Modify existing code

**crates/router/src/routes/user.rs**
  Add:
    - function: pub::list_merchants_for_user_with_spt

**crates/router/src/routes/user_role.rs**
  Modify existing code

**crates/router/src/services/authentication.rs**
  Add:
    - function: private::get_user_id
    - function: private::get_user_id
    - function: private::authenticate_and_fetch
    - function: private::authenticate_and_fetch
    - trait: pub::GetUserIdFromAuth
    - impl: impl GetUserIdFromAuth for UserFromToken
    - impl: impl GetUserIdFromAuth for UserFromSinglePurposeToken
    - impl: impl AuthenticateAndFetch<Box<dyn GetUserIdFromAuth>, A> for SinglePurposeJWTAuth
    - impl: impl AuthenticateAndFetch<Box<dyn GetUserIdFromAuth>, A> for DashboardNoPermissionAuth

**crates/router_env/src/logger/types.rs**
  Modify existing code