mehdihadeli/go-food-delivery-microservices
56.3
Adequate · 21 September 2026
25.8k
lines of production code
Go
primary language
3
measurements over time
What this system is
This system is a Go-based microservices architecture providing product catalog management and order processing capabilities. It exposes HTTP and gRPC interfaces for creating, reading, updating, and deleting products, as well as managing orders, while leveraging CQRS patterns and event-driven messaging for internal logic. The codebase includes comprehensive infrastructure for local development, testing, and Kubernetes deployment, along with distributed tracing and API documentation.
How it got here
2022 — Initial project scaffolding and cleanup
5 changes.
The period focused on establishing the foundational Go microservices architecture, including module setup, developer tooling, and system documentation. Concurrently, internal utility packages and the standalone catalogs service were removed to streamline the codebase and define the core dependency graph.
2023 — microservice infrastructure and tooling setup
6 changes.
This period focused on establishing the foundational infrastructure for microservice development, including a new internal package with CQRS, dependency injection, and database client libraries. It also introduced comprehensive development tooling, such as Skaffold for Kubernetes, automation scripts for builds and migrations, and commit linting to enforce code quality standards.
2024 — Catalog and Order Service Implementation
5 changes.
This period focused on implementing core microservices for product and order management, including the initial scaffolding and full CRUD capabilities of the Catalog Read Service alongside the v1 API endpoints for the Orders service. The work also established comprehensive observability via OpenTelemetry and gRPC stats handlers, while ensuring reliability through the addition of integration and end-to-end test suites for both services.
Features
Add third-party protocol buffer definitions for GORM and validation
This change adds third-party protocol buffer definitions to the project, specifically including the \protoc-gen-gorm\ options and types (for ORM code generation configuration) and the \protoc-gen-validate\ schema (for message and field validation rules). These files are placed in \third\_party/proto\ to support code generation tools, while empty \.gitkeep\ files are added to \deployments/kustomize\ and \third\_party/openapi\ to preserve directory structure.
_deployments/kustomize, third\party · high confidence
Add v1 API endpoints for creating and retrieving orders
This change introduces the v1 implementation for the Orders feature, exposing HTTP endpoints to create new orders (POST /api/v1/orders) and retrieve them by ID or as a list (GET /api/v1/orders/{id} and GET /api/v1/orders). The implementation includes the necessary command and query handlers, DTOs, and endpoint wiring to support these operations, along with domain and integration events for order creation.
_internal/services/orderservice/internal/orders/features/creating\_order, internal/services/orderservice/internal/orders/features/getting\_order\_by\_id, internal/services/orderservice/internal/orders/features/getting\orders · high confidence
Added Skaffold configuration for Kubernetes development
A new Skaffold configuration file (skaffold.yaml) has been added to the deployments/kubernetes directory to support local Kubernetes development workflows. Additionally, the .env file in this directory was renamed to .gitkeep to preserve the directory structure in version control.
deployments/kubernetes · high confidence
Added system architecture diagram
A new Excalidraw file has been added to the assets directory, providing a visual representation of the system architecture. This diagram includes elements such as arrows and text labels (e.g., 'Save Write Model') to illustrate component relationships and data flow, aiding users in understanding the high-level design of the system.
assets · high confidence
Automated devcontainer setup for fonts and tool permissions
The devcontainer environment now automatically installs the MesloLGM Nerd Font and configures script permissions during initialization. A new post-create script orchestrates this by running setup-fonts.sh to download and cache the font, and setup-devcontainers.sh to ensure install-tools.sh is executable, streamlining the initial container setup process.
.devcontainer/scripts · high confidence
Catalog Read Service product management and gRPC observability
The Catalog Read Service now exposes full CRUD capabilities for products via HTTP endpoints (GET by ID, GET all, search, POST, PUT, DELETE) and integrates OpenTelemetry for distributed tracing and metrics. The service implements gRPC stats handlers to automatically record RPC duration, request/response sizes, and success/failure counts, while also wiring OpenTelemetry tracing into the product command and query handlers to provide end-to-end visibility into product lifecycle operations.
(repo-wide) · high confidence
Enforce commit message linting and code formatting on commit
The repository now automatically validates commit messages against conventional commit standards using commitlint and formats code via \make format\ before every commit. This ensures consistent commit history and code style without manual intervention.
.husky · high confidence
Initial project scaffolding and developer tooling setup
The repository has been initialized with a comprehensive set of configuration files and build scripts to support the Go microservices architecture. This includes a Makefile and Taskfile for managing service builds, tests, and infrastructure, alongside specific targets for database migrations using Go-Migrate, Goose, and Atlas. Developer experience is enhanced with configurations for golangci-lint, staticcheck, revive, and mockery, as well as Buf for Protobuf code generation. The setup also enforces coding standards through EditorConfig, commitlint, and Husky pre-commit hooks, while providing a .dockerignore and .gitignore to streamline the development and containerization workflows.
(repo-wide) · high confidence
Initial scaffolding for the Catalog Read Service
The \catalogreadservice\ module is introduced with its foundational configuration and infrastructure files. This includes development tooling (\.air.toml\), containerization setup (\.dockerignore\, \Dockerfile\, \Makefile\), and code quality standards (\.golangci.yml\, \arch-go.yml\). The service is configured to expose HTTP endpoints on port \:7001\ and gRPC on port \:6004\, with default connections to local MongoDB, Redis, and RabbitMQ instances. Additionally, the commit adds the initial Swagger API documentation (\docs/\) and the Go configuration structures (\config/\) required to bootstrap the service.
internal/services · high confidence
New development and build automation scripts
The repository now includes a comprehensive set of shell scripts to streamline local development workflows. These scripts automate common tasks such as installing Go tooling and dependencies (install-tools.sh, install-dependencies.sh), building and running services (build.sh, run.sh), and managing database migrations via both the legacy go-migrate and the new goose and atlas tools (go-migrate.sh, goose-migrate.sh, atlas-migrate.sh). Additional scripts handle code formatting (format.sh), linting (lint.sh), OpenAPI documentation generation (openapi.sh), Protocol Buffer compilation (proto.sh), and load testing with k6 (test.sh, k6-generator.sh).
scripts · high confidence
New internal package providing foundational microservice infrastructure
The internal/pkg package introduces a comprehensive set of libraries for building microservices, including a Bun-based PostgreSQL database client with automatic database creation, a Viper-driven configuration system with environment-specific loading, and Uber fx modules for dependency injection. It also provides a CQRS framework with command and query handlers, a generic repository pattern, domain-driven design primitives (aggregates, entities, domain events), and a messaging bus abstraction for event publishing and consumption, alongside corresponding unit tests and mock implementations.
internal/pkg · high confidence
Removals
Removal of catalogs service entry point and configuration
The standalone catalogs service has been removed from the application. The main entry point (\services/catalogs/cmd/main.go\) and its associated JSON configuration file (\services/catalogs/configs/config.json\) have been deleted, meaning the service is no longer initialized or accessible at its previous configuration (localhost:4000).
services · high confidence
Removal of internal utility packages
The internal utility packages for aggregate roots, HTTP error handling, panic suppression, and graceful shutdown have been removed from the codebase. This eliminates the \aggregate\ package (including \Root\ and \ErrNotFound\), the \httperr\ package (including \Handler\ and \ProblemDetails\), the \must\ package (\NotFail\), and the \shutdown\ package (\Gracefully\), meaning any code relying on these specific internal helpers must be updated to use alternative implementations.
pkg · high confidence
API
Generated Swagger documentation for Catalog and Order services
New Swagger 2.0 specification files (docs.go, swagger.json, and swagger.yaml) have been added for the Catalog Read-Service, Catalog Write-Service, and Order Service. These generated files expose the API surface for product management (including listing, searching, creating, updating, and deleting products) and order management (including listing and creating orders), providing structured documentation for consumers of these microservices.
api · high confidence
Test coverage
Added integration and end-to-end tests for catalog services
Added comprehensive test suites for the \catalogreadservice\ and \catalogwriteservice\ product features. The \catalogreadservice\ now includes integration tests for creating, reading, updating, and deleting products, as well as event handling for \ProductCreated\, \ProductUpdated\, and \ProductDeleted\ events. The \catalogwriteservice\ adds end-to-end tests for its HTTP endpoints (create, read, update, delete, search) and integration tests for its command handlers and event publishing logic.
(repo-wide) · high confidence
Dependencies
Initial Go module setup for internal packages and services
The internal package library and the catalog read and write services are now defined as distinct Go modules (Go 1.22). This establishes the dependency graph for the application, introducing core libraries for HTTP handling (Echo v4), database access (GORM, pgx, SQLite), messaging (RabbitMQ), caching (Redis), and distributed tracing (OpenTelemetry).
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 56.
Lenses
- Code Health 91
- Architecture 88
- Maturity 60
- Readiness 62
- Security 44
- Domain Modelling 69
- Event-Driven 91
- Event Sourcing 100
Changes since last survey
- 276 commits — 255 feature/other, 21 fixes
By area
- services/catalogs — 72 commits
- (root) — 60 commits
- (repo) — 32 commits
- internal/services — 20 commits
- .github/workflows — 18 commits
- services/orders — 12 commits
- pkg/rabbitmq — 9 commits
- internal/pkg — 7 commits
- .devcontainer/devcontainer.json — 4 commits
- pkg/http — 4 commits
- .devcontainer/scripts — 3 commits
- deployments/docker-compose — 3 commits
- scripts/format.sh — 3 commits
- .github/pr-labeler.yml — 2 commits
- assets/system-architecture-diagram.png — 2 commits
- assets/system-architecture-raw.excalidraw — 2 commits
- pkg/test — 2 commits
- .devcontainer/Dockerfile — 1 commit
- .github/multi-labeler.yml — 1 commit
- .github/release-drafter.yml — 1 commit
Notable commits
- fix: bug fix
- fix: bug fix make file
- fix: build: :bug: fix air configurations
- fix: build: 💚 some fix in the proto generation script (#109)
- fix: fix: :bug: bug fix
- fix: fix: :bug: bug fix
- fix: fix: :bug: bug fix
- fix: fix: :bug: fix custom domain errors bug (#71)
- fix: fix: :bug: fix missing imports
- fix: fix: :bug: fix testcontainer bug (#86)
- fix: fix: :bug: some bug fixes
- fix: fix: :bug: some bug fixes
- fix: fix: :bug: some bug fixes
- fix: fix: :bug: test infrastructure bug fix
- fix: fix: 🐛 fix error in running make install-tools (#108)
- fix: fix: 🐛 fix errors related upgrade otel version
- fix: fix: 🐛fix problem in the migration for catalogswriteservice (#106)
- fix: fix: 🐛some bug fixes
- fix: refactoring read_service and kafka consumers bug fix
- fix: sending metadata in producer bug fix
- …and 256 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
mehdihadeli/go-food-delivery-microservices was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 4a59535f2f5432b3a1a4d28fe0a1767a66dd16f9 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-fa71c66cabd8.