@clidey/dory 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +1 -1
  2. package/docs/api-playground-demo.mdx +119 -0
  3. package/docs/api-reference/openapi.json +366 -0
  4. package/docs/api-reference/operations/create.mdx +5 -0
  5. package/docs/api-reference/operations/delete.mdx +5 -0
  6. package/docs/api-reference/operations/get.mdx +5 -0
  7. package/docs/api-reference/operations/update.mdx +5 -0
  8. package/docs/assets/dory.jpeg +0 -0
  9. package/docs/dory.json +12 -131
  10. package/docs/favicon.svg +75 -0
  11. package/docs/features.mdx +440 -0
  12. package/docs/introduction.mdx +44 -0
  13. package/docs/logo/logo.png +0 -0
  14. package/package.json +3 -2
  15. package/src/mdx/source.tsx +15 -4
  16. package/docs/README.md +0 -2
  17. package/docs/configuration/app-settings/feature-flags.mdx +0 -157
  18. package/docs/configuration/app-settings/user-settings.mdx +0 -201
  19. package/docs/configuration/installation-setup/env-vars.mdx +0 -198
  20. package/docs/configuration/installation-setup/installation.mdx +0 -127
  21. package/docs/integrations/analytics-monitoring/error-tracking.mdx +0 -199
  22. package/docs/integrations/analytics-monitoring/notifications.mdx +0 -189
  23. package/docs/integrations/analytics-monitoring/user-analytics.mdx +0 -182
  24. package/docs/integrations/shopify-integration/shopify-setup.mdx +0 -226
  25. package/docs/integrations/shopify-integration/shopify-webhooks.mdx +0 -207
  26. package/docs/overview/developer-overview/dev-architecture.mdx +0 -292
  27. package/docs/overview/product-intro/app-overview.mdx +0 -167
  28. package/docs/overview/product-intro/architecture.mdx +0 -203
  29. package/docs/overview/product-intro/core-concepts.mdx +0 -267
  30. package/docs/platform-admin/billing-subscriptions/billing.mdx +0 -176
  31. package/docs/platform-admin/system-maintenance/db-migrations.mdx +0 -184
  32. package/docs/platform-admin/system-maintenance/health-monitoring.mdx +0 -222
  33. package/docs/platform-admin/system-maintenance/queue-management.mdx +0 -234
  34. package/docs/platform-admin/user-team-management/teams.mdx +0 -170
  35. package/docs/platform-admin/user-team-management/users.mdx +0 -185
  36. package/docs/support/legal/dependency-analysis.mdx +0 -132
  37. package/docs/support/legal/privacy-terms.mdx +0 -73
  38. package/docs/support/troubleshooting/common-issues.mdx +0 -159
  39. package/docs/usage/api-usage/api-inventory.mdx +0 -213
  40. package/docs/usage/api-usage/api-products.mdx +0 -249
  41. package/docs/usage/api-usage/api-purchase-orders.mdx +0 -289
  42. package/docs/usage/api-usage/api-reports.mdx +0 -227
  43. package/docs/usage/api-usage/api-suppliers.mdx +0 -171
  44. package/docs/usage/api-usage/api-user-management.mdx +0 -171
  45. package/docs/usage/ui-workflows/bundles.mdx +0 -157
  46. package/docs/usage/ui-workflows/demand-planning.mdx +0 -210
  47. package/docs/usage/ui-workflows/favorites.mdx +0 -167
  48. package/docs/usage/ui-workflows/inventory-management.mdx +0 -179
  49. package/docs/usage/ui-workflows/onboarding.mdx +0 -215
  50. package/docs/usage/ui-workflows/purchase-orders.mdx +0 -200
  51. package/docs/usage/ui-workflows/reports.mdx +0 -257
@@ -1,226 +0,0 @@
1
- ---
2
- title: 'Shopify Connection & Setup'
3
- description: 'How to set up and configure Shopify connections including manual and automated sync options.'
4
- ---
5
-
6
- # Shopify Connection & Setup Service
7
-
8
- ## 1. Purpose and Scope
9
-
10
- The **ShopifyConnectService** is responsible for managing the lifecycle of Shopify store connections within the Genie platform. This includes initiating both automatic and manual OAuth connection flows, handling callbacks from Shopify, and setting up associated data structures such as teams, stores, users, and onboarding state.
11
-
12
- This service acts as a key integration point between the Genie backend and Shopify's OAuth and API endpoints. It is essential for enabling Genie users to link their Shopify stores, provision required data entities, and track onboarding progress.
13
-
14
- ### Architectural Context
15
-
16
- - Operates within the Genie API backend under the `setup` module.
17
- - Collaborates closely with the `ShopifyApiService`, `ShopifyStoreService`, `UserManagement` services (Teams and User repositories), and onboarding and reporting subsystems.
18
- - Controls multi-step connection flows with both automated and manual connection support.
19
-
20
-
21
- ## 2. Technical Overview
22
-
23
- ### High-Level Flow
24
-
25
- ```mermaid
26
- flowchart TD
27
- subgraph Frontend
28
- UI[Shopify Connect UI]
29
- end
30
-
31
- subgraph Genie_Backend["Genie Backend"]
32
- SCS["ShopifyConnectService"]
33
- SAS["ShopifyApiService"]
34
- SSS["ShopifyStoreService"]
35
- TS["TeamsService"]
36
- OR["OnboardingService & ReportsService"]
37
- JWT["JWT Service"]
38
- RepoUser["User Repository"]
39
- RepoTeam["Team Repository"]
40
- ReqRepo["ShopifyConnectRequest Repository"]
41
- Tracking["TrackingService"]
42
- SavedView["SavedViewService"]
43
- end
44
-
45
- UI -->|Begin Connection| SCS
46
- SCS -->|Begin OAuth| SAS
47
- SAS -->|OAuth Redirect| UI
48
- UI -->|OAuth Callback| SCS
49
- SCS -->|Get/Setup Store & Team| SSS
50
- SSS -->|Persist Team & Store| RepoTeam
51
- SCS -->|Setup Admin & Business| TS
52
- SCS -->|Initialize Onboarding & Reports| OR
53
- SCS -->|Generate Token| JWT
54
- SCS -->|Track Events| Tracking
55
- SCS -->|Create Default Templates| SavedView
56
- SCS -->|Update User Role & Details| RepoUser
57
- ReqRepo -->|Handle Manual Requests| SCS
58
-
59
- click SCS "apps/api/src/setup/services/shopify-connect.service.ts"
60
- click SAS "apps/api/src/shopify/services/shopify-api.service.ts"
61
- click SSS "apps/api/src/shopify/services/shopify-store.service.ts"
62
- click TS "apps/api/src/user-management/services/teams.service.ts"
63
- click OR "apps/api/src/setup/services/onboarding.service.ts"
64
- click RepoUser "apps/api/src/user-management/entities/user.entity.ts"
65
- click RepoTeam "apps/api/src/user-management/entities/team.entity.ts"
66
- click ReqRepo "apps/api/src/setup/entities/shopify-connect-request.entity.ts"
67
- click Tracking "apps/api/src/tracking/services/tracking.service.ts"
68
- click SavedView "apps/api/src/pim/services/saved-view.service.ts"
69
-
70
- classDef service fill:#f9f,stroke:#333,stroke-width:1px
71
- class SCS,SAS,SSS,TS,OR,Tracking,SavedView service
72
-
73
- classDef repository fill:#bbf,stroke:#333,stroke-width:1px
74
- class RepoUser,RepoTeam,ReqRepo repository
75
- ```
76
-
77
- ### Key Technologies & Patterns
78
-
79
- - **NestJS Framework:** The service is an injectable singleton leveraging NestJS's dependency injection.
80
- - **TypeORM:** For database interactions managing entities like User, Team, Shopify stores, and manual connection requests.
81
- - **JWT:** Used to sign session tokens post successful Shopify connect.
82
- - **Shopify API Library:** Wraps Shopify OAuth and API interactions.
83
- - **Event Tracking:** Tracks onboarding progress events.
84
- - **Transactional Operations:** Ensures atomic creation/updating of Shopify Store and Team entities.
85
- - **Manual vs Automatic Connection Flows:** Supports two modes of connection to cater to different UX models.
86
-
87
-
88
- ## 3. Core Concepts and Responsibilities
89
-
90
- ### Connection Types
91
-
92
- Defined in shared types (`ShopifyConnectionType`):
93
- - `Setup`: Full setup connection with admin/business details capturing.
94
- - `GrantPermissions`: Connection flow specifically for approving additional Shopify permissions (e.g., after new features rollout).
95
-
96
- ### Main Responsibilities
97
-
98
- - **beginConnecting:** Starts the automatic OAuth flow for a Shopify domain.
99
- - **beginManualConnection:** Starts OAuth flow based on a saved manual connection request.
100
- - **finishConnecting:** Handles Shopify OAuth callback, establishes Shopify store and Genie team, assigns roles, initiates onboarding.
101
- - **saveManualConnectionRequest:** Persists manual connection request data for later usage.
102
- - **assignAdminAndBusinessDetailsToTeam:** Assigns the connecting user as team admin and updates team business name.
103
- - **createDefaultTemplatesIfNeeded:** Adds default saved views/templates for new teams as part of setup.
104
-
105
- ### Ownership
106
-
107
- - Maintained by the backend team responsible for Shopify integration.
108
- - Logs and tracks exceptions via GenieException handling and Sentry integration.
109
-
110
- ### Non-Functional Requirements
111
-
112
- - **Reliability:** Uses transactions to guarantee consistent creation of team and store.
113
- - **Security:** Ensures proper JWT token generation and validates Shopify domains.
114
- - **Scalability:** Supports multiple connection requests and re-authorization workflows.
115
-
116
-
117
- ## 4. Code Structure
118
-
119
- ### Major Files
120
-
121
- - `shopify-connect.service.ts`: Core service implementing connection logic.
122
- - `shopify-store.service.ts`: Supports store domain sanitization and transactional setup.
123
- - `shopify-connect.controller.ts`: Exposes REST endpoints for front-end interaction with OAuth flows.
124
-
125
- ### Key Methods Overview
126
-
127
- ```ts
128
- // Starts automatic OAuth flow
129
- beginConnecting({ shopDomain, callbackPath, req, res })
130
-
131
- // Starts manual OAuth flow using saved request ID
132
- async beginManualConnection({ connectionRequestId, callbackPath, req, res })
133
-
134
- // Handles OAuth callback, sets up team/store, onboarding, and returns token
135
- async finishConnecting({ req, res, manualConnectionRequestId? })
136
-
137
- // Saves manual connection request from UI input
138
- async saveManualConnectionRequest(userId, data: ManualConnectShopifyRequestDto)
139
-
140
- // Assigns admin role and business details to team
141
- private async assignAdminAndBusinessDetailsToTeam({ teamId, conenctRequest })
142
- ```
143
-
144
- ### Example: Initiating OAuth Flow (Automatic)
145
-
146
- ```ts
147
- beginConnecting({ shopDomain, callbackPath, req, res }) {
148
- this.trackingService.trackEvent({
149
- name: EVENTS.Onboarding,
150
- properties: {
151
- onboarding_progress: "Not Started",
152
- onboarding_connection_type: "Automatic",
153
- },
154
- });
155
-
156
- return this.shopifyApiService.getAuthApi().begin({
157
- shop: this.shopifyStoreService.sanitizeShopDomainOrThrow(shopDomain),
158
- callbackPath,
159
- isOnline: false,
160
- rawRequest: req,
161
- rawResponse: res,
162
- });
163
- }
164
- ```
165
-
166
-
167
- ## 5. API and Interfaces
168
-
169
- The service itself is consumed primarily by the NestJS controller `ShopifyConnectController` which exposes the following endpoints:
170
-
171
- | Endpoint | HTTP Method | Description |
172
- |-------------------------------|-------------|------------------------------------------------|
173
- | `/shopify/connect/begin` | GET | Begins automatic OAuth flow with shop domain |
174
- | `/shopify/connect/manual` | POST | Saves manual connect request and returns ID |
175
- | `/shopify/connect/manual/begin`| GET | Begins manual OAuth flow using request ID |
176
- | `/shopify/connect/callback` | GET | Handles OAuth callback and finalizes connection|
177
-
178
- ### ManualConnectShopifyRequestDto
179
-
180
- Defines input for manual connect:
181
- - `shopifyUrl`: Shopify domain/url string.
182
- - `type`: Connection type (`SETUP` or `GRANT_PERMISSIONS`).
183
- - For `SETUP` type, additional fields: `firstName`, `surname`, `businessName`.
184
-
185
- ### Expected Returns
186
-
187
- - `finishConnecting` returns an install session token (JWT) unless it was a manual connection flow.
188
-
189
- ### Error Handling
190
-
191
- - Invalid Shopify URL detected during manual connect throws `GenieException` with code `ErrorCode.InvalidShopifyUrl`.
192
- - Controller maps this to 400 BadRequest with error code `ApiErrorCode.InvalidShopifyUrl`.
193
-
194
-
195
- ## 6. Environment & Configuration
196
-
197
- This service relies on core platform config for:
198
- - `APP_URL`: Used for forming callback and redirect URLs.
199
- - Shopify API credentials and tokens are managed through `ShopifyApiService`.
200
- - Cookie setup for manual connect request tracking (30 minutes expiration).
201
-
202
- No additional explicit environment variables or secrets are defined directly in this service.
203
-
204
-
205
- ## 7. Testing, Monitoring, and Deployment
206
-
207
- No explicit test information is included in the provided context.
208
-
209
-
210
- ## 8. Troubleshooting & Known Issues
211
-
212
- - Manual connection requests must be valid with correct Shopify URLs; invalid URLs raise errors.
213
- - The service tracks and logs exceptions via `GenieException` and `captureException`.
214
- - Manual connection requests are persisted to prevent unauthorized or invalid OAuth flow starts.
215
-
216
-
217
- ## 9. References
218
-
219
- - See the service code: [apps/api/src/setup/services/shopify-connect.service.ts](apps/api/src/setup/services/shopify-connect.service.ts)
220
- - Controller usage: [apps/api/src/setup/controllers/shopify-connect.controller.ts](apps/api/src/setup/controllers/shopify-connect.controller.ts)
221
- - Store setup logic: [apps/api/src/shopify/services/shopify-store.service.ts](apps/api/src/shopify/services/shopify-store.service.ts)
222
-
223
-
224
- ---
225
-
226
- This documentation covers the internal workings and integration points of the Shopify connection and setup service within Genie. It is crucial for maintaining and extending Shopify integration capabilities.
@@ -1,207 +0,0 @@
1
- ---
2
- title: 'Shopify Webhooks'
3
- description: 'Webhooks handling for inventory, compliance, and shopify events and how the system processes these.'
4
- ---
5
-
6
- ## Shopify Webhooks
7
-
8
- ### Purpose and Scope
9
-
10
- The **Shopify Webhooks** integration in the Genie app is responsible for subscribing to, receiving, storing, and processing webhook events generated by Shopify stores connected to the platform. This component enables the system to stay synchronized with store data changes such as Products, Locations, Inventory Levels, Collections, Orders, and Shop metadata updates.
11
-
12
- It bridges Shopify's asynchronous event system with Genie’s internal data models, ensuring real-time or near-real-time reflections of Shopify changes in Genie’s system. The Shopify Webhooks service owns the lifecycle of webhook registration per team (client) and manages persistent storage and processing of incoming webhook events.
13
-
14
- **System boundaries:**
15
- - Receives webhook HTTP callbacks from Shopify (via a public API endpoint).
16
- - Stores raw and processed events in a dedicated Postgres table.
17
- - Processes and orchestrates updates to Genie internal entities like Product, Variant, Location, Collection, Sales Order, and Settings.
18
- - Registers and unregisters subscriptions for Shopify webhooks via Shopify's API.
19
-
20
-
21
- ### Technical Overview
22
-
23
- This component fits within the Genie integration layer for Shopify:
24
- - The **WebhooksController** exposes a public HTTP POST endpoint `/shopify/webhooks` to receive Shopify webhook payloads, secured by `ShopifyWebhooksGuard` verification.
25
- - The **ShopifyWebhooksService** handles storage, registration, deregistration, and fetching logic for webhooks with Shopify.
26
- - The **ShopifyWebhooksConsumer** asynchronously processes webhook events from a Redis-backed queue (BullMQ), delegating business logic to the **WebhooksInsightsSyncService**.
27
- - Sync service manages domain-specific sync flows: Products, Variants, Locations, Inventory, Collections, Orders, Shop settings.
28
-
29
- [Mermaid architecture diagram omitted here; see separate Mermaid.js output]
30
-
31
- This component depends on:
32
- - ShopifyApiService: For authenticated Shopify API calls.
33
- - TeamsService: To manage active/inactive team states and billing plan checks.
34
- - InsightsSyncService: For importing and syncing Shopify data.
35
- - TypeORM repositories for persistence.
36
- - BullMQ queue for asynchronous event handling.
37
-
38
- Key technologies:
39
- - NestJS for service and controller abstractions.
40
- - TypeORM for database entity management.
41
- - BullMQ for queued, concurrent processing.
42
- - Zod for schema validation of webhook payloads.
43
- - Shopify SDK (`@shopify/shopify-api`) for API and webhook registrations.
44
-
45
-
46
- ### Core Concepts and Responsibilities
47
-
48
- - **Webhook Event:** Represents a single Shopify event with payload, topic, timestamps, and status.
49
- - **Team:** Represents a customer or client; webhooks are registered per team.
50
- - **Webhook Topics:** Shopify event types such as ProductsCreate, LocationsUpdate, InventoryLevelsUpdate, OrdersCreate, ShopUpdate, etc.
51
- - **Event Status:** Tracks processing states - PENDING, PROCESSED, SKIPPED, FAILED.
52
-
53
- Responsibility boundaries:
54
- - Register/unregister webhooks dynamically based on active team status and plan type.
55
- - Store raw webhook events reliably with input sanitization.
56
- - Process webhooks in order, skipping obsolete or duplicate events.
57
- - Mark events as processed or failed to manage retry logic.
58
- - Coordinate syncing of Shopify entities to Genie internal tables.
59
-
60
-
61
- ### Code Structure
62
-
63
- | File/Folder | Description |
64
- |-------------|-------------|
65
- | [apps/api/src/shopify/controllers/webhooks.controller.ts](apps/api/src/shopify/controllers/webhooks.controller.ts) | REST controller endpoint receiving raw webhook POST requests from Shopify and forwarding to service. |
66
- | [apps/api/src/shopify/services/shopify-webhooks.service.ts](apps/api/src/shopify/services/shopify-webhooks.service.ts) | Core service for Shopify webhook registering, unregistering, event persistence, and queueing processing tasks. |
67
- | [apps/api/src/pim/services/webhooks-insights-sync.service.ts](apps/api/src/pim/services/webhooks-insights-sync.service.ts) | Business logic service to interpret and sync webhook events to internal domain (products, orders, collections, etc). |
68
- | [apps/api/src/shopify/shopify-webhook-event.ts](apps/api/src/shopify/shopify-webhook-event.ts) | Class representing a typed and validated Shopify webhook event instance with status setters. |
69
- | [apps/api/src/shopify/schemas.ts](apps/api/src/shopify/schemas.ts) | Zod schemas for validating the structure of Shopify webhook payloads by topic.
70
-
71
-
72
- #### Example: Receiving and Storing a Webhook Event
73
-
74
- ```ts
75
- // In WebhooksController
76
- @Post('webhooks')
77
- async processShopifyEventForSync(
78
- @Request() { webhookContext },
79
- @Body() body: any
80
- ) {
81
- await this.shopifyWebhooksService.storeEvent(webhookContext, body);
82
- }
83
- ```
84
-
85
- ```ts
86
- // In ShopifyWebhooksService
87
- async storeEvent(context, body) {
88
- // Sanitize and validate payload
89
- // Resolve team by store domain
90
- // Insert event record with PENDING status
91
- }
92
- ```
93
-
94
-
95
- ### API and Interfaces
96
-
97
- - **Webhook Reception Endpoint:** `/shopify/webhooks` (POST)
98
- - Protected by `ShopifyWebhooksGuard` to verify Shopify request authenticity.
99
- - Accepts any webhook event payload, mapped to the internal team by domain.
100
-
101
- - **ShopifyWebhooksService** key methods:
102
- - `storeEvent(context, body)`: Persist a webhook event.
103
- - `registerWebhooksForTeam(teamId, topics)`: Registers webhook subscriptions on Shopify for specified topics.
104
- - `unregisterWebhooksForTeam(teamId)`: Deletes existing webhook subscriptions from Shopify for a team.
105
- - `markEventsAsProcessed(ids)`, `markEventsAsFailed(ids)`: Update statuses in DB.
106
- - `getEventsByTopics(events, topics)`: Filter events by topic.
107
-
108
- - **Event Status Workflow:**
109
- - NEW events start with status `PENDING`.
110
- - Successfully processed events are marked as `PROCESSED`.
111
- - Duplicate or obsolete older events are marked as `SKIPPED`.
112
- - Errors mark events as `FAILED` for retry.
113
-
114
-
115
- ### Environment & Configuration
116
-
117
- - **Configuartion keys used:**
118
- - `API_URL`: Base URL for webhook callback URL registration.
119
- - `SHOPIFY_APP_CLIENT_ID` and `SHOPIFY_APP_CLIENT_SECRET`: Shopify app credentials.
120
- - Relevant env/config management handled globally.
121
-
122
- - Webhook callback endpoint hardcoded as `/shopify/webhooks` relative to `API_URL`.
123
-
124
-
125
- ### Testing, Monitoring, and Deployment
126
-
127
- - Webhook events are queued on receipt and processed asynchronously for scalability.
128
- - Processing errors are captured and logged via Sentry integration.
129
- - Batch processing and retry logic ensure robustness.
130
- - Logging throughout the WebhooksService and InsightsSyncService supports operational debugging.
131
-
132
-
133
- ### Troubleshooting & Known Issues
134
-
135
- - Webhook registration failures for a team are logged with detailed error messages.
136
- - The system includes automatic retry for failed webhook registrations.
137
- - Event processing failures are marked `FAILED` and retried later.
138
- - Duplicate or older webhook events are identified and skipped.
139
-
140
-
141
- ---
142
-
143
- ## Mermaid Diagram: Shopify Webhooks Architecture
144
-
145
- ```mermaid
146
- flowchart TD
147
- subgraph "Shopify System"
148
- ShopifyWebhookAPI["Shopify Webhook API"]:::external
149
- end
150
-
151
- subgraph "Genie API Backend"
152
- direction TB
153
- WebhooksController["WebhooksController /shopify/webhooks"]:::controller
154
- ShopifyWebhooksService["ShopifyWebhooksService"]:::service
155
- ShopifyWebhooksQueue["BullMQ Queue"]:::queue
156
- ShopifyWebhooksConsumer["ShopifyWebhooksConsumer"]:::worker
157
- WebhooksInsightsSyncService["WebhooksInsightsSyncService"]:::service
158
- ProductRepo["Product Repository":::db]
159
- VariantRepo["ProductVariant Repository":::db]
160
- LocationRepo["Location Repository":::db]
161
- CollectionRepo["Collection Repository":::db]
162
- SalesOrderRepo["SalesOrder Repository":::db]
163
- SalesOrderItemRepo["SalesOrderItem Repository":::db]
164
- SettingsService["SettingsService"]:::service
165
- TeamsService["TeamsService"]:::service
166
- ShopifyApiService["ShopifyApiService"]:::service
167
- end
168
-
169
- ShopifyWebhookAPI -->|"HTTP Post Webhook Calls"| WebhooksController
170
- WebhooksController -->|"storeEvent()"| ShopifyWebhooksService
171
- ShopifyWebhooksService -->|"Insert Event DB"| DB["ShopifyWebhookEventEntity Table"]:::db
172
- ShopifyWebhooksService -->|"Add jobs to Queue"| ShopifyWebhooksQueue
173
- ShopifyWebhooksConsumer -->|"Fetch Event"| DB
174
- ShopifyWebhooksConsumer -->|"Process Event"| WebhooksInsightsSyncService
175
-
176
- WebhooksInsightsSyncService --> ProductRepo
177
- WebhooksInsightsSyncService --> VariantRepo
178
- WebhooksInsightsSyncService --> LocationRepo
179
- WebhooksInsightsSyncService --> CollectionRepo
180
- WebhooksInsightsSyncService --> SalesOrderRepo
181
- WebhooksInsightsSyncService --> SalesOrderItemRepo
182
- WebhooksInsightsSyncService --> SettingsService
183
-
184
- ShopifyWebhooksService --> ShopifyApiService
185
- ShopifyWebhooksService --> TeamsService
186
-
187
- classDef external fill:#D6EAF8,stroke:#2E86C1,color:#154360,font-weight:bold;
188
- classDef controller fill:#D5F5E3,stroke:#27AE60,color:#145A32,font-weight:bold;
189
- classDef service fill:#FCF3CF,stroke:#F1C40F,color:#7D6608,font-weight:bold;
190
- classDef queue fill:#FADBD8,stroke:#E74C3C,color:#78281F,font-weight:bold;
191
- classDef worker fill:#F5EEF8,stroke:#8E44AD,color:#4A235A,font-weight:bold;
192
- classDef db fill:#D4E6F1,stroke:#2980B9,color:#1B4F72,font-weight:bold;
193
-
194
- click WebhooksController "apps/api/src/shopify/controllers/webhooks.controller.ts"
195
- click ShopifyWebhooksService "apps/api/src/shopify/services/shopify-webhooks.service.ts"
196
- click ShopifyWebhooksConsumer "apps/api/src/shopify/services/shopify-webhooks.consumer.ts"
197
- click WebhooksInsightsSyncService "apps/api/src/pim/services/webhooks-insights-sync.service.ts"
198
- click ProductRepo "apps/api/src/pim/entities/product.entity.ts"
199
- click VariantRepo "apps/api/src/pim/entities/product-variant.entity.ts"
200
- click LocationRepo "apps/api/src/pim/entities/location.entity.ts"
201
- click CollectionRepo "apps/api/src/pim/entities/collection.entity.ts"
202
- click SalesOrderRepo "apps/api/src/sales-order/entities/sales-order.entity.ts"
203
- click SalesOrderItemRepo "apps/api/src/sales-order/entities/sales-order-item.entity.ts"
204
- click SettingsService "apps/api/src/user-management/services/settings.service.ts"
205
- click TeamsService "apps/api/src/user-management/services/teams.service.ts"
206
- click ShopifyApiService "apps/api/src/shopify/services/shopify-api.service.ts"
207
- ```