feat(themes): Setup DB for themes

There should a separate table for themes for storing the `theme_id`s for a particular lineage. This should be the schema:

| org_id | merchant_id | profile_id | theme_id |
| ------ | ----------- | ---------- | -------- |
| o1     | m1          | p1         | t1       |
| o1     | m1          | p2         | t2       |


This will be used for changing theme automatically when user switches any entities.
<think>
PR Context:
- Title: feat(themes): Setup themes table
- Merged: 2024-11-14T09:16:40Z
- Files changed: 15 files
- Commits: 5 commits

Implementation approach:
## Type of Change
<!-- Put an `x` in the boxes that apply -->

- [ ] Bugfix
- [x] New feature
- [ ] Enhancement
- [ ] Refactoring
- [ ] Dependency updates
- [ ] Documentation
- [ ] CI/CD

## Description
<!-- Describe your changes in detail -->
This PR creates a new table named `themes` in the DB. This will be used to store the `theme_id` for any lineage of `tenant_id`, `org_id`, `merchant_id` and `profile_id`.

### Additional Changes

- [ ] This PR modifies the API contract
- [
</think>

To implement this, you'll need to modify:


**Detailed Implementation:**


**Commit 1:** feat(themes): Setup themes table (#6533)
Files to modify:


**crates/common_utils/src/types.rs**
  Add:
    - mod: pub::theme

**crates/common_utils/src/types/theme.rs**
  Add:
    - enum: pub::ThemeLineage

**crates/diesel_models/src/query/user.rs**
  Add:
    - mod: pub::theme

**crates/diesel_models/src/query/user/theme.rs**
  Add:
    - function: pub::insert
    - function: private::lineage_filter
    - function: pub::find_by_lineage
    - function: pub::delete_by_theme_id_and_lineage
    - impl: impl ThemeNew
    - impl: impl Theme

**crates/diesel_models/src/schema.rs**
  Modify existing code

**crates/diesel_models/src/schema_v2.rs**
  Modify existing code

**crates/diesel_models/src/user.rs**
  Add:
    - mod: pub::theme

**crates/diesel_models/src/user/theme.rs**
  Add:
    - struct: pub::Theme
    - struct: pub::ThemeNew

**crates/router/src/db.rs**
  Modify existing code

**crates/router/src/db/kafka_store.rs**
  Add:
    - function: private::insert_theme
    - function: private::find_theme_by_lineage
    - function: private::delete_theme_by_lineage_and_theme_id
    - impl: impl ThemeInterface for KafkaStore

**crates/router/src/db/user.rs**
  Add:
    - mod: pub::theme

**crates/router/src/db/user/theme.rs**
  Add:
    - function: private::insert_theme
    - function: private::find_theme_by_lineage
    - function: private::delete_theme_by_lineage_and_theme_id
    - function: private::check_theme_with_lineage
    - function: private::insert_theme
    - function: private::find_theme_by_lineage
    - function: private::delete_theme_by_lineage_and_theme_id
    - trait: pub::ThemeInterface
    - impl: impl ThemeInterface for Store
    - impl: impl ThemeInterface for MockDb

**crates/storage_impl/src/mock_db.rs**
  Modify existing code
{"issue_number": 6532, "pr_number": 6533, "commits_count": 1, "files_changed": 15, "response_length": 2537, "file_count": 15, "needs_breakdown": false}