Skip to content
CAI
Software that uses CAICheck a score

MesutAtasoy/Joker

42.9

Weak · 21 September 2026

16.9k

lines of production code

C#

with JavaScript

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a microservices-based platform for managing merchants, stores, campaigns, and user favorites. It provides REST and gRPC APIs for creating, updating, and retrieving data across these domains, with an aggregator layer that consolidates requests to downstream services. The architecture includes dedicated services for search, notifications, and identity, all containerized via Docker and supported by infrastructure like Elasticsearch, MongoDB, and RabbitMQ.

Features

Add Favorite.Hub ASP.NET Core service scaffolding

The Favorite.Hub service is introduced with a standard ASP.NET Core 6.0 Web API template, including a WeatherForecast controller, Dockerfile, and configuration files. This provides the foundational structure for the hub's backend, exposing a Swagger UI for API exploration in development.

src/Services/Favorite/Favorite.Hub · high confidence

Added Campaign mapping profiles for gRPC message conversion

A new mapping profile has been introduced to handle the conversion between gRPC messages (such as CampaignMessage, IdNameMessage, CreateCampaignModel, and UpdateCampaignModel) and their corresponding domain models. This includes specific mappings for date/time fields and ID conversions, enabling the API to correctly map campaign data from the gRPC service.

src/Aggregators/Aggregator.Api/Models/Campaign/MappingProfiles · high confidence

Added Favorite models for campaigns and stores

New data models have been introduced to support a favorite feature, including \AddCampaignModel\, \CampaignModel\, \AddStoreModel\, and \StoreModel\ for representing campaign and store entities. Additionally, \FavoriteCampaignModel\ and \FavoriteStoreModel\ were added to track user favorites, each linking to the respective entity and a \UserModel\ containing the user's ID and username. A shared \IdNameModel\ was also added to the \Shared\ namespace.

src/Aggregators/Aggregator.Api/Models/Favorite · high confidence

Added Health Check, Merchant, and Store API endpoints

The Merchant API now exposes new endpoints for managing merchants and stores. A health check is available at /api/HealthCheck/api-status. The MerchantController provides CRUD operations (GET, POST, PUT, DELETE) for merchants, including retrieving stores by merchant ID. The StoreController exposes endpoints for creating, updating (including location), and deleting stores, as well as retrieving store details and lists. All endpoints require authentication via the 'ScopePolicy' policy.

src/Services/Merchant/Merchant.Api/Controllers · high confidence

Added Jekyll test suite and Prism.js syntax highlighting plugins

The BackOffice application now includes a Jekyll feature test suite (step definitions and support files) for validating Jekyll-related functionality. Additionally, the application bundles a comprehensive set of Prism.js plugins to enhance code block rendering: autolinker, autoloader, command-line styling, copy-to-clipboard, custom classes, data URI highlighting, diff highlighting, download buttons, file fetching, keyword highlighting, inline color previews, JSONP highlighting, markup preservation, line and number highlighting, brace matching, whitespace normalization, and previewers for colors, gradients, and angles. These additions improve the developer experience by providing interactive and visually distinct code snippets with features like one-click copying, direct downloading, and live previews of colors and gradients.

(repo-wide) · high confidence

Added Joker.Packages submodule

A new submodule named Joker.Packages has been added to the repository, pointing to commit 31bfd14b135e8ea87f75fa5e182b7c51934f264d. This change introduces the submodule as a distinct component within the project structure.

src/Submodules · high confidence

Added MongoDB mapping for the Store entity

A new mapping configuration for the Store entity has been added to the MongoDB persistence layer. This change enables the storage and retrieval of Store aggregate data within the Merchant service's database.

src/Services/Merchant/Merchant.Infrastructure/Mappings · high confidence

Added Store management capabilities

Introduced the StoreManager class and associated mapping profile to support creating, updating, deleting, and retrieving stores, as well as updating store locations. This adds the core application-layer logic for store operations within the Merchant service.

src/Services/Merchant/Merchant.Application/Stores · high confidence

Added campaign creation and update event handlers

New event handlers for campaign creation and updates have been introduced to the search application. These handlers listen for \CampaignCreatedEvent\ and \CampaignUpdatedEvent\ messages, mapping the incoming event data to \CampaignIndexModel\ objects and updating the campaign index via \ICampaignIndexManager\. This enables the search service to automatically index and update campaign information in the search index when campaigns are created or modified.

src/Services/Search/Search.Application/Campaigns/EventHandlers · high confidence

Added campaign search queries and index initialization

Introduced new capabilities for searching and initializing campaigns. A new query, GetCampaignsByParamQuery, allows filtering campaigns by store ID, name, slug, code, title, and description using an Elasticsearch backend. Additionally, a CampaignInitializer was added to handle the creation of the campaign index, ensuring the necessary search infrastructure is in place.

src/Services/Search/Search.Application/Campaigns/Queries · high confidence

Added command for deleting a merchant

A new command and its associated handler and validator have been added to support deleting a merchant. The command carries a unique identifier, and the handler delegates the actual deletion logic to the MerchantManager, ensuring the provided ID is present before processing.

src/Services/Merchant/Merchant.Application/Merchants/Commands/DeleteMerchant · high confidence

Added command to create a new merchant

Introduced a new command and handler for creating a merchant, including validation rules for organization, name, pricing plan, and slogan. This adds the application-layer logic required to process merchant creation requests.

src/Services/Merchant/Merchant.Application/Merchants/Commands/CreateMerchant · high confidence

Added command to update merchant details

Users can now update their merchant profile. This change introduces the command, handler, and validation logic for modifying merchant information, ensuring that the ID, name, and slogan fields are present and meet length constraints.

src/Services/Merchant/Merchant.Application/Merchants/Commands/UpdateMerchant · medium confidence

Added domain models and event handlers for store management

Introduced the core domain entities for the Merchant service, including the \Store\ aggregate root, \StoreLocation\ value object, and associated domain events (\StoreCreatedEvent\, \StoreUpdatedEvent\, \StoreNameUpdatedEvent\). This change also adds the \MerchantNameUpdatedEventHandler\ to process merchant name updates and registers the domain module for dependency injection, enabling the system to track and update store details such as name, location, and contact information.

src/Services/Merchant/Merchant.Domain/StoreAggregate · high confidence

Added favorite campaign and store management capabilities

The Favorite service now supports creating and retrieving favorites for both campaigns and stores. This update introduces the application layer logic for these features, including MediatR commands and queries, managers, DTOs, and event handlers. Users can now favorite campaigns and stores, with the system automatically sending notifications upon creation. The implementation includes specific handlers for creating favorites and retrieving them by user or entity ID.

src/Services/Favorite/Favorite.Application · high confidence

Added gRPC service for managing merchants and stores

A new gRPC service has been introduced in the Merchant API to expose endpoints for creating, updating, and deleting merchants and stores. The implementation includes a \MerchantGrpcService\ that handles requests for both entities, supported by new \MerchantMappingProfile\ and \StoreMappingProfile\ classes that map between DTOs and gRPC message types. The service is protected by a \ScopePolicy\ authorization requirement.

src/Services/Merchant/Merchant.Api/GrpcServices · high confidence

Added infrastructure for ID generation and MongoDB context

The Merchant service now includes an IdGenerationFactory that produces unique identifiers using Guid.NewGuid(), and a MerchantContext class that configures MongoDB serialization settings, including standard Guid representation and class mapping from the assembly.

src/Services/Merchant/Merchant.Infrastructure · high confidence

Added infrastructure for persisting favorite campaigns and stores

The Favorite service now includes infrastructure to store and retrieve favorite items in Couchbase. This includes a BucketInitializers component that ensures the 'favorite' bucket, 'campaign' and 'store' collections, and primary indexes are created on startup. Additionally, new repository implementations (FavoriteCampaignRepository and FavoriteStoreRepository) provide data access for favorite campaigns and stores, enabling the 'My Favorite' page and API to persist user favorites.

src/Services/Favorite/Favorite.Infrastructure · high confidence

Added location hierarchy queries and validation for countries, cities, districts, neighborhoods, and quarters

The Location application now exposes read and validation capabilities for the full geographic hierarchy. Users can retrieve countries, cities, districts, neighborhoods, and quarters via new MediatR queries, with each entity mapped to a corresponding DTO. Additionally, a location validation command verifies that a specific combination of country, city, district, neighborhood, and quarter exists and is valid, returning a structured response indicating validity and the associated location details.

src/Services/Location/Location.Application · high confidence

Added merchant data models and mapping configuration

Introduced new C\# classes for managing merchant data: CreateMerchantModel, UpdateMerchantModel, and MerchantModel, which define the structure for creating, updating, and representing merchant entities. Additionally, a new AutoMapper profile (MerchantMappingProfile) was added to handle the mapping between these models and their corresponding message types, enabling seamless data transformation within the Aggregator API.

src/Aggregators/Aggregator.Api/Models/Merchant · medium confidence

Added merchant data transfer objects

Introduced new DTOs for the merchant service: a read-only MerchantDto containing identification, contact, and organizational details, and an UpdateMerchantDto for modifying merchant information. These classes define the data structures used for API communication.

src/Services/Merchant/Merchant.Application/Merchants/Dto · high confidence

Added merchant management and user context services

The application layer now includes a new MerchantManager class that implements Create, Update, Delete, and retrieval operations for merchants, utilizing an injected IUserService to extract the current user's ID and organization ID from the HTTP context. A corresponding AutoMapper profile (MerchantMappingProfile) is added to map the Merchant domain entity to the MerchantDto, and the IUserService interface along with its HttpContext-based implementation are introduced to support these operations.

src/Services/Merchant/Merchant.Application/Merchants · high confidence

Added merchant management services

Introduced new interfaces and implementations for managing merchant data, including UpdateAsync, DeleteAsync, and GetById operations. The MerchantService class integrates with the gRPC-based MerchantApiGrpcService and utilizes AutoMapper for mapping between domain models and gRPC messages, enabling the aggregator API to interact with the merchant microservice.

src/Aggregators/Aggregator.Api/Services/Merchant · high confidence

Added queries to retrieve merchant data by ID and list all merchants

The application now supports fetching a single merchant by its unique identifier and retrieving a list of all merchants. These new query handlers expose the underlying merchant data via the MediatR pattern, allowing the rest of the system to request merchant information through standardized interfaces.

src/Services/Merchant/Merchant.Application/Merchants/Queries · high confidence

Added search index management for Campaign and Store entities

The search service now includes new index managers for Campaign and Store entities, enabling full CRUD operations (create, read, update, delete, bulk add/update, and re-indexing) against the underlying Elasticsearch infrastructure. This introduces the core data persistence and retrieval logic for these specific entity types within the search system.

src/Services/Search/Search.Core/IndexManagers · high confidence

Added search index models for Campaigns and Stores

New index model classes have been introduced to support search indexing for campaigns and store locations. CampaignIndexModel includes fields for store and merchant details, titles, codes, descriptions, and time windows. StoreIndexModel captures comprehensive location data including name, slogan, contact information, and hierarchical geographic details such as country, city, district, and neighborhood.

src/Services/Search/Search.Core/IndexModels · high confidence

Added store management commands for create, update, delete, and location updates

The application layer now includes command handlers and validators for creating, updating, and deleting stores, as well as updating store locations. This introduces the ability to manage store details (name, slogan, phone, email, description) and their associated location data (country, city, neighborhood, quarter, district, and address) through the MediatR pipeline.

src/Services/Merchant/Merchant.Application/Stores/Commands · high confidence

Added store retrieval queries with pagination support

New MediatR query handlers have been introduced for fetching store data, enabling users to retrieve a single store by ID, list stores with pagination, or filter stores by merchant ID. The list endpoints support pagination via the PagedList model, allowing for efficient data retrieval and navigation through store records.

src/Services/Merchant/Merchant.Application/Stores/Queries · high confidence

Added styling for free and pro UI plugins in the Identity theme

The Identity theme's SCSS structure was updated to include comprehensive styling for a suite of UI plugins. In the 'free' plugins directory, new styles were added for flatpickr, nouislider, perfect-scrollbar, and Prism.js. In the 'pro' plugins directory, styles were added for carousel-slick, choices, datatables (including extend styles), dragula, dropzone, fullcalendar, glidejs, highlight.js, kanban, and leaflet maps. These changes ensure consistent visual integration of these third-party components within the application's design system.

src/Services/Identity/Joker.Identity/wwwroot/theme/scss/soft-design-system/plugins/free, src/Services/Identity/Joker.Identity/wwwroot/theme/scss/soft-design-system/plugins/pro · high confidence

Back Office Gateway API introduced with routing and observability

A new Back Office Gateway API has been added, providing a unified entry point for routing requests to downstream services including Merchant, Management, Location, Campaign, Aggregator, Subscription, and Notification APIs. The gateway is configured with Ocelot for routing, Consul for service discovery, and includes OpenTelemetry tracing with Jaeger and Serilog logging with Elasticsearch. Swagger UI is enabled for API documentation and testing.

src/Gateways/Gateway.BackOffice.Api · high confidence

Campaign service exposes REST and gRPC APIs for full campaign lifecycle management

The Campaign service now provides a complete set of endpoints for managing campaigns. Users can create, update, delete, and retrieve campaigns via both HTTP REST and gRPC interfaces. The service is configured to listen on both HTTP and gRPC ports, with authentication and authorization policies enforced. Additionally, the service integrates with MongoDB for data persistence, RabbitMQ for event handling, and OpenTelemetry for distributed tracing.

src/Services/Campaign · high confidence

Configured Kestrel HTTP/2 and gRPC ports with OpenTelemetry tracing

The Merchant API now explicitly configures Kestrel to listen on separate HTTP and gRPC ports (defaulting to 5000 and 5010 respectively) and enables distributed tracing via OpenTelemetry with Jaeger export. This change also registers services for MongoDB, Consul service discovery, RabbitMQ-based event bus, IdentityServer4 authentication, and role-based authorization policies, providing the foundational infrastructure for the merchant API's communication and observability.

src/Services/Merchant/Merchant.Api/Extensions · high confidence

Docker and infrastructure configuration for microservices

The project now supports containerized deployment via Docker Compose, providing a unified way to run the entire microservices architecture. This includes a new \docker-compose.yml\ that builds and links all API, gateway, and web application services, alongside a \docker-compose.infrastructure.yml\ that spins up required infrastructure such as Consul, RabbitMQ, PostgreSQL, MongoDB, Couchbase, Jaeger, and the ELK stack (Elasticsearch and Kibana). Configuration is supported via a \.env\ file for database credentials, and a \.dockerignore\ file ensures clean builds.

(repo-wide) · high confidence

Favorite service introduces gRPC and REST endpoints for managing favorite campaigns and stores

The Favorite service now exposes both REST and gRPC interfaces for managing favorite campaigns and stores. Users can create, retrieve, and query favorites via HTTP endpoints (e.g., /api/Campaigns, /api/Stores) and through a new gRPC service defined in favorite.proto. The service is configured with authentication, authorization, OpenTelemetry tracing, and event bus integration, supporting both HTTP/1.1 and HTTP/2 protocols.

src/Services/Favorite/Favorite.Api · high confidence

Identity service scaffolding and configuration

The Identity service is initialized with a complete set of controllers (Account, Consent, Device, External, Grants, Home, Organization), configuration constants, and IdentityServer4 setup including API resources, scopes, and client definitions for the Store Front and Back Office applications. The service is containerized via a Dockerfile and configured to use PostgreSQL, RabbitMQ, and Jaeger for tracing.

src/Services/Identity · high confidence

Initial database schema and data seeding for location hierarchy

The Location service now includes the full database schema and data seeding logic for the location hierarchy. This adds Entity Framework Core configurations and migrations for the Country, City, District, Neighborhood, and Quarter entities, establishing the relational structure (including foreign keys and indexes) for the PostgreSQL database. Additionally, a seeding mechanism is introduced to populate these tables with initial data from JSON files, ensuring the database is initialized with the necessary reference data upon startup.

src/Services/Location/Location.Infrastructure · high confidence

Initial release of the Aggregator.Api service

The Aggregator.Api service is introduced, providing a new .NET 6.0 web application that aggregates data from merchant, campaign, management, and location services. The service is configured with Docker support, integrates with ELK for logging, and connects to Consul for service discovery, enabling the aggregation layer to route and process requests from the broader platform.

src/Aggregators/Aggregator.Api, src/Services/Subscription/Subscription.Api · high confidence

Initial release of the Back Office web application

The Back Office application is introduced as a new ASP.NET Core web application, providing a browser-based administrative interface. The release includes controllers for managing campaigns, stores, and user sessions, alongside services that communicate with internal APIs for merchants, locations, and notifications. Authentication is handled via OpenID Connect with cookie-based sessions, and the application is configured with HTTP client policies, OpenTelemetry tracing, and Docker support for containerized deployment.

src/WebApplications/Joker.BackOffice · high confidence

Initial release of the Search.Api service with distributed tracing and logging

The Search.Api service is introduced as a new .NET 6.0 application, enabling search functionality through a dedicated API endpoint. The service is configured for containerized deployment via a new Dockerfile and environment-specific settings (Development, Docker, and default appsettings). It integrates with RabbitMQ for event handling, MongoDB for event history, and Consul for service discovery. Additionally, it supports distributed tracing via OpenTelemetry (exporting to Jaeger) and structured logging to an ELK stack (Elasticsearch), providing observability and monitoring capabilities for the search service.

src/Services/Search/Search.Api · high confidence

Initializes the Merchant application layer with dependency injection and service registrations

The Merchant application module is introduced to configure the service collection, registering repository implementations (MerchantRepository, StoreRepository) with their interfaces, setting up AutoMapper, and registering application services (MerchantManager, StoreManager) and internal services (UserService). It also integrates with the CAP framework for event handling and applies database configuration via MerchantContext.

src/Services/Merchant/Merchant.Application · high confidence

Introduce StoreFront Aggregator API with new endpoints for favorites, merchants, and campaigns

The StoreFront Aggregator API is introduced, providing new endpoints to manage user favorites for campaigns and stores, create and manage merchants, and retrieve campaign details. The API integrates with gRPC services for each domain (Favorite, Merchant, Campaign, Store) and includes a health check endpoint. Configuration for ports, service discovery, and telemetry is also added.

src/Aggregators/Aggregator.StoreFront.Api · high confidence

Introduce the Joker.WebApp web application with user-facing features and infrastructure

The Joker.WebApp is introduced as a new ASP.NET Core web application that provides the user interface for the platform. It implements controllers for account management, campaign and store exploration, search, and subscription plans, alongside services for favorites, merchants, and search operations. The application integrates with OpenID Connect for authentication, SignalR hubs for real-time notifications, and OpenTelemetry for distributed tracing, while also configuring HTTP client resilience via Polly.

src/WebApplications/Joker.WebApp · high confidence

Introduce the Notification service with API and Hub components

A new Notification service has been added to the platform, comprising a REST API and a SignalR Hub. The API exposes endpoints to retrieve user notifications (supporting read/unread filtering) and provides health checks. The Hub manages real-time push notifications via SignalR, subscribing to event bus messages to broadcast updates to connected clients. The service is configured with MongoDB for persistence, RabbitMQ/CAP for event handling, and Jaeger for distributed tracing.

src/Services/Notification · high confidence

Introduced merchant domain model and domain events

Added the core Merchant aggregate root with properties for name, slogan, website, contact details, and subscription plan, along with domain events (MerchantCreatedEvent, MerchantNameUpdatedEvent) to track state changes. This establishes the foundational data model and event-driven behavior for merchant management within the service.

src/Services/Merchant/Merchant.Domain/MerchantAggregate · high confidence

Location API introduces REST and gRPC endpoints for location data and verification

The Location API now exposes RESTful endpoints for retrieving countries, cities, districts, neighborhoods, and quarters, as well as a verification endpoint for validating location data. Additionally, a gRPC service is provided for location validation, allowing clients to verify location data via a high-performance binary protocol. The API is configured to listen on both HTTP/2 and HTTP/1.1 ports, with support for service discovery via Consul and distributed tracing via OpenTelemetry and Jaeger.

src/Services/Location/Location.Api · high confidence

Management API introduces endpoints and gRPC services for managing core entities

The Management API now exposes REST and gRPC interfaces for retrieving lists and individual records of Badges, Business Directories, Currencies, Languages, Payment Methods, and Pricing Plans. This includes new controllers, MediatR query handlers, repository interfaces, and entity models, alongside a gRPC service for ID-based lookups and exception handling. The API also integrates with Consul for service discovery, OpenTelemetry for distributed tracing, and ELK for logging.

src/Services/Management · high confidence

New API endpoints for managing campaigns, merchants, stores, and health checks

The Aggregator API now exposes new REST endpoints for managing campaigns, merchants, and stores, along with a health check. Specifically, the /api/Campaigns, /api/Merchants, /api/Stores, and /api/HealthCheck routes are introduced, each handling their respective create, update, and delete operations with appropriate authorization and validation logic.

src/Aggregators/Aggregator.Api/Controllers · high confidence

New Campaign service implementation for API aggregation

The CampaignService class and its corresponding interface have been introduced to handle campaign operations (create, update, delete, and retrieve by ID) by calling the underlying gRPC service. This adds the specific service layer responsible for mapping requests and responses between the API and the gRPC backend.

src/Aggregators/Aggregator.Api/Services/Campaign · high confidence

New DTOs for store management and location data

Added new data transfer objects to support store operations: StoreDto and StoreLocationDto for reading store and location details, UpdateStoreDto for modifying store details, AddBusinessHourDto for managing business hours, and AddFaqDto for frequently asked questions.

src/Services/Merchant/Merchant.Application/Stores/Dto · high confidence

New Gateway.Web.Api service introduces API gateway and distributed tracing

A new Gateway.Web.Api service has been added to the codebase, implementing an API gateway using Ocelot with Consul service discovery and Polly-based resilience. The service is configured to route traffic to Search, Management, Favorite, and Aggregator Storefront APIs, with corresponding Swagger UI endpoints. Additionally, OpenTelemetry tracing is integrated via Jaeger for distributed tracing, and logging is configured to send logs to an ELK stack.

src/Gateways/Gateway.Web.Api · high confidence

New Store and Location services for the Aggregator API

The Aggregator API now exposes new service interfaces and implementations for managing store and location data. The Store service provides Create, Update, Delete, and GetById operations for stores, utilizing gRPC calls to the Merchant API and mapping responses via AutoMapper. Additionally, a new Location service has been introduced to validate location data by interacting with the Location API via gRPC.

src/Aggregators/Aggregator.Api/Services/Store · medium confidence

New data models for Campaign and Location entities

The API layer now includes new data models to support campaign and location management. For campaigns, the system introduces \CampaignModel\ for existing data, \CreateCampaignModel\ for new campaign creation, and \UpdateCampaignModel\ for modifications, all containing fields for titles, codes, descriptions, conditions, and timeframes. Additionally, new models for location management have been added: \LocationModel\ representing hierarchical location data (country, city, district, etc.) with a validation flag, and \LocationVerificationModel\ for validating location IDs. These changes enable the backend to handle campaign and location data structures required by the application.

src/Aggregators/Aggregator.Api/Models/Campaign · high confidence

New search endpoints for campaigns and stores

The Search API now exposes new REST endpoints for retrieving campaigns and stores. A GET request to /api/Campaigns returns a list of campaigns, and a GET request to /api/Stores returns a list of stores, both utilizing MediatR to handle the underlying queries. Additionally, a health check endpoint is available at /api/HealthCheck/api-status to verify the service is running.

src/Services/Search/Search.Api/Controllers · high confidence

New theme added

Added SCSS styling for multiple UI plugins to the theme, including flatpickr, nouislider, perfect-scrollbar, prism, carousel-slick, choices, datatables, dragula, dropzone, fullcalendar, glidejs, highlight.js, kanban, and leaflet.

src/WebApplications/Joker.WebApp/wwwroot/theme/scss/soft-design-system/plugins/free, src/WebApplications/Joker.WebApp/wwwroot/theme/scss/soft-design-system/plugins/pro · high confidence

Store search and indexing via event-driven updates

The Search service now supports querying stores by various geographic and identifier parameters (country, city, district, neighborhood, quarter) through a new GetStoresByParam query handler. Additionally, the system automatically updates the search index when store data changes, via new event handlers for StoreCreated and StoreUpdated integration events that map incoming event data to the StoreIndexModel for indexing.

src/Services/Search/Search.Application/Stores · medium confidence

Subscription API endpoints introduced

The Subscription API now exposes a health check at /api/HealthCheck/api-status and a subscription retrieval endpoint at /api/Subscriptions/{id}. The subscription endpoint requires authorization via the 'ScopePolicy' and returns the subscription data for a given ID.

src/Services/Subscription/Subscription.Api/Controllers · high confidence

Subscription API startup configuration and service registration

The Subscription API now includes extension methods to configure the application's startup behavior. This includes registering services for MongoDB, Consul service discovery, RabbitMQ-based event bus, IdentityServer4 authentication, and OpenTelemetry tracing with a Jaeger exporter. Additionally, the Kestrel server is configured to listen on specific HTTP and gRPC ports defined in the configuration.

src/Services/Subscription/Subscription.Api/Extensions · medium confidence

Subscription management and event handling added

The Subscription application layer now includes the core domain model for subscriptions, including the \Subscription\ entity, \SubscriptionDto\, and associated repository interfaces. This change introduces the ability to subscribe to pricing plans, track activation details, and handle merchant lifecycle events (creation and name updates) via CAP event handlers. Additionally, shared DTOs and AutoMapper profiles are added to support data transfer and mapping within the subscription service.

src/Services/Subscription/Subscription.Application · high confidence

Behavioural changes

Added gRPC exception interceptor for centralized error handling

A new GrpcExceptionInterceptor has been introduced to the Merchant.Api service. This component implements the gRPC Interceptor pattern to catch unhandled exceptions during unary server calls. It logs the error details and the request path, then re-throws a standardized RpcException containing the error message in the metadata, ensuring consistent error responses for gRPC clients.

src/Aggregators/Aggregator.Api/Interceptors, src/Services/Merchant/Merchant.Api/Interceptors · high confidence

Added reference data models and mapping for geographic and merchant entities

Introduced new domain reference types for Country, City, Neighborhood, Quarter, District, and Merchant, each inheriting from a shared IdNameRef base. These entities are now mapped to an IdNameDto via a new SharedMappingProfile, enabling consistent transformation of these reference objects into a common data-transfer structure for use across the application.

src/Services/Merchant/Merchant.Application/Shared, src/Services/Merchant/Merchant.Domain/Refs · high confidence

Added repository implementations for Merchant and Store entities

New repository classes, MerchantRepository and StoreRepository, have been introduced in the infrastructure layer to handle data access for the Merchant and Store aggregates. These implementations provide methods for retrieving entities by ID and, in the case of StoreRepository, updating merchant name references, utilizing the existing MongoDomainRepository base class and event dispatcher.

src/Services/Merchant/Merchant.Infrastructure/Repositories · medium confidence

Added store data models and mapping profiles

Introduced new request models for creating and updating store information, including details like name, slogan, contact info, and location. Added a StoreModel to represent store data and a corresponding mapping profile using AutoMapper to handle conversions between message and model types.

src/Aggregators/Aggregator.Api/Models/Store · medium confidence

Aggregator API startup and configuration infrastructure

The Aggregator API now includes a new startup configuration layer that defines how the service binds to HTTP and gRPC ports, registers gRPC clients for downstream services (Management, Campaign, Merchant, Location), and sets up authentication, authorization, and distributed tracing. Specifically, the API listens on configurable HTTP and gRPC ports, registers gRPC clients with exception interceptors for each downstream API, configures IdentityServer4-based authentication, applies a role-based authorization policy requiring 'Admin' or 'PaidUser' roles, and enables OpenTelemetry tracing with Jaeger export for ASP.NET Core, HTTP clients, and gRPC clients.

src/Aggregators/Aggregator.Api/Extensions · high confidence

Merchant API service initialization with Docker and observability support

The Merchant.Api service is now fully bootstrapped with a .NET 6.0 Dockerfile, a Program.cs entry point, and environment-specific configuration files (Development, Docker, and default). This enables containerized deployment and provides built-in support for distributed tracing (Jaeger/OpenTelemetry), logging to Elasticsearch (ELK), and service discovery via Consul, alongside standard HTTP and gRPC endpoint registration.

src/Services/Merchant/Merchant.Api · medium confidence

Search index updates for merchant and store name changes

Added event handlers for MerchantNameUpdated and StoreNameUpdated events to keep the search index in sync. When a merchant or store name changes, the system now automatically updates the corresponding records in the ElasticSearch index for both stores and campaigns, ensuring search results reflect the latest names.

src/Services/Search/Search.Application/Shared · medium confidence

Fixes

Added gRPC authentication header injection

A new BaseGrpcProvider implementation and its interface have been added to the Aggregator.Api service. This change enables automatic injection of the OpenID Connect access token into the Authorization header for gRPC calls, ensuring authenticated requests are properly headed.

src/Aggregators/Aggregator.Api/Services/BaseGrpc · high confidence

Test coverage

Added integration tests for Merchant and Store APIs

Added new integration tests for the Merchant service, covering the full CRUD lifecycle for merchants and stores. The test suite verifies endpoints for creating, updating, and deleting merchants and stores, as well as health check endpoints. A new AppTestFixture was introduced to bootstrap the application for testing.

src/Services/Merchant/Merchant.IntegrationTests · high confidence

Dependencies

Initial project structure and dependencies for microservices

This change introduces the initial .csproj files for multiple microservices and their supporting layers, including Aggregator, Campaign, Favorite, Identity, Location, Management, Merchant, Notification, and Search services. Each service is configured for the .NET 6.0 runtime and includes dependencies for gRPC, OpenTelemetry, Serilog, and various internal Joker packages. Gateways (BackOffice and Web) are also added with Ocelot and Swagger dependencies. This establishes the foundational build and dependency structure for the application's microservices architecture.

(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 47 → 43 (-4.5)
  • Rubric changed (rubric-2026.08.18 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 59 → 55 (-3.9)
  • Architecture 77 → 77 (-0.1)
  • Maturity 47 → 47 (+0.0)
  • Readiness 44 → 44 (+0.6)
  • Security 79 → 66 (-12.3)
  • Domain Modelling 92 (new)
  • Accessibility 43 → 33 (-9.7)

Resolved (19)

  • Bounded contexts not declared
  • Build status unknown
  • Duplicated block (11 lines × 2) (src/Services/Merchant/Merchant.Api/GrpcServices/MappingProfiles/MerchantMappingProfile.cs)
  • Duplicated block (11 lines × 8) (src/Services/Merchant/Merchant.Api/Extensions/WebHostBuilderExtensions.cs)
  • Duplicated block (14 lines × 2) (src/Services/Campaign/Campaign.Api/Extensions/HostBuilderExtensions.cs)
  • Duplicated block (14 lines × 5) (src/Services/Merchant/Merchant.Api/Interceptors/GrpcExceptionInterceptor.cs)
  • Duplicated block (18 lines × 2) (src/WebApplications/Joker.WebApp/HttpHandlers/BearerTokenHandler.cs)
  • Duplicated block (25 lines × 2) (src/WebApplications/Joker.WebApp/HttpHandlers/BearerTokenHandler.cs)
  • Duplicated block (37 lines × 2) (src/WebApplications/Joker.WebApp/Extensions/OpenIdConnectExtensions.cs)
  • Duplicated block (6 lines × 3) (src/Services/Location/Location.Infrastructure/Seed/LocationContextSeeder.cs)
  • Duplicated block (7 lines × 2) (src/Services/Merchant/Merchant.Application/Stores/Commands/CreateStore/CreateStoreCommandValidator.cs)
  • Duplicated block (8 lines × 2) (src/WebApplications/Joker.WebApp/Extensions/UrlExtensions.cs)
  • Duplicated block (9 lines × 3) (src/WebApplications/Joker.WebApp/Extensions/PolicyExtensions.cs)
  • No exposed public API
  • Tests co-located / outside the solution
  • The README is a single platform description with no per-service documentation; the project setup is procedural rather than guided by a design document. (README.md)
  • The single README is a platform-level description with no API documentation, and it only links to one template (Soft UI) while the majority of services remain undocumented. (README.md)
  • redundant comment (src/Services/Identity/Joker.Identity/Constants/AccountOptions.cs)
  • single-maintainer — knowledge-concentration (bus factor) risk

New (132)

  • (anonymous) (cognitive 124) (src/Services/Identity/Joker.Identity/wwwroot/theme/js/plugins/typedjs.js)
  • (anonymous) (cognitive 16) (src/Services/Identity/Joker.Identity/wwwroot/theme/js/soft-design-system.js)
  • (anonymous) (cognitive 17) (src/WebApplications/Joker.BackOffice/wwwroot/assets/js/argon.js)
  • (anonymous) (cognitive 33) (src/WebApplications/Joker.BackOffice/wwwroot/assets/js/argon.js)
  • (anonymous) (cognitive 33) (src/WebApplications/Joker.BackOffice/wwwroot/assets/js/components/init/chart-init.js)
  • (anonymous) (cyclomatic 110) (src/Services/Identity/Joker.Identity/wwwroot/theme/js/plugins/typedjs.js)
  • (anonymous) (cyclomatic 17) (src/WebApplications/Joker.BackOffice/wwwroot/assets/js/argon.js)
  • (anonymous) (cyclomatic 23) (src/WebApplications/Joker.BackOffice/wwwroot/assets/js/argon.js)
  • (anonymous) (cyclomatic 23) (src/WebApplications/Joker.BackOffice/wwwroot/assets/js/components/init/chart-init.js)
  • Documentation: no architecture or design documentation (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (10 lines × 2) (src/Aggregators/Aggregator.Api/Models/Store/StoreModel.cs)
  • Duplicated block (10 lines × 2) (src/WebApplications/Joker.BackOffice/Extensions/ServiceCollectionExtensions.cs)
  • Duplicated block (10 lines × 2) (src/WebApplications/Joker.BackOffice/HttpHandlers/BearerTokenHandler.cs)
  • Duplicated block (10 lines × 6) (src/Aggregators/Aggregator.Api/Models/Campaign/CampaignModel.cs)
  • Duplicated block (10–15 lines × 2) (src/Services/Merchant/Merchant.Application/Stores/StoreManager.cs)
  • Duplicated block (11 lines × 3) (src/Aggregators/Aggregator.StoreFront.Api/Extensions/PolicyExtensions.cs)
  • Duplicated block (11 lines × 3) (src/Services/Campaign/Campaign.Domain/CampaignAggregate/Events/CampaignCreatedEvent.cs)
  • Duplicated block (12 lines × 2) (src/Aggregators/Aggregator.Api/Models/Campaign/CampaignModel.cs)
  • Duplicated block (12 lines × 2) (src/Services/Notification/Notification.Hub/Extensions/ServiceCollectionExtensions.cs)
  • …and 112 more

API surface

  • Unchanged — 51 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

MesutAtasoy/Joker 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 feb168f7a99fbd3ac3f177ebfa472513934e2ecc — 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.