evgenirusev/Distributed-eStore
38.2
Weak · 21 September 2026
5.1k
lines of production code
C#
with TypeScript
3
measurements over time
What this system is
This system is a distributed e-commerce platform built on a microservices architecture, featuring dedicated services for identity management, product cataloging, and order processing. It provides a React-based single-page application that allows users to browse products, manage a shopping cart, and complete purchases through a centralized API gateway. The infrastructure supports containerized deployment with service discovery, JWT authentication, and asynchronous messaging to coordinate state across the distributed components.
How it got here
2020 — Initial microservices scaffolding and core feature implementation
51 changes.
This period established the foundational architecture of the distributed eStore, initializing the Visual Studio solution with Docker support and defining the core microservices: API Gateway, Identity, Product, and UI. It involved implementing the initial CQRS infrastructure, service discovery via Consul, and messaging with RabbitMQ, alongside the first functional releases of the Identity and Product services. The work also covered the creation of the React-based frontend with Redux state management and the integration of shared libraries for authentication, persistence, and common domain models.
2021 — eCommerce feature implementation
21 changes.
This period focused on implementing core shopping functionality, including client-side cart state management, product browsing with category filtering, and a complete checkout flow. It also involved the initial development of the Order microservice for backend persistence and the introduction of authentication controls to secure user interactions.
Features
Add API gateway service interfaces for identity, products, and orders
The API gateway now exposes typed service interfaces for communicating with downstream microservices. IIdentityService defines endpoints for user sign-up and sign-in, IProductsService provides methods to browse products and retrieve them by ID, and IOrdersService is introduced as a placeholder for future order-related operations.
Distributed-eStore.Api.Gateway/src/Services · high confidence
Add Fabio service discovery client integration
Added a new client library for integrating with the Fabio API gateway, including configuration options, dependency injection setup, and an HTTP client with automatic retry logic for service routing.
Distributed-eStore.Common/Fabio · high confidence
Add Redux-based user authentication state management
The client application now includes a dedicated Redux store for managing user authentication state. This change introduces actions and reducers to handle user registration, login, and logout flows, persisting the authenticated user object in localStorage to maintain session state across page reloads. The state structure tracks login status and user details, enabling the UI to react to authentication changes.
Distributed-eStore.UI/src/ClientApp/src/state/user · high confidence
Add application layout component with navigation and footer
A new Layout component has been introduced to structure the application's visual hierarchy. It integrates the existing NavMenu at the top and the Footer at the bottom, wrapping page content within a fluid container from the reactstrap library. This establishes the consistent shell for the client-side interface.
Distributed-eStore.UI/src/ClientApp/src/components · high confidence
Add product category filter UI component
Users can now filter the product catalog by category using a new set of buttons labeled 'Women's Sale', 'Men's Sale', and 'Bags & Accessories Sale'. This component, located in the ProductFilter container, connects to the Redux store to display the currently selected category and triggers the appropriate data request when a user clicks a category button, visually indicating the active selection with an underline style.
Distributed-eStore.UI/src/ClientApp/src/containers/ProductFilter · high confidence
Add shared domain models for orders, products, and identity
The Distributed-eStore.Common/Models package now includes a set of shared data contracts to standardize communication between microservices. This includes order-related models (BaseOrder, CreateOrder, CreateOrderRequest, OrderItems) that define the structure for creating orders and their line items, a Product model for catalog data, an IdentityUser model for handling authentication claims and tokens, and a RegisterUserResponse model for registration feedback. These models provide a consistent schema for the UI, API Gateway, and backend services to exchange order and user information.
Distributed-eStore.Common/Models · high confidence
Add shopping cart UI container with order placement logic
The Cart container component has been added to the client application, providing the user interface for viewing cart contents and initiating checkout. It integrates with the Redux store to display cart items via the CartProducts component and handles user interactions such as changing item quantities or removing products. The component includes logic to build an order payload from the current cart state and user ID, and directs users to the login page if they are not authenticated when attempting to place an order, or to the order success page upon successful submission.
Distributed-eStore.UI/src/ClientApp/src/containers/Cart · high confidence
Added JWT-based authentication and access token management
The Distributed-eStore.Common/Authentication module now provides a complete JWT authentication infrastructure. This includes a JwtHandler for creating and validating tokens, an AccessTokenService backed by distributed cache to track active tokens and support deactivation, and an AccessTokenValidatorMiddleware to enforce authentication on requests. Configuration is handled via JwtOptions (secret key, issuer, expiry) and registered through extension methods, with convenient AuthAttribute and JwtAuthAttribute decorators for securing endpoints.
Distributed-eStore.Common/Authentication · high confidence
Added Logout component to user authentication flow
A new Logout component has been introduced in the user components directory. This component triggers the user logout action via Redux and immediately redirects the user to the home page, completing the login/register/logout flow.
Distributed-eStore.UI/src/ClientApp/src/components/user · high confidence
Added MongoDB persistence infrastructure to the Common library
The Distributed-eStore.Common/Mongo module now provides a complete MongoDB integration layer, including dependency injection extensions for Autofac, a generic MongoRepository for CRUD operations, and support for paginated queries. It also includes configuration options for connection strings and database names, along with initialization and seeding capabilities to handle database conventions and data population.
Distributed-eStore.Common/Mongo · high confidence
Added Order Created confirmation page
A new OrderCreatedPage component has been added to the client application. After an order is successfully placed, users are now directed to this page, which displays a success message and provides a link to browse products.
Distributed-eStore.UI/src/ClientApp/src/components/OrderCreatedPage · high confidence
Added authentication utility functions for user registration, login, and logout
The application now includes a new auth service module that exposes functions to handle user registration, login, and logout. The register function sends user details (first name, last name, email, password, and role) to the identity service's sign-up endpoint, while the login function authenticates users via the sign-in endpoint and returns user data. The logout function clears the stored user information from local storage. These utilities are exported via an index file for easy integration into other parts of the client application.
Distributed-eStore.UI/src/ClientApp/src/services/auth · high confidence
Added dedicated Male Products page
A new MaleProductsPage container has been added to the application, providing a dedicated view for male-oriented products. This page features a responsive top banner image that hides on screens narrower than 960px and utilizes the existing ProductList component to display items filtered by the current category, fetching data via a specific male product action creator.
Distributed-eStore.UI/src/ClientApp/src/containers/MaleProductsPage · high confidence
Added footer component with social links and site navigation
A new Footer component has been introduced to the application, providing a structured bottom section for the eStore UI. This component displays navigation links categorized under 'About', 'Contact Us', and 'Stores & Grocery', along with social media icons for Facebook and LinkedIn. It includes a copyright notice and applies a dark gradient background with hover effects for links and social icons.
Distributed-eStore.UI/src/ClientApp/src/components/Footer · high confidence
Added identity command models for sign-in and sign-up
New command objects, SignInCommand and SignUpCommand, have been introduced in the Distributed-eStore.Common/Commands/Identity namespace to support user authentication and registration workflows. SignInCommand captures email and password credentials, while SignUpCommand handles user registration details including email, name, password, and role, with a default role of 'admin'.
Distributed-eStore.Common/Commands · high confidence
Added private route component for authentication checks
A new PrivateRoute component has been introduced in the routing module to protect specific application paths. This component intercepts navigation requests and verifies the user's login status using the isUserLoggedIn service; if the user is not authenticated, they are automatically redirected to the login page, preserving the intended destination in the route state for post-login redirection.
Distributed-eStore.UI/src/ClientApp/src/components/routing · high confidence
Added query models for browsing products and orders, and retrieving products by ID
New query request models have been introduced in the Common layer to support product and order browsing capabilities. BrowseProducts allows filtering by category and price range, GetProductById enables fetching specific product details via a GUID, and a placeholder BrowseOrders model has been added to support order listing functionality.
Distributed-eStore.Common/Queries · high confidence
Added repository interfaces and MongoDB implementations for User and RefreshToken entities
The identity service now includes a persistence layer for user and refresh token data, introducing \IUserRepository\ and \IRefreshTokenRepository\ interfaces along with their \UserRepository\ and \RefreshTokenRepository\ implementations. These repositories utilize a shared \IMongoRepository\ abstraction to handle CRUD operations, enabling the service to store and retrieve user profiles (by ID or email) and manage refresh tokens in MongoDB.
Distributed-eStore.Services.Identity/src/Repositories · high confidence
Added reusable BottomBanner component with ocean conservation messaging
A new BottomBanner component has been introduced to the client application, featuring a full-width background image and a headline about ocean trash statistics with the call to action 'Let's turn the tide.' The component displays three key initiatives—'We Quit,' 'Get Dirty & Do Good,' and 'Let's turn the tide'—each with a title and description, and includes responsive styling that adjusts padding and font sizes for smaller screens.
Distributed-eStore.UI/src/ClientApp/src/components/BottomBanner · high confidence
Added web app manifest and HTML entry point
The application now includes a standard HTML entry point (index.html) and a web app manifest (manifest.json). This enables the app to be installed as a Progressive Web App (PWA) on Android devices, providing standalone display mode, custom theme colors, and proper favicon handling for home screen shortcuts.
Distributed-eStore.UI/src/ClientApp/public · high confidence
Identity service introduces message contracts for authentication and token management
The Identity service now exposes a set of new message contracts to support its internal communication and event-driven architecture. This includes command messages for changing passwords and managing access/refresh tokens (refreshing, revoking), as well as event messages that signal successful outcomes (signed in, signed up, token refreshed) and rejections (failed sign-in, sign-up, or token operations). These definitions establish the data structures used by the service to handle user authentication flows and token lifecycle events.
Distributed-eStore.Services.Identity/src/Messages · high confidence
Identity service introduces user registration, sign-in, and password management
The Identity service now exposes core authentication capabilities through the new IIdentityService implementation. Users can register with an email, first name, last name, and password (SignUpAsync), which persists the user and publishes a SignedUp event. Existing users can sign in (SignInAsync) to receive a JWT access token and a refresh token, with claims fetched via the new IClaimsProvider. Additionally, users can change their password (ChangePasswordAsync), which validates the current password and publishes a PasswordChanged event. The service also includes IRefreshTokenService for managing refresh token lifecycle (add, create access token, revoke).
Distributed-eStore.Services.Identity/src/Services · high confidence
Initial Dockerfile and solution structure for the API Gateway
The API Gateway service now includes a Dockerfile and a Visual Studio solution file (.sln) to support containerized builds. The Dockerfile is based on the .NET 5.0 SDK (mcr.microsoft.com/dotnet/sdk:5.0-focal), copies the gateway and common projects, restores dependencies, publishes the application, and exposes port 80. A .dockerignore file is also added to exclude unnecessary files from the build context.
Distributed-eStore.Api.Gateway · high confidence
Initial React client application with routing and offline support
The eStore UI client application has been initialized as a React-based single-page application. It establishes the core routing structure, defining pages for the home view, product browsing (including gender-specific and accessory categories), product details, shopping cart, user authentication (login and registration), logout, and order confirmation. The application is configured with Redux for state management and uses Connected-Router for navigation. Additionally, a service worker has been implemented to enable offline capabilities and asset caching in production environments.
Distributed-eStore.UI/src/ClientApp/src · high confidence
Initial UI layer setup with service discovery and React integration
The UI application is introduced as a new ASP.NET Core web project that serves a React frontend (located in ClientApp) and integrates with the distributed system via Consul service discovery. The setup registers the UI as a service in Consul, configures CORS and authorization policies, and wires up an API gateway client (IApiGatewayService) to route requests to backend services. Configuration files define default endpoints for the API gateway and Consul, with development settings enabling the React development server for local debugging.
Distributed-eStore.UI/src · high confidence
Initial implementation of Identity Service API controllers
This change introduces the core HTTP endpoints for the Identity microservice, enabling user registration, authentication, and session management. The IdentityController exposes routes for signing up new users, signing in to receive JWTs, retrieving the current user's profile, and changing passwords. The TokensController handles access token refresh and revocation for both access and refresh tokens. A BaseController provides shared logic for extracting the current user's ID and admin status from the JWT, while a HomeController provides a basic health-check endpoint.
Distributed-eStore.Services.Identity/src/Controllers · high confidence
Initial implementation of client-side cart state management
This change introduces the foundational Redux state management for the shopping cart within the client application. It adds new TypeScript modules defining the cart state structure (mapping products by ID), action types (add, remove, change quantity, place order), and reducers that handle immutable state updates for these operations. The implementation also includes action creators that dispatch these state changes, laying the groundwork for cart functionality in the UI.
Distributed-eStore.UI/src/ClientApp/src/state/cart · high confidence
Initial order service scaffolding with command/query handlers and MongoDB repository
The Order service now includes the foundational structure for managing orders, introducing DTOs for order data, a repository interface and its MongoDB-backed implementation for persistence, and command/query handlers. Specifically, the CreateOrderHandler is fully implemented to persist new orders via the repository, while the BrowseOrdersHandler and its associated query are scaffolded but currently throw NotImplementedException, indicating that browsing functionality is not yet operational.
Distributed-eStore.Services.Order/src/Handlers · high confidence
Initial product catalog seeding for female and male categories
The product service now automatically populates the database with initial sample inventory upon startup. The new \ProductsSeeder\ checks for existing items in the 'female' and 'male' categories and, if none are found, inserts a predefined set of clothing products (including flannels, sweaters, and joggers) with associated images and color variants, ensuring the application starts with a populated catalog.
Distributed-eStore.Services.Product/src/Seed · high confidence
Initial project scaffolding with Docker and microservices solution structure
The repository is initialized with a Visual Studio solution file defining the core microservices architecture, including Identity, Common, API Gateway, Product, UI, and Order services. To support containerized development and deployment, a .dockerignore file and a Docker Compose services definition (services.yml) are added, configuring the API Gateway service on port 80. A comprehensive .gitignore file is also introduced to exclude build artifacts, IDE caches, and sensitive configuration files from version control.
(repo-wide) · high confidence
Initial release of the API Gateway service
Introduces the API Gateway as a new .NET 5.0 service that acts as the central entry point for client requests. The gateway configures service discovery via Consul, manages routing to backend services (products, identity, orders, and UI) using RestEase, and enforces security through JWT authentication and role-based authorization. It also integrates RabbitMQ for messaging and supports containerized deployment via a provided Dockerfile.
Distributed-eStore.Api.Gateway/src · high confidence
Initial release of the Identity microservice
The Identity service is now available to handle user registration, authentication, and authorization. It provides JWT-based security, stores user and refresh token data in MongoDB, and registers itself with Consul for service discovery. The service exposes standard REST endpoints for managing user identities and includes specific error codes for scenarios such as duplicate emails, invalid credentials, and revoked tokens.
Distributed-eStore.Services.Identity/src, Distributed-eStore.UI · high confidence
Initial release of the Identity microservice with Docker support
The Identity microservice is now available as a standalone component within the distributed eStore architecture. This change introduces the service's solution file, project structure, and a Dockerfile based on the .NET 5.0 SDK, enabling containerized deployment. The service exposes port 5000 and includes a .dockerignore file to optimize build contexts, establishing the foundational infrastructure for identity management capabilities.
Distributed-eStore.Services.Identity, Distributed-eStore.Services.Order, Distributed-eStore.Services.Product · high confidence
Initial release of the Order microservice with service discovery and persistence
The Order service is now available as a runnable ASP.NET Core application, providing the backend capability to manage orders. It integrates with MongoDB for data storage, RabbitMQ for asynchronous command handling (specifically subscribing to CreateOrder events), and Consul for service registration and discovery. The service is configured to listen on port 5005 and connects to infrastructure components (MongoDB, RabbitMQ, Consul) at the hardcoded address 172.28.160.1, with CORS enabled to allow requests from any origin.
Distributed-eStore.Services.Order/src · high confidence
Introduce API Gateway controllers for product, order, and identity management
The API Gateway now exposes dedicated controllers to route requests to backend microservices. ProductsController handles product browsing, retrieval by ID, and creation (with admin-only write access), IdentityController manages user sign-up and sign-in, and OrdersController accepts order creation commands. These endpoints rely on a new BaseController that standardizes JWT authentication, pagination headers, and message publishing via RabbitMQ, ensuring consistent request handling across the gateway.
Distributed-eStore.Api.Gateway/src/Controllers · high confidence
Introduce Consul-based service discovery and registration
Added a new Consul integration module that enables automatic service registration, health checking, and HTTP request routing via service discovery. The \Extensions\ class provides \AddConsul\ for dependency injection setup and \UseConsul\ for registering the current service instance with health checks and optional Fabio reverse-proxy tags. \ConsulServiceDiscoveryMessageHandler\ intercepts outgoing HTTP calls to resolve service names to actual addresses (including a Docker-specific localhost replacement), while \ConsulServicesRegistry\ implements simple round-robin load balancing across healthy service instances.
Distributed-eStore.Common/Consul · high confidence
Introduce Product microservice with Autofac DI, MongoDB, and RabbitMQ integration
The Product microservice is now available, bootstrapped via Program.cs and Startup.cs using Autofac for dependency injection. It connects to MongoDB for data persistence and registers with Consul for service discovery. The service is configured to listen on RabbitMQ for incoming commands (specifically CreateProduct) and exposes REST endpoints via ASP.NET Core MVC. Configuration for service endpoints, database connections, and messaging is provided in appsettings.json.
Distributed-eStore.Services.Product/src · high confidence
Introduce RabbitMQ message bus infrastructure
This change adds the core infrastructure for distributed messaging using RabbitMQ (via RawRabbit). It introduces a \BusPublisher\ for sending commands and events, and a \BusSubscriber\ that handles message consumption with automatic retry policies, correlation context tracking, and OpenTracing integration. The update also includes DI extension methods to register these components and configure naming conventions, queues, and exchanges, along with supporting types like \CorrelationContext\ and \RabbitMqOptions\ to manage message metadata and connection settings.
Distributed-eStore.Common/RabbitMq · high confidence
Introduce Redux-based product state management with category filtering and color selection
The application now manages product data through a dedicated Redux store located in the Products state directory. This change introduces actions to fetch products by category (Female, Male, Accessories) and by specific ID, caching results in a map to avoid redundant API calls. Users can now interact with product listings to select specific color variants, with the UI state updating to reflect the chosen color index for each product.
Distributed-eStore.UI/src/ClientApp/src/state/Products · high confidence
Introduce common message contracts and domain command definitions
This change adds a shared set of interfaces and concrete classes to the \Distributed-eStore.Common.Messages\ namespace to standardize distributed communication. It defines the core message hierarchy (\IMessage\, \ICommand\, \IEvent\, \IRejectedEvent\) and a \MessageNamespaceAttribute\ for routing metadata. Additionally, it introduces specific domain commands for the e-store, including \CreateOrder\ (with \OrderItem\) and \CreateProduct\, alongside helper types like \RejectedEvent\ and \Resource\ to support structured error handling and service endpoint identification.
Distributed-eStore.Common/Messages · high confidence
Introduces core CQRS infrastructure and service discovery for the distributed eStore
This change adds the foundational infrastructure for the Distributed-eStore.Common library, enabling Command and Query dispatching via a unified Dispatcher interface backed by Autofac. It includes a fluent Handler builder for managing execution, success, and error callbacks, as well as base types for entities, aggregate IDs, and paged results. Additionally, it provides RestEase integration with support for Consul and Fabio service discovery, allowing HTTP clients to be registered with automatic load balancing and query parameter serialization.
(repo-wide) · high confidence
Introduction of Order and OrderItem domain entities
The Order service now includes core domain models for managing purchase data. The Order entity tracks the customer and its associated items, enforcing that an order must contain at least one item. The OrderItem entity represents individual line items, validating that product quantities are positive and normalizing size attributes to lowercase.
Distributed-eStore.Services.Order/src/DomainEntities · high confidence
Introduction of Product domain entity with validation logic
The Product service now includes a core Product domain entity that enforces business rules for product data. Users can no longer create or update products with empty names or descriptions, and prices are restricted to positive values. The entity also supports categorization and stores multiple image URLs and color options for each product.
Distributed-eStore.Services.Product/src/DomainEntities · high confidence
Introduction of core identity domain models
The identity service now includes foundational domain entities to support user authentication and authorization. A new User entity enforces email format validation, role constraints (user/admin), and secure password handling via hashing. Role definitions are centralized in a static Role class with validation logic. Additionally, a RefreshToken entity manages token lifecycle, including creation, revocation, and expiration tracking, enabling secure session management.
Distributed-eStore.Services.Identity/src/Domain · high confidence
New API Gateway controllers for identity, products, and orders
The UI microservice now exposes dedicated API endpoints to communicate with backend services via the API Gateway. A new BaseController provides shared logic for pagination headers and user context. IdentityController handles user sign-up and sign-in requests. ProductsController allows browsing product listings and retrieving individual product details by ID. OrdersController accepts requests to create new orders. These controllers act as the primary interface for the UI layer to interact with the distributed system's core functionalities.
Distributed-eStore.UI/src/Controllers · high confidence
New API service layer for product requests and order creation
The application now uses a dedicated API service layer in the \services/api\ directory to handle HTTP communication. This includes a new \createOrder\ function that posts order data to the backend with Bearer token authentication extracted from local storage, and a \products\ module that provides functions to fetch product lists (including category-specific filters for female, male, and accessories) and individual product details by ID.
Distributed-eStore.UI/src/ClientApp/src/services/api · high confidence
New Accessories Products page with category-specific listing
A new Accessories Products page has been added to the client application, allowing users to view products filtered by the accessories category. The page component fetches the relevant product data on mount and renders a product list, accompanied by a top banner image that is hidden on screens narrower than 960px to ensure a responsive layout.
Distributed-eStore.UI/src/ClientApp/src/containers/AccessoriesProductsPage · high confidence
New Product component with color switching and responsive layout
The Product component in the client application has been implemented to display product details including name, price, and images. It integrates a ColorSwitcher component that allows users to select different product colors, dynamically updating the displayed image based on the selected color index. The component includes responsive CSS styles that adjust the product card's width on screens smaller than 960px, ensuring a better mobile experience.
Distributed-eStore.UI/src/ClientApp/src/components/products/Product · high confidence
New ProductList component for rendering product grids
The ProductList component has been introduced to handle the rendering of product collections. It accepts an array of IProduct objects and displays them within a flex-wrap container styled via a new ProductList.css file, delegating the individual item rendering to the existing Product component.
Distributed-eStore.UI/src/ClientApp/src/components/ProductList · high confidence
New cart product display and order placement UI
The shopping cart view now features a dedicated component for individual cart items, displaying product images, names, prices, colors, and sizes, along with an input field to adjust quantities. The main cart container lists these items, calculates the sub-total including VAT, and provides a 'Create Order' button to initiate the checkout process.
Distributed-eStore.UI/src/ClientApp/src/components/cart/cartProduct · high confidence
New login page with email/password authentication and validation
The eStore UI now includes a dedicated login page that allows users to authenticate using an email and password. The form includes client-side validation, displaying error messages if either field is left empty upon submission. Once a user successfully logs in, they are automatically redirected to the home page. The page also provides a link to the registration flow for new users.
Distributed-eStore.UI/src/ClientApp/src/containers/Login · high confidence
New product query models for browsing and retrieval
The product service now exposes specific query models to support product discovery and detail retrieval. A new BrowseProducts query allows filtering products by category and price range with default pagination settings, while a GetProduct query enables fetching a single product by its unique identifier.
Distributed-eStore.Services.Product/src/Queries · high confidence
New shared MVC infrastructure for controllers, error handling, and service configuration
The Distributed-eStore.Common/Mvc package now provides a foundational layer for ASP.NET Core MVC applications. It introduces a BaseController that standardizes API responses (handling 404s for null data) and integrates with a command/query dispatcher for cleaner controller logic. An ErrorHandlerMiddleware is added to catch unhandled exceptions and return structured JSON error responses. Additionally, extension methods simplify service registration (including custom JSON serialization settings like camelCase and ISO date formats), forwarded header handling, and startup initializer wiring, while a ServiceId component provides a unique identifier for application instances.
Distributed-eStore.Common/Mvc · high confidence
New startup initialization infrastructure
The Distributed-eStore.Common library now includes a new startup initialization system. This introduces the IInitializer and IStartupInitializer interfaces, along with a StartupInitializer class that manages a collection of initializers and executes their InitializeAsync methods concurrently. Additionally, a new AppOptions class for configuration binding and an Extensions class with helper methods for configuration retrieval and string formatting have been added.
Distributed-eStore.Common · high confidence
New user registration page with form validation
A new registration page has been added to the client application, allowing users to create an account by submitting their first name, last name, email, and password. The page includes client-side validation that displays error messages for required fields upon submission and redirects authenticated users away from the registration screen. It integrates with the existing Redux user state and actions to handle the registration process.
Distributed-eStore.UI/src/ClientApp/src/containers/Register · high confidence
Product color selection UI component
A new ColorBox component has been added to the product details view, allowing users to select a product color variant. The component renders a circular color swatch that, when clicked, triggers a selection action. It includes specific CSS styling for the swatch and a selected state indicator (a black border ring) to provide visual feedback on the currently chosen color.
Distributed-eStore.UI/src/ClientApp/src/components/products/ColorBox · high confidence
Product data model exposed via new DTO
A new ProductDto class has been introduced to define the structure of product data returned by the service. This data transfer object includes fields for the product's unique identifier, name, description, category, price, image URLs, and available colors, establishing the contract for how product information is serialized and transmitted to consumers.
Distributed-eStore.Services.Product/src/Dto · high confidence
Product detail page with size selection and cart redirection
The ProductView container now renders a complete product detail interface, allowing users to select a size from a predefined list and switch between product colors. When the user clicks 'Add to Cart', the selected item (including the chosen size and color) is added to the cart, and the application automatically redirects the user to the cart page.
Distributed-eStore.UI/src/ClientApp/src/containers/ProductView · high confidence
Product service exposes browsing and retrieval endpoints
The product microservice now provides HTTP endpoints for managing product data. A new ProductsController allows users to browse products via a GET request that returns a paged result and to retrieve a specific product by ID. Additionally, a HomeController is added to serve a simple home page response at the root route.
Distributed-eStore.Services.Product/src/Controllers · high confidence
Product service now supports browsing, retrieving, and creating products
The Product microservice now exposes core product management capabilities through new command and query handlers. Users can browse products with pagination, retrieve individual product details by ID, and create new product entries. The browse and get operations return structured product data including name, description, price, colors, image URLs, and category, while creation includes validation to prevent duplicate product names.
Distributed-eStore.Services.Product/src/Handlers · high confidence
UI service introduces API Gateway client for product, identity, and order operations
The UI microservice now includes a new IApiGatewayService interface that defines the HTTP endpoints it uses to communicate with backend services. This client enables the UI to browse products, retrieve product details by ID, handle user sign-up and sign-in via identity services, and create orders. The interface is built using RestEase and targets specific API routes (e.g., /api/v1/products, /api/v1/identity/sign-in, /api/v1/orders), establishing the contract for these distributed interactions.
Distributed-eStore.UI/src/Services · high confidence
Behavioural changes
Cart state persistence via localStorage
The application now automatically saves the shopping cart contents to the browser's localStorage and restores them on startup. This ensures that users retain their selected items across page refreshes or browser restarts without needing to re-add products.
Distributed-eStore.UI/src/ClientApp/src/state · high confidence
Centralized API endpoints and product constants
The application now uses a dedicated constants module to manage configuration, introducing centralized API base URLs for identity, products, and orders under the /api/v1 prefix. Additionally, product-specific constants have been defined, including a default color index and an enumeration for product categories (female, male, accessories), providing a single source of truth for these values across the client application.
Distributed-eStore.UI/src/ClientApp/src/constants · high confidence
Expose Login and Register containers via index
The application now explicitly exports the Login and Register container components from the containers module, making them available for import by other parts of the application such as routing or layout components.
Distributed-eStore.UI/src/ClientApp/src/containers · high confidence
Extracted cart widget into a standalone component
The cart widget has been refactored into a dedicated React component (CartWidget) with its own styling. This change isolates the cart badge UI, which displays the number of items in the shopping cart, allowing it to be reused and connected to application state independently of other navigation elements.
Distributed-eStore.UI/src/ClientApp/src/components/cart/cartWidget · high confidence
New responsive home page with category-based product filtering
The home page now features a responsive layout with a hero banner and a product filter component. Users can filter products by category, with the product list dynamically updating to show items matching the selected category. The page also includes a bottom banner for additional content.
Distributed-eStore.UI/src/ClientApp/src/containers/HomePage · medium confidence
Order service controller structure and home page
The Order microservice now includes a HomeController that serves a static home page at the root route, and an OrdersController that inherits from a shared BaseController and accepts an IDispatcher for handling order-related requests. These controllers are currently placed in the DistributedEStore.Services.Product.Controllers namespace, which appears to be a temporary or incorrect namespace assignment that may need correction for proper service isolation.
Distributed-eStore.Services.Order/src/Controllers · medium confidence
Product color selection UI with visual feedback
The ColorSwitcher component now renders a list of color options for a product, allowing users to select a specific color variant. It integrates with the application store to dispatch actions that update the selected color, and provides visual feedback by applying a distinct border class to the currently selected color box.
Distributed-eStore.UI/src/ClientApp/src/components/products/ColorSwitcher · high confidence
Product repository implementation with category filtering
The Product service now includes a concrete repository implementation for managing product data. This change introduces an interface and its MongoDB-backed implementation, enabling standard CRUD operations (Get, Add, Update, Delete) and existence checks. Notably, the repository supports browsing products with filtering by category, allowing users to retrieve paginated lists of products within a specific category.
Distributed-eStore.Services.Product/src/Repositories · high confidence
Products component module reorganization
The products component module has been restructured to expose its sub-components (Product, ColorSwitcher, and ColorBox) through a centralized index file, simplifying imports for consumers of this module.
Distributed-eStore.UI/src/ClientApp/src/components/products · high confidence
Redesigned navigation with promotional banner and updated menu structure
The navigation component has been updated to include a top promotional bar displaying an 'End-of-Season Sale' message, styled with a dark background and specific typography. The main navigation bar now features a responsive layout using Reactstrap components, including a hamburger toggle for mobile views. The menu structure has been reorganized to include direct links for 'Womens', 'Mens', and 'Accessories' categories, while conditional rendering now displays 'Login' and 'Register' links for unauthenticated users and 'Logout' and 'Account' links for authenticated users. A cart widget showing the item count is also integrated into the navigation.
Distributed-eStore.UI/src/ClientApp/src/containers/NavMenu · high confidence
Dependencies
Initial dependency configuration for distributed eStore services and UI
This change introduces the initial dependency manifests for the distributed eStore architecture, establishing the foundational libraries for the API Gateway, Identity, Order, and Product microservices, as well as the React-based UI. The .NET services target .NET 5.0 and rely on the shared Distributed-eStore.Common library, which bundles core infrastructure packages including Autofac for dependency injection, Consul for service discovery, RawRabbit for RabbitMQ messaging, MongoDB driver, OpenTracing for distributed tracing, and JWT authentication. The UI layer is configured as a .NET 5.0 Web API hosting a React SPA, utilizing Redux Toolkit for state management, Axios for HTTP requests, and Bootstrap for styling, with build scripts integrated to handle npm dependency installation and production builds.
(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
Score
- CAI 39 → 38 (-1.0)
- Rubric changed (rubric-2026.08.18 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 60 → 58 (-1.9)
- Architecture 93 → 77 (-15.4)
- Maturity 60 → 62 (+2.1)
- Readiness 24 → 24 (-0.8)
- Security 61 → 61 (-0.7)
- Domain Modelling 100 → 88 (-11.7)
- Accessibility 37 → 37 (+0.1)
Resolved (87)
- Bounded contexts not declared
- Change coupling: products.ts ↔ productsReducers.ts (Distributed-eStore.UI/src/ClientApp/src/services/api/products.ts)
- Coverage not included — suite not readable by the collector
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical vulnerability: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Duplicated block (10 lines × 2) (Distributed-eStore.Api.Gateway/src/Controllers/BaseController.cs)
- …and 67 more
New (182)
- Coverage not measured — no coverage collector is wired up
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical CVE: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Critical vulnerability: [GHSA redacted] (Distributed-eStore.UI/src/ClientApp/package-lock.json)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- …and 162 more
API surface
- Unchanged — 12 HTTP endpoints
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
evgenirusev/Distributed-eStore 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 2d77f2bfd9ee8c3697f91e98019ae191198d0da7 — 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-28e75b8e3254.