Appearance
Meduse Architecture
Meduse has a separately built Vue application and a Laravel backend. The HTTP API and Artisan processes share the backend code, but execute through different entry points. The diagram shows logical runtime responsibilities, not a verified server or deployment layout.
View diagram source
C4Container
title Meduse application runtime boundaries
Person(editor, "Catalog editor", "Maintains product data")
System_Boundary(meduse, "Meduse") {
Container(frontend, "Browser application", "Vue 3 and Vuex", "Screens and API requests")
Container(api, "HTTP backend", "Laravel 8 and Sanctum", "Routes and catalog operations")
Container(cli, "Artisan processes", "Laravel CLI", "Schedules and job handlers")
ContainerDb(catalog, "Catalog persistence", "Eloquent and SQL", "Products and related records")
}
Rel(editor, frontend, "Edits products")
Rel(frontend, api, "Calls API", "HTTP JSON")
Rel(api, catalog, "Reads / writes", "SQL")
Rel(cli, catalog, "Processes jobs", "SQL")
UpdateRelStyle(editor, frontend, $offsetX="-60", $offsetY="-30")
UpdateRelStyle(frontend, api, $offsetX="-45", $offsetY="-45")
UpdateRelStyle(cli, catalog, $offsetX="-45", $offsetY="-45")
UpdateLayoutConfig($c4ShapeInRow="2", $c4BoundaryInRow="1")
The diagram deliberately does not select a queue broker. config/queue.php reads QUEUE_CONNECTION and falls back to sync. A job implementing ShouldQueue does not alone prove a separately running worker or broker in an environment. Queues records concrete producer/consumer paths, while Connectors adds external destinations and transport details.
Follow a request
- Route and screen.
src/router.tsmaps browser routes to Vue pages/components. Start from Interfaces to find the screen and its service call. - HTTP transport.
src/service/ApiService.tssets the configuredVUE_APP_API_URL, bearer authorization and selectedAX-Tenantheader. The application uses hash-based browser routing; a frontend route is not a backend URL. - API registration.
app/Providers/RouteServiceProvider.phpmounts the core API routes under/api. Individual route groups and module providers determine the applicable middleware and prefixes. Check the endpoint inventory before composing a URL. - Tenant context.
TenantMiddlewareinitializes a recognized supplied tenant and returns HTTP 404 for an unknown one. It does not reject every missing tenant header: the middleware continues without initializing a tenant when the header is absent or has the ignored values. Read the actual endpoint's backend constraints; a selected UI tenant is not proof of endpoint-level authorization. - Persistence and side effects. Controllers call services/models or dispatch jobs. For example,
CatalogProductownscatalog_product, and its model hooks synchronize flat data and record changes.UpdateProductscreates a tracked-job record and implements a job handler for bulk editing. Follow the operation beyond the HTTP response if it starts background work.
Follow automatic work
The main schedule is defined in app/Console/Kernel.php; module providers add further declarations. For example, Modules/Logidav/Providers/ScheduleServiceProvider.php schedules product synchronization commands and stock/price/quantity work on different cadences. Its commented scheduling alternatives are not active declarations.
Scheduled jobs maps the source-declared frequency and guard to its command. Queues then distinguishes framework-dispatched jobs, custom processing tables, and file-based connector work. Inspect the matching consumer instead of assuming that every item displayed on the Jobs screen belongs to the same queue.
Developer change map
| Change | First source boundary | Check the next boundary |
|---|---|---|
| Menu label or navigation | Frontend menu and src/router.ts | Component exists and guard/tenant visibility matches intent. |
| Form or grid behavior | Vue page/component and its service/store action | Request field names and response envelope match the backend. |
| API contract | Backend routes and controller | Validation, tenant context, service persistence and error response. |
| Bulk update or export | Controller/command and dispatched job | Queue selection, tracked status and destination acceptance. |
| Automatic processing cadence | Kernel or module schedule provider | Provider registration, command guard and actual processing implementation. |
| Connector mapping | Connector/module implementation | Product/channel/locale mapping, transport and destination import. |
Source boundary
Reviewed revisions: frontend ca4a9364974f25715715b002f1ee463c8d53d31f and backend 5d3de6cb63b976aaeef739a8a7f288c4b46509ad. Source references above and the linked detail pages establish the implementation path. Hostnames, deployed revisions, active tenant assignments, queue connection, installed scheduler and worker supervision remain environment-specific and unverified here.
Primary files: frontend router, HTTP transport, API provider, tenant middleware, product model, bulk update job.