Skip to content
CAI
Software that uses CAICheck a score

kamilbaczek/Modular-monolith-by-example

46.5

Weak · 21 September 2026

13.6k

lines of production code

C#

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a modular .NET estimation tool that manages the full lifecycle of client inquiries, valuations, and payments. It coordinates business logic across distinct domains including user authentication, service catalogs, and automated priority calculations. The architecture leverages Azure infrastructure for deployment, with a microservices-style internal structure using MediatR for command/query handling and SignalR for real-time notifications.

How it got here

2021 — Modular monolith and domain implementation

117 changes.

The project underwent a major architectural shift to a modular monolith structure, introducing distinct modules for Valuations, Inquiries, Payments, and Users. This period saw the implementation of core business logic, including user authentication, email notifications, and payment processing, while removing legacy components like the Carts module.

2022 — Multi-module feature expansion and infrastructure

60 changes.

The project expanded its modular architecture by introducing new capabilities for push notifications, SMS, and priority management, all gated by feature flags. Concurrently, the team established a robust infrastructure layer using Pulumi for Azure resources and implemented comprehensive health checks and event publishing across the codebase.

2023 — test coverage expansion

4 changes.

This period focused on significantly expanding test coverage across the Valuations and Priorities modules. The work involved implementing architectural tests to enforce coding standards and layering rules, as well as adding acceptance and integration tests to verify business workflows and data persistence.

Features

Add Azure App Configuration store and keys for deployment

The deployment infrastructure now provisions an Azure App Configuration store (Standard SKU) with system-assigned identity and a Data Owner role assignment. The \AppConfigurationCreator\ creates configuration keys and feature flags defined in \AppConfigurationKeys\, which includes logging levels, token settings, admin credentials, mail server details, and module feature flags.

Deployment/Infrastructure/Resources/AppConfiguration · high confidence

Add C4 architecture diagrams for the Estimation Tool

Added new C4 container and system context PlantUML diagrams and their generated SVG renderings for the Estimation Tool. The container diagram details the internal architecture, including an Angular/JS Single-Page App, a .NET 6 WebAPI, and integrations with Azure services such as Service Bus, Key Vault, Application Insights, and various databases (MongoDB, MySQL, PostgreSQL). The system context diagram maps external interactions with Twilio, SendGrid, Trello, and Stripe.

Documentation/C4 · high confidence

Add ContainerApp infrastructure resource for the Estimation Tool

A new C\# class, ContainerAppCreator.cs, has been added to the infrastructure layer. This file defines the Pulumi-based provisioning logic for the application's containerized environment, including the creation of a managed environment, Azure Container Registry, and the Container App itself with associated secrets and identity assignments.

Deployment/Infrastructure/Resources/ContainerApp · high confidence

Add InquiryMadeEvent integration event

A new integration event, InquiryMadeEvent, has been added to the Inquiries module. This event, which carries an InquiryId, is defined in the IntegrationsEvents module and includes the necessary global usings for the DDD building blocks.

Src/Modules/Inquiries/Divstack.Company.Estimation.Tool.Inquiries.IntegrationsEvents · high confidence

Add MySQL health check for the Users module

The Users persistence module now registers a MySQL database health check. This allows the application to verify connectivity to the 'Users Database' by checking the 'Users' and 'Database' endpoints, enabling external monitoring systems to detect database availability issues.

Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Persistance/HealthChecks · high confidence

Add Priorities API endpoints

The Priorities module now exposes a new API endpoint for retrieving a list of priorities. This includes a GET endpoint at the /Priorities route, which is secured with JWT Bearer authentication and returns a list of priorities.

Src/Modules/Priorities/Divstack.Company.Estimation.Tool.Priorities.Api/Priorities · high confidence

Add Pulumi infrastructure definitions for staging environment

New C\# files introduce Pulumi-based infrastructure provisioning for the staging environment. This includes an environment configuration class defining the 'Staging' environment, a resource group creator that provisions an Azure Resource Group with Reader role assignments, an Application Insights creator for web application monitoring, and a Service Bus namespace creator that provisions a Standard-tier namespace with a Topic and Subscription. These changes enable automated deployment of core Azure resources for the staging environment.

(repo-wide) · high confidence

Add SMS notifications for valuation proposals

A new SMS notification system has been introduced for valuation proposals. The implementation includes a notification handler that sends SMS messages containing links to accept or reject a proposal, along with configuration classes to manage the URLs for these actions. The module also registers the necessary services and provides a configuration file for the proposal links.

Src/Modules/Sms/Divstack.Company.Estimation.Tool.Sms.Valuations · high confidence

Add Trello integration module

The Valuations module now includes a new Trello integration, enabling automatic task creation in Trello for valuation requests. This is controlled by a feature flag (TrelloModule) and registers the necessary services and authentication extensions.

Src/Modules/Valuations/Divstack.Company.Estimation.Tool.Valuations.Infrastructure.Trello · high confidence

Add Valuations persistence health check

The Valuations module now registers a PostgreSQL-based health check for the 'Valuations' and 'Database' tags, allowing users to verify the connectivity and status of the Valuations database as part of the application's health monitoring.

Src/Modules/Valuations/Divstack.Company.Estimation.Tool.Valuations.Persistance/HealthChecks · high confidence

Add email notifications for payment events

A new module has been introduced to handle email notifications for payment-related events. The \EmailPaymentsModule\ registers MediatR handlers and services for payment initialization and completion events, utilizing templates located at \PaymentInitialized/Templates/\. Configuration for email subjects, URLs, and template paths is provided in the new \emails-payments-appsettings.json\ file.

Src/Modules/Emails/Divstack.Company.Estimation.Tool.Emails.Payments · high confidence

Add email templates and configuration for valuation proposal notifications

The Valuations module now includes HTML email templates for notifying users about valuation proposal status. Specifically, it adds templates for when a proposal is approved and when a proposal is suggested, along with the corresponding configuration in emails-valuations-appsettings.json and the module registration in ValuationsModule.cs.

Src/Modules/Emails/Divstack.Company.Estimation.Tool.Emails.Valuations · high confidence

Add event publishing and mapping for payment domain events

The Payments module now includes infrastructure for publishing integration events. A new EventsModule registers an IntegrationEventPublisher and an EventMapper, which map internal domain events (such as PaymentInitialized and PaymentCompleted) to external integration events. The publisher uses NServiceBus's IMessageSession to send these mapped events, with topic configuration managed via the application's IConfiguration.

Src/Modules/Payments/Divstack.Company.Estimation.Tool.Payments.Infrastructure/Events · high confidence

Add event publishing via NServiceBus

A new \IntegrationEventPublisher\ class has been introduced to handle the publishing of domain events as integration events. This implementation maps domain events to integration events and publishes them using the NServiceBus \IMessageSession\, enabling external systems to react to valuation-related events.

Src/Modules/Valuations/Divstack.Company.Estimation.Tool.Valuations.Infrastructure/Events/Publish · high confidence

Add event-sourced query handlers for valuations and proposals

Implemented new query handlers for retrieving all valuations and specific valuation proposals using Marten's event-sourcing aggregation. The GetAllValuationsQueryHandler and GetValuationProposalsByIdQueryHandler now read from projected read models (ValuationListItemDto, ValuationProposalEntryDto) that are automatically updated by the ValuationListItemAggregation and ProposalsAggregation classes. This allows users to view valuation lists and proposal details based on the latest state derived from domain events.

Src/Modules/Valuations/Divstack.Company.Estimation.Tool.Valuations.Persistance/Domain/Valuations/Queries/Handlers/GetProposals · high confidence

Add payment completion and initialization email templates and configuration

The system now supports email notifications for payment events. This change introduces the configuration interface and implementation for the payment completion email, along with the HTML templates for both 'payment completed' and 'payment initialized' notifications. Users will now receive email alerts when a payment is initiated or successfully completed, with the templates providing the visual structure and content for these messages.

Src/Modules/Emails/Divstack.Company.Estimation.Tool.Emails.Payments/PaymentCompleted/Configuration, Src/Modules/Emails/Divstack.Company.Estimation.Tool.Emails.Payments/PaymentCompleted/Templates · high confidence

Add query to retrieve client details for an inquiry

Users can now retrieve client information associated with a specific inquiry. This change introduces a new query and handler that fetch client details (first name, last name, email, phone number, and company size) from the database for a given inquiry ID.

Src/Modules/Inquiries/Divstack.Company.Estimation.Tool.Inquiries.Application/Inquiries/Queries/GetClient · high confidence

Add user validation rules for username and password formats

A new extension class, UserValidatorExtension, was added to provide validation rules for username and password formats. The username validator enforces an alphanumeric format (including underscores and hyphens) with a length of 3 to 16 characters. The password validator ensures the password matches a specific regex pattern requiring at least one lowercase letter, one uppercase letter, one digit, and allows special characters, with a length of 8 to 25 characters.

Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Application/Common · high confidence

Add valuation history retrieval via event sourcing

Users can now view the complete history of a valuation, including all state changes and their timestamps. This is implemented by introducing an event-sourced aggregation (HistoryAggregation) that maps domain events (ValuationCompleted, ProposalSuggested, ProposalApproved, ValuationRequested) to a ValuationHistoryDto, which is then queried by the new GetValuationHistoryByIdQueryHandler.

Src/Modules/Valuations/Divstack.Company.Estimation.Tool.Valuations.Persistance/Domain/Valuations/Queries/Handlers/GetHistory · high confidence

Added Key Vault infrastructure for secure secret management

The deployment infrastructure now includes a new Key Vault resource that securely stores and manages sensitive configuration data. This includes creating a Key Vault instance with specific access policies for the current principal, a configuration store, and a container app. The system also introduces a set of predefined secrets (such as database connection strings, API keys, and integration tokens) that are stored in the Key Vault and linked to the application's configuration store, ensuring secrets are not hardcoded or exposed in plain text.

Deployment/Infrastructure/Resources/KeyVault · high confidence

Added MediatR integration for command and query handlers

The Payments module now registers MediatR to handle commands and queries across the application and persistence layers, enabling a unified request/response pipeline for payment operations.

Src/Modules/Payments/Divstack.Company.Estimation.Tool.Payments.Infrastructure/Mediation · high confidence

Added MongoDB health check for the Priorities module

The Priorities module now includes a dedicated health check for its MongoDB database connection. This registers a 'Priorities' tagged 'Database' health check, allowing the system to monitor the availability and status of the Priorities database as part of the application's overall health monitoring.

Src/Modules/Priorities/Divstack.Company.Estimation.Tool.Priorities.Persistance/HealthChecks · high confidence

Added MongoDB health check for the Services and Database components

A new HealthChecksModule was introduced to register health checks for the Services and Database components against a MongoDB instance. This allows the application to monitor the availability and status of these specific data access components.

Src/Modules/Services/Divstack.Company.Estimation.Tool.Services.DataAccess/HealthChecks · high confidence

Added MongoDB persistence configuration for the Priorities module

New files were added to configure how the Priorities module maps its domain models to MongoDB. This includes a helper extension to serialize Guid IDs as strings, and a configuration class that registers BsonClassMaps for Priority, PriorityId, Deadline, ClientLoseRisk, and PriorityLevel, ensuring correct field names and required constraints for persistence.

Src/Modules/Priorities/Divstack.Company.Estimation.Tool.Priorities.Persistance/Domain/Priorities/Configurations · medium confidence

Added MongoDB persistence layer for Priorities module

The Priorities module now includes a new persistence infrastructure that connects to a MongoDB database. This adds a new DataAccessModule for dependency injection, an IPrioritiesContext interface, a PrioritiesContext implementation that targets the 'EstimationTool' database and 'Priorities' collection, and a PersistanceConfiguration to wire up the MongoDB client and repositories.

Src/Modules/Priorities/Divstack.Company.Estimation.Tool.Priorities.Persistance/DataAccess · high confidence

Added MongoDB persistence layer for payments

The payments module now persists data to a MongoDB database named 'EstimationTool' in a collection called 'Payments'. This includes a new repository pattern implementation for saving and retrieving payment records, along with the necessary dependency injection registrations and health check configurations for the MongoDB connection.

Src/Modules/Payments/Divstack.Company.Estimation.Tool.Payments.Persistance · high confidence

Added Priorities module for deadline reminders

The application now includes a new Priorities module that registers scoped services for reminder configurations and reminder classes via dependency injection. This module is configured to scan for types ending in 'Configuration' and 'Reminder' from the assembly, enabling the system to manage priority-based deadline reminders with a default of 2 days before the deadline.

Src/Modules/Reminders/Divstack.Company.Estimation.Tool.Reminders.Priorities · high confidence

Added Priorities repository for MongoDB persistence

The Priorities module now includes a new PrioritiesRepository class that implements IPrioritiesRepository, providing methods to retrieve priorities by ID or valuation ID, and to add or update priorities in MongoDB. The repository is registered in the application's dependency injection container via the RepositoriesModule, which scans for classes ending in 'Repository' and registers them as transient services.

Src/Modules/Priorities/Divstack.Company.Estimation.Tool.Priorities.Persistance/Domain/Priorities/Repositories · high confidence

Added PriorityDefined integration event

A new integration event, PriorityDefined, has been introduced to the system. This event carries the ValuationId, PriorityId, and DeadlineDate, enabling external systems to react to priority definitions.

Src/Modules/Priorities/Divstack.Company.Estimation.Tool.Priorities.IntegrationsEvents · high confidence

Added SMS client interface and implementation

Introduced the ISmsClient interface and SmsClient implementation in the SMS module to handle sending SMS messages via Twilio. The SmsClient uses IPhoneNumbersConfiguration to determine the sender and accepts a recipient and message body. A new SendSmsFailedException was added to wrap Twilio-related failures, replacing the previous ICommand interface file which was removed.

Src/Modules/Sms/Divstack.Company.Estimation.Tool.Sms.Core/Clients · high confidence

Added Valuations API endpoints for proposal lifecycle and data retrieval

The Valuations API now exposes new HTTP endpoints to manage the full lifecycle of proposals and retrieve valuation data. Users can now approve, cancel, reject, or complete proposals via dedicated PATCH endpoints, and submit new suggestions via a POST endpoint. Additionally, the API provides GET endpoints to retrieve a single valuation, a list of all valuations, and the history of a specific valuation, all secured with JWT authentication where appropriate.

Src/Modules/Valuations/Divstack.Company.Estimation.Tool.Valuations.Api/Endpoints · high confidence

Added ValuationsHub for real-time valuation updates

A new SignalR hub, ValuationsHub, has been introduced to handle real-time communication for valuation-related events. The hub is configured with JWT Bearer authentication and is accessible at the '/hubs/valuations' endpoint, enabling clients to subscribe to live valuation updates.

Src/Modules/Push/Divstack.Company.Estimation.Tool.Push.Valuations/Hubs · high confidence

Added application module and global usings for the Priorities feature

The Priorities application module was introduced, registering the module's services and exposing internal members to the infrastructure layer. Global usings were added to import external event types and NServiceBus, enabling the module to process external events.

Src/Modules/Priorities/Divstack.Company.Estimation.Tool.Priorities.Application · medium confidence

Added automated email reminders for valuations nearing their deadline

The system now sends priority emails to employees when a valuation is close to its deadline. This new capability includes the email template, the sender implementation, and the event handler that triggers the notification, ensuring stakeholders are alerted about upcoming valuation closures.

Src/Modules/Emails/Divstack.Company.Estimation.Tool.Emails.Priorities · high confidence

Added automatic seeding of default service and category data

The application now includes a background hosted service that automatically creates a default 'Internet' category and a 'Cisco Router Fix' service if the database is empty. This ensures that initial data is present without manual intervention, simplifying the initial setup and first-run experience for new installations.

Src/Modules/Services/Divstack.Company.Estimation.Tool.Services.DataAccess/Seeder · high confidence

Added capability to submit new inquiries with service and attribute details

Users can now submit new inquiries through the application layer, providing their contact information and specifying the services they are interested in. This change introduces the command, handler, and validation logic for creating inquiries, including the ability to associate multiple services with each inquiry, each potentially having specific attributes.

Src/Modules/Inquiries/Divstack.Company.Estimation.Tool.Inquiries.Application/Inquiries/Commands · high confidence

Added commands and queries for managing and retrieving priority states

Users can now archive, define, and redefine priorities, as well as retrieve them by valuation IDs. The application layer introduces commands (Archive, Redefine) and their handlers to update priority states, alongside a query to fetch a list of priorities with their current level and archived status.

Src/Modules/Priorities/Divstack.Company.Estimation.Tool.Priorities.Application/Priorities · high confidence

Added credit card payment processing capability

Users can now process payments using credit card details. This change introduces a new command and handler for the 'Pay' operation, which validates and processes a payment by accepting a payment ID and optional credit card information (card number, expiration year and month, and CVC). The implementation includes a new DTO for credit card data, a command object, a validator to ensure all required fields are present, and a handler that interacts with a payment processor and publishes integration events upon successful payment.

Src/Modules/Payments/Divstack.Company.Estimation.Tool.Payments.Application/Payments/Commands/Pay · high confidence

Added deadline-close reminder scheduling for priorities

The system now schedules background jobs to send reminders when a priority is approaching its deadline. A new scheduler listens for 'PriorityDefined' events to schedule a reminder, while another scheduler listens for 'ProposalSuggested' and 'ProposalCancelled' events to cancel any pending reminders if the proposal state changes. This ensures users are notified about upcoming deadline closures for their priorities.

Src/Modules/Reminders/Divstack.Company.Estimation.Tool.Reminders.Priorities/DeadlineClose · high confidence

Added email sender for approved valuation proposals

A new internal interface (IValuationProposalApprovedMailSender) and its implementation (ValuationProposalApprovedMailSender) have been added to handle sending emails for approved valuation proposals. The sender uses a template to populate placeholders such as the approved link, price value, currency, and client email, then dispatches the email to the suggested employee.

Src/Modules/Emails/Divstack.Company.Estimation.Tool.Emails.Valuations/Proposals/Approved/Sender · high confidence

Added endpoints to manage notification read status

Users can now retrieve their unread notifications and mark them as read. This change introduces new API endpoints to fetch all unread notifications and to mark individual or all notifications as read, providing users with better control over their notification history.

Src/Modules/Divstack.Company.Estimation.Tool.Push.Api/Notifications · high confidence

Added event mapping for valuation lifecycle changes

The Valuations module now translates internal domain events (such as ProposalApproved, ProposalCancelled, ProposalRejected, ProposalSuggested, ValuationRequested, and ValuationCompleted) into corresponding integration events. This new EventMapper ensures that key valuation status changes are properly published to external systems.

Src/Modules/Valuations/Divstack.Company.Estimation.Tool.Valuations.Infrastructure/Events/Publish/Mapper · high confidence

Added event publishing and mapping infrastructure for valuations

The valuations module now registers the IEventMapper and IIntegrationEventPublisher services, enabling the system to map domain events to integration events and publish them. This change introduces the necessary wiring for event-driven communication within the valuations module.

Src/Modules/Valuations/Divstack.Company.Estimation.Tool.Valuations.Infrastructure/Events · high confidence

Added event publishing infrastructure for the Priorities module

The Priorities module now includes the infrastructure to publish domain events as integration events. A new event publishing pipeline has been added, featuring an \IntegrationEventPublisher\ that converts internal domain events into external integration events using a new \EventMapper\. This mapper specifically handles the \PriorityDefined\ domain event, translating it into a corresponding integration event for external consumption.

Src/Modules/Priorities/Divstack.Company.Estimation.Tool.Priorities.Infrastructure/Events · high confidence

Added global usings for persistence layer

A new GlobalUsings.cs file was added to the persistence common module, introducing global using directives for System.Runtime.CompilerServices and the project's DataAccess namespace. This change simplifies namespace references across the persistence layer.

Src/Modules/Valuations/Divstack.Company.Estimation.Tool.Valuations.Persistance/Common · high confidence

Added integration events for proposal and valuation lifecycle

New integration events have been introduced to track the full lifecycle of proposals and valuations. Specifically, the system now emits events for proposal states (Suggested, Approved, Cancelled, Rejected) and valuation states (Requested, Completed). These events, implementing the IIntegrationEvent interface, allow external systems to react to key business milestones such as a valuation being requested or a proposal being finalized.

Src/Modules/Valuations/Divstack.Company.Estimation.Tool.Valuations.IntegrationsEvents · high confidence

Added notification persistence and data access layer

The application now includes a new data access module for managing notifications, introducing a MongoDB-based persistence layer. This adds a \Notification\ entity and a dedicated \NotificationsContext\ to interact with the 'EstimationTool' database's 'Notifications' collection. The change provides read and write repositories to handle notification storage, retrieval, and updates, supporting features such as marking notifications as read and querying for unread items.

Src/Modules/Push/Divstack.Company.Estimation.Tool.Push.DataAccess · high confidence

Added payment completion email notification

The system now sends an email notification when a payment is completed. This is implemented via a new \PaymentCompletedSender\ class that reads an HTML template, replaces a payment ID placeholder, and sends the email to the client using the configured mail template and sender.

Src/Modules/Emails/Divstack.Company.Estimation.Tool.Emails.Payments/PaymentCompleted/Sender · high confidence

Added payment initialization email sender

Introduced a new internal interface IPaymentInitializedSender and its implementation PaymentInitializedSender, which constructs and sends an HTML email upon payment initialization. The sender uses a configurable template to replace placeholders (InquiryId, PaymentId, AmountToPay, ClientFullName, PaymentLink) and dispatches the email via IEmailSender.

Src/Modules/Emails/Divstack.Company.Estimation.Tool.Emails.Payments/PaymentInitialized/Sender · high confidence

Added payment initialization email template and inquiry infrastructure usings

Introduced a new HTML email template for payment initialization notifications, featuring a structured layout with client greeting, inquiry ID, and payment details. Additionally, added global using directives for the Inquiries infrastructure module to streamline access to common types and dependency injection services.

Src/Modules/Emails/Divstack.Company.Estimation.Tool.Emails.Payments/PaymentInitialized/Templates, Src/Modules/Inquiries/Divstack.Company.Estimation.Tool.Inquiries.Infrastructure/Common · high confidence

Added payment integration events

The Payments module now exposes two new integration events, PaymentInitialized and PaymentCompleted, to signal external payment state changes. PaymentInitialized carries payment, valuation, and inquiry identifiers along with amount details, while PaymentCompleted signals the finalization of a payment with its ID and inquiry reference.

Src/Modules/Payments/Divstack.Company.Estimation.Tool.Payments.IntegrationsEvents · high confidence

Added persistence configuration and repository for user identity and security entities

The system now includes Entity Framework Core configuration classes for user-related entities, including ApplicationRole, IdentityRoleClaims, IdentityToken, RefreshToken, and UserAccount. These configurations define database mappings, such as string length limits and primary keys. Additionally, a UserRepository class has been added to handle the creation of new user accounts in the database.

Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Persistance/Domain · high confidence

Added queries to retrieve individual and all inquiries

Introduced new application-layer queries for retrieving inquiry data. The 'Get' query fetches detailed information for a single inquiry, including client details (ID, first name, last name, email) and associated services. The 'GetAll' query retrieves a list of all inquiries, each containing the ID, first name, and last name. These changes add the necessary DTOs, view models, query handlers, and validators to support these new read operations.

Src/Modules/Inquiries/Divstack.Company.Estimation.Tool.Inquiries.Application/Inquiries/Queries/Get · high confidence

Added query handler for retrieving priorities

A new GetPrioritiesQueryHandler has been introduced in the persistence layer to fetch a list of priorities. This handler queries the MongoDB database for active priorities, sorts them by level, and returns a structured view model containing priority data.

Src/Modules/Priorities/Divstack.Company.Estimation.Tool.Priorities.Persistance/Domain/Priorities/Queries · high confidence

Added repository implementations for Categories and Services

New repository classes (CategoriesRepository and ServicesRepository) have been added to the data access layer, implementing interfaces for managing Category and Service entities. These repositories provide methods for adding, deleting, and retrieving records from the MongoDB database, including batch retrieval with sorting and limiting for services.

Src/Modules/Services/Divstack.Company.Estimation.Tool.Services.DataAccess/Repositories · high confidence

Added service existence checking and Trello configuration support

Introduced a new IServiceExistingChecker interface and its implementation to verify if services exist by ID or collection of IDs. Additionally, added Trello integration configuration classes (ITrelloConfiguration and TrelloConfiguration) to manage board ID, app key, and user token settings for the Valuations module.

Src/Modules/Services/Divstack.Company.Estimation.Tool.Services.Core/Services/Contracts, Src/Modules/Valuations/Divstack.Company.Estimation.Tool.Valuations.Infrastructure.Trello/Configuration · high confidence

Added service management capabilities

Users can now create, update, delete, and manage attributes and possible values for services. The new \IServicesService\ interface and \ServicesService\ implementation provide methods for batch retrieval, full listing, creation, updates, and deletion of services, as well as adding/removing attributes and their possible values.

Src/Modules/Services/Divstack.Company.Estimation.Tool.Services.Core/Services/Services · high confidence

Added service request and DTO models for service management

Introduced new Data Transfer Objects and request models to support service operations. Added CreateServiceRequest and UpdateServiceRequest records to handle incoming service creation and update payloads, and a ServiceDto record with a mapping method to convert domain Service entities into a structured format including category details.

Src/Modules/Services/Divstack.Company.Estimation.Tool.Services.Core/Services/Dtos · high confidence

Adds shared infrastructure for background processing, event bus, and DDD building blocks

The \Src/Shared\ area introduces a suite of shared infrastructure components. This includes a background job scheduling system (using Hangfire and MongoDB) with health checks, an event bus implementation using NServiceBus with RabbitMQ and Azure Service Bus transports, and core DDD building blocks such as \IAggregateRoot\, \IIntegrationEvent\, and value objects like \Email\ and \Money\. Additionally, the update adds feature flag management, Azure App Configuration integration, and a centralized error handling middleware.

Src/Shared · high confidence

Adds string replacement utility and global usings to the payments email module

A new StringExtensions class is introduced to provide case-insensitive string replacement methods, allowing text templates to be updated with payment-related values without worrying about case sensitivity. Additionally, global usings are added to simplify imports for System, System.Runtime.CompilerServices, and Ardalis.GuardClauses within the module.

Src/Modules/Emails/Divstack.Company.Estimation.Tool.Emails.Payments/Common · high confidence

Application bootstrapper and configuration structure established

The application's entry point and startup configuration have been introduced, centralizing the host builder, service registration, and middleware pipeline. This includes the Program class for application initialization, the Startup class for dependency injection and request pipeline setup, and an appsettings.json file that defines default logging levels and feature management flags for modules such as Services, Valuations, Inquiries, Users, Reminders, and Emails.

Src/Bootstrapper/Divstack.Company.Estimation.Tool.Bootstrapper · high confidence

Automated background process for redefining priorities

The Priorities module now includes a background scheduler that automatically redefines priorities on a recurring basis. This is implemented via a new \RedefinePrioritiesScheduler\ hosted service that triggers the \PrioritiesRedefiner\ domain service, which iterates through all priorities and executes the redefinition logic. Configuration for deadline-related settings is also introduced, allowing the system to determine working days to deadline from the current date.

Src/Modules/Priorities/Divstack.Company.Estimation.Tool.Priorities.Infrastructure/Domain · high confidence

Automated payment initialization upon valuation completion

A new event handler has been introduced to automatically initialize a payment when a valuation is completed. This handler listens for the 'ValuationCompleted' integration event, extracts the relevant valuation and inquiry identifiers, and triggers the payment initialization process via the payment processor. The resulting payment is then persisted and its domain events are published, ensuring the payment workflow is triggered without manual intervention.

Src/Modules/Payments/Divstack.Company.Estimation.Tool.Payments.Application/Payments/Commands/Initalize · high confidence

Centralized configuration loading and environment detection

Added a new ConfigurationLoader utility that automatically discovers and loads all JSON configuration files matching the pattern \*-{environment}.json from the application's base directory, allowing the application to dynamically load environment-specific settings. Additionally, an EnvironmentExtensions helper was introduced to detect whether the application is running in a development-oriented environment (Local, Dev, or Stage).

Src/Bootstrapper/Divstack.Company.Estimation.Tool.Bootstrapper/Common · high confidence

Email notifications for completed payments

A new event handler has been added to process the PaymentCompleted domain event. When a payment is marked as completed, the system now automatically triggers an email notification to the client associated with that payment. This ensures customers receive timely updates about their payment status.

Src/Modules/Emails/Divstack.Company.Estimation.Tool.Emails.Payments/PaymentCompleted · high confidence

Email notifications for initialized payments

A new event handler has been introduced to process the PaymentInitialized domain event. When a payment is initialized, the system now automatically sends an email notification to the client. This is achieved by fetching the client's details (name and email) via the Inquiries module and passing them to a dedicated sender for email dispatch.

Src/Modules/Emails/Divstack.Company.Estimation.Tool.Emails.Payments/PaymentInitialized · high confidence

Email notifications for valuation proposal lifecycle events

Users will now receive email notifications when a valuation proposal is suggested or approved. The system introduces two new event handlers that listen for domain events and trigger corresponding emails: one for the 'suggested' state, which retrieves client details from the inquiries module, and another for the 'approved' state, which fetches the employee's email from the users module to send the notification.

Src/Modules/Emails/Divstack.Company.Estimation.Tool.Emails.Valuations/Proposals/Approved · high confidence

Establishes .NET 7 build configuration and development environment

The project now targets .NET 7, as defined in Directory.Build.props and global.json. A new Dockerfile and docker-compose.local.yml are introduced to support containerized local development, providing services for MongoDB, MySQL, PostgreSQL, and RabbitMQ. The solution structure is reorganized into a modular monolith with distinct modules for Valuations, Inquiries, Payments, and Users, each containing their own API, Application, Domain, and Infrastructure layers. Additionally, a .editorconfig file is added to enforce consistent code formatting and C\# coding conventions across the codebase.

(repo-wide) · high confidence

Initial Pulumi infrastructure code for the Estimation Tool

The project now includes the core Pulumi infrastructure code to deploy Azure resources, including resource groups, App Configuration, App Insights, Container Apps, Key Vaults, and Service Buses. This establishes the foundational cloud environment for the application.

Deployment/Infrastructure · high confidence

Initial setup of the Valuations API module

The Valuations API module is introduced with a new module registration in ValuationModule.cs, which wires up the CurrentUserService for user context and adds infrastructure and feature flag support. A feature flag (FeatureFlags.cs) gates the module's activation, and the module can be conditionally enabled or disabled via the FeatureManagement configuration. Configuration for integrations (e.g., Trello), database connections, and feature flags is provided in valuations-appsettings.json. A Valuations.http file is added to support local development and testing of valuation-related endpoints, including creating inquiries, retrieving valuations, and managing proposals.

Src/Modules/Inquiries/Divstack.Company.Estimation.Tool.Inquiries.Api, Src/Modules/Valuations/Divstack.Company.Estimation.Tool.Valuations.Api · high confidence

Initialize Push.Api module with DI registration

The Push.Api module is initialized with a new global using directive for System.Diagnostics.CodeAnalysis and a PushApiModule class that registers ICurrentUserService as a scoped service via dependency injection.

Src/Modules/Divstack.Company.Estimation.Tool.Push.Api · medium confidence

Initializes the Payments application module with internal visibility

The Payments module's application layer now includes an ApplicationModule class that registers services and exposes internal members to the Payments infrastructure assembly, enabling the module to function as a cohesive unit within the estimation tool.

Src/Modules/Payments/Divstack.Company.Estimation.Tool.Payments.Application · high confidence

Inquiries event publishing infrastructure added

The Inquiries module now includes a new event publishing infrastructure. This adds an \EventsModule\ that registers an \IInquiriesTopicConfiguration\ for topic naming, an \IntegrationEventPublisher\ that uses NServiceBus to send messages, and an \EventMapper\ that converts internal domain events (like \InquiryMadeDomainEvent\) into external integration events for publishing.

Src/Modules/Inquiries/Divstack.Company.Estimation.Tool.Inquiries.Infrastructure/Events · high confidence

Integrates MediatR for command and query handling in the Priorities module

The Priorities module now registers MediatR and FluentValidation for processing commands and queries. The MediationModule configures the dependency injection container to scan the Application and Persistance assemblies, enabling the module to handle CQ (Command/Query) patterns and validation across those layers.

Src/Modules/Priorities/Divstack.Company.Estimation.Tool.Priorities.Infrastructure/Mediation · high confidence

Introduce Priorities module with feature flag gating

The Priorities module is now available as a feature that can be enabled or disabled via the FeatureManagement configuration. When enabled, the module registers its services and infrastructure, allowing users to access priority-related functionality. The module includes configuration for deadline calculations and a MongoDB connection string, with the ability to toggle the entire module on or off through feature flags.

Src/Modules/Priorities/Divstack.Company.Estimation.Tool.Priorities.Api · high confidence

Introduce Stripe payment processor integration

The application now registers and configures the Stripe payment processor. This adds the necessary service registrations and middleware to enable Stripe-based payment processing within the payments module.

Src/Modules/Payments/Divstack.Company.Estimation.Tool.Payments.Infrastructure/PaymentProcessors · high confidence

Introduce configuration model for email sender settings

Added new internal configuration classes, IMailConfiguration and MailConfiguration, to the email sender module. These classes define the structure for retrieving email-related settings, specifically the 'MailFrom' address and an 'ApiKey', from the application's configuration source under the 'Mail' section.

Src/Modules/Emails/Divstack.Company.Estimation.Tool.Emails.Core/Sender/Configuration · high confidence

Introduce core SMS module with feature flag and configuration

The SMS module is now initialized via a dedicated core assembly that registers the SMS client, Twilio client, and phone number configuration, all gated by a new 'SmsModule' feature flag. Users can enable or disable the SMS functionality through the FeatureManagement settings, and the module's configuration (including Twilio credentials and default phone numbers) is managed via the new sms-core-appsettings.json file.

Src/Modules/Sms/Divstack.Company.Estimation.Tool.Sms.Core · high confidence

Introduce current user service and API routing configuration

Added a new CurrentUserService that extracts the public user ID from the HTTP context, along with its ICurrentUserService interface, to support identity-aware operations. Additionally, a global usings file was added to standardize imports for ASP.NET Core, JWT authentication, and Swagger annotations, and a Routing class was introduced to define the base URL for the push module endpoints.

Src/Modules/Divstack.Company.Estimation.Tool.Push.Api/Common · high confidence

Introduce domain models for user management and authentication

Added new domain classes to the Users module, including Customer and Employee entities, along with supporting types for authentication and security. The update introduces ApplicationRole with a description field, a FailedLoginAttempt model to track login failures, a PasswordHistory model to archive previous passwords, and a RefreshToken model for session management. Additionally, an IDateTimeProvider interface and an IPasswordComparer interface were added to support date and password validation logic, while the UserAccount class was refactored to integrate these new components.

Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Domain · high confidence

Introduce email configuration interfaces and a synchronous async execution utility

The email module now defines an ISuggestValuationMailConfiguration interface and its backing implementation to manage subject lines, template paths, and proposal link URLs. A new AsyncUtil class provides synchronous wrappers for async methods, allowing callers to execute asynchronous tasks without using async/await. Additionally, the valuations module registers MediatR and FluentValidation for command and query handling.

Src/Modules/Emails/Divstack.Company.Estimation.Tool.Emails.Valuations/Proposals/Suggested/Configuration, Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Infrastructure/Utils, Src/Modules/Valuations/Divstack.Company.Estimation.Tool.Valuations.Infrastructure/Mediation · medium confidence

Introduce email sending capability via SendGrid

Added the EmailSender class which implements the IEmailSender interface to send emails using the SendGrid API. The implementation queues messages via an IBackgroundProcessQueue to handle sending asynchronously, utilizing IMailConfiguration for API keys and sender details.

Src/Modules/Emails/Divstack.Company.Estimation.Tool.Emails.Core/Sender · high confidence

Introduce event-sourced repository for valuations

The Valuations module now uses an event-sourced persistence pattern. A new ValuationsRepository implements IValuationsRepository, leveraging a document store to aggregate streams for reads and append domain events for writes. The repository is registered via a new RepositoriesModule that scans for classes ending in 'Repository' and registers them as transient services.

Src/Modules/Valuations/Divstack.Company.Estimation.Tool.Valuations.Persistance/Domain/Valuations/Repositories · high confidence

Introduce modular email service with feature flag support

The email module is now a distinct, bootstrapped component that registers email-related services (core, users, valuations, payments, and priorities) via dependency injection. It includes a feature flag configuration that allows the email functionality to be enabled or disabled at runtime, with default settings for SMTP server, port, and sender address.

Src/Modules/Emails/Divstack.Company.Estimation.Tool.Emails · high confidence

Introduce payments API controller for processing payments

The payments module now exposes an HTTP endpoint for processing payments. A new PaymentsController is added, inheriting from a shared BaseController that enforces JWT authentication and applies the route prefix 'api/payments-module/\[controller\]'. The controller exposes a POST endpoint that accepts a PayCommand and delegates execution to the IPaymentsModule, returning a 200 OK or 500 Internal Server Error.

Src/Modules/Payments/Divstack.Company.Estimation.Tool.Payments.Api/Controllers · high confidence

Introduce structured user management, authentication, and admin seeding infrastructure

The Users module now includes a comprehensive set of infrastructure components for identity management. This includes configuration classes for admin accounts and user settings, custom identity error handling, and specific exception types for user operations. A new user seeder has been added as a hosted service to automatically create an initial administrator account upon application startup. Additionally, the diff introduces dedicated services for password management, sign-in handling, and user repository operations, all wired up via a new DI module to support user creation, updates, role assignment, and password reset flows.

Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Infrastructure/Identity/Users · high confidence

Introduced Service domain model and repository interface

Added the core domain model for the Service entity, including the Service class with properties for name, description, category, and attributes, along with methods for creating, updating, and managing attributes. Also added the IServicesRepository interface defining asynchronous operations for adding, deleting, retrieving, and batching service records.

Src/Modules/Services/Divstack.Company.Estimation.Tool.Services.Core/Services · high confidence

Introduced email template reading and Trello task creation capabilities

The system now includes a new \IMailTemplateReader\ interface and \MailTemplateReader\ implementation that reads HTML email templates from the file system. Additionally, the Valuations module gains a new \ITrelloTaskCreator\ interface and \TrelloTaskCreator\ implementation, which allows the application to create tasks on a Trello board. A new \TrelloTodoListNotFound\ exception class has also been added to handle cases where a specified Trello list is not found.

Src/Modules/Emails/Divstack.Company.Estimation.Tool.Emails.Core/Sender/TemplateReader, Src/Modules/Valuations/Divstack.Company.Estimation.Tool.Valuations.Infrastructure.Trello/Core · high confidence

Introduces MediationModule for MediatR and FluentValidation setup

The Inquiries module now registers MediatR and FluentValidation for the application assembly, providing a centralized way to handle requests and validate inputs within the application layer.

Src/Modules/Inquiries/Divstack.Company.Estimation.Tool.Inquiries.Infrastructure/Mediation · high confidence

Introduces Snov integration for retrieving client company information

Adds a new infrastructure module for the Snov API, including the \ClientCompanyFinder\ service and \CompanyFinderHttpClient\ implementation. The client finder now queries the Snov API (currently with a mock implementation) to retrieve company details such as company name and size based on an email address. The module registers the necessary dependencies via \SnovModule\.

Src/Modules/Valuations/Divstack.Company.Estimation.Tool.Inquiries.Infrastructure.Snov · high confidence

Introduces Valuations application layer with CQRS commands and queries

The Valuations application module now includes a full set of CQRS commands and queries for managing the valuation lifecycle. Users can request a valuation, suggest or cancel proposals, and approve or complete valuations through new command handlers. Additionally, the application layer provides queries to retrieve valuation details, lists, history, and proposals, supported by corresponding validators and DTOs.

Src/Modules/Valuations/Divstack.Company.Estimation.Tool.Valuations.Application · high confidence

Introduces common application-layer contracts and interfaces for the Priorities module

The Priorities module now includes a set of shared application-layer abstractions: generic command and query interfaces (ICommand, IQuery) that integrate with the MediatR pipeline, an IPrioritiesModule interface that defines methods for executing commands and queries, an internal IMapper interface for DTO-to-entity mapping, and a GlobalUsings file that brings in common .NET and MediatR namespaces. These additions provide a consistent foundation for handling requests and responses within the module.

Src/Modules/Priorities/Divstack.Company.Estimation.Tool.Priorities.Application/Common · high confidence

Introduces configuration models for SMS and phone number settings

The application now supports structured configuration for SMS and phone number services. New classes (PhoneNumbersConfiguration, SmsConfiguration) and their corresponding interfaces (IPhoneNumbersConfiguration, ISmsConfiguration) have been added to the core module. These classes read from the application's configuration source, specifically the 'PhoneNumbers' and 'Twillo' sections, to provide strongly-typed access to phone number and SMS credentials (AccountSid, AuthToken, and From).

Src/Modules/Sms/Divstack.Company.Estimation.Tool.Sms.Core/Configurations · high confidence

Introduces core application-layer abstractions and utilities for the Inquiries module

The Inquiries application module now includes foundational infrastructure to support command/query execution, database interactions, and data mapping. New files define interfaces for executing commands and queries (ICommand, IQuery, IInquiriesModule), a database connection factory, an integration event publisher, and a generic mapper interface. Additionally, helper extensions for enumerables and SQL query execution are provided, along with global usings to streamline access to these components across the application layer.

Src/Modules/Inquiries/Divstack.Company.Estimation.Tool.Inquiries.Application/Common · high confidence

Introduces core application-layer abstractions for the Payments module

The Payments module now includes foundational interfaces for command and query execution, a global usings file for common dependencies like MediatR and Microsoft.Extensions.DependencyInjection, a NotFoundException for handling missing entities, and an integration event publisher interface. Additionally, the generic module interface previously defined for Carts has been renamed and adapted to IPaymentsModule, providing a consistent contract for executing commands and queries within the Payments context.

Src/Modules/Payments/Divstack.Company.Estimation.Tool.Payments.Application/Common · high confidence

Introduces domain model for automated priority calculation

The Priorities module now includes the core domain model for managing and calculating priority levels. This includes the \Priority\ entity, which calculates a priority level based on risk scores (e.g., deadline proximity, company size) and supports manual overrides. The system defines specific domain events (\PriorityDefinedDomainEvent\, \PriorityIncreasedDomainEvent\, etc.) to track state changes. Additionally, a \ClientLoseRisk\ record and \Deadline\ value object are introduced to support the scoring logic, while repository interfaces and ID types complete the domain layer.

Src/Modules/Priorities/Divstack.Company.Estimation.Tool.Priorities.Domain · high confidence

Introduces domain model for managing inquiries and services

The Inquiries domain module now includes the core domain entities and value objects required to create and manage service-based inquiries. This includes the Inquiry aggregate root, which validates that the inquiry contains at least one service and that all referenced services exist. The model also introduces the Client and ClientCompany value objects to store customer details, as well as the Service entity with its associated Attributes. Additionally, the module defines the InquiryMadeDomainEvent to signal when a new inquiry is successfully created.

Src/Modules/Inquiries/Divstack.Company.Estimation.Tool.Inquiries.Domain · high confidence

Introduces domain model for valuation lifecycle and proposal management

The Valuations domain module now includes a complete domain model for managing the valuation lifecycle and proposal workflows. This includes state definitions (ValuationRequested, ValuationNegotiation, ValuationApproved, ValuationCompleted) that track the progression of a valuation. The model introduces a Proposal entity with associated domain events (ProposalSuggested, ProposalApproved, ProposalRejected, ProposalCancelled) and specific exceptions (e.g., ProposalHasAlreadyDecisionException, ProposalNotFoundException) to enforce business rules. Additionally, it adds value objects for IDs (ValuationId, InquiryId, ProposalId, EmployeeId) and a repository interface (IValuationsRepository) to support the new domain logic.

Src/Modules/Valuations/Divstack.Company.Estimation.Tool.Valuations.Domain · high confidence

Introduces infrastructure module for user management

The Users module now includes an InfrastructureModule that registers core dependencies such as JWT token authorization, persistence, and user management services, alongside a UserModule that executes commands and queries via MediatR.

Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Infrastructure · high confidence

Introduces payment domain model and interfaces

The Payments domain now includes the core domain model for processing payments. This includes the Payment aggregate root with methods to initialize and complete payments, along with associated value objects like Card and PaymentSecret. The domain also defines payment status tracking and domain events (PaymentInitialized, PaymentCompleted) to signal state changes. Additionally, interfaces for payment processing (IPaymentProcessor) and persistence (IPaymentsRepository) are introduced to support the payment workflow.

Src/Modules/Payments/Divstack.Company.Estimation.Tool.Payments.Domain · high confidence

Introduces the Payments module with infrastructure and user access services

The Payments module is now bootstrapped via a new \PaymentsModule\ that registers the \ICurrentUserService\ and configures the application's infrastructure, including persistence, mediation, and payment processors. This includes a new \CurrentUserService\ that extracts the public user ID from the HTTP context, and an \InfrastructureModule\ that wires up the core application components. A \FeatureFlags\ class is also added to control the module's activation status.

Src/Modules/Payments/Divstack.Company.Estimation.Tool.Payments.Api · medium confidence

Introduces the persistence module for the Priorities feature

A new PersistanceModule class has been added to the Priorities module, registering data access and health check services. This change provides the foundational infrastructure for database interactions and health monitoring within the Priorities module.

Src/Modules/Priorities/Divstack.Company.Estimation.Tool.Priorities.Persistance · high confidence

New Inquiries API controller and updated base controller route

A new InquiriesController has been added to handle inquiry-related endpoints, exposing POST for creating inquiries and GET routes for retrieving single or all inquiries. The shared BaseController has been moved from the Carts module to the Inquiries module and updated to use the route template 'api/inquries-module/\[controller\]', reflecting the new module's API path.

Src/Modules/Inquiries/Divstack.Company.Estimation.Tool.Inquiries.Api/Controllers · high confidence

New Services API controllers for managing services, categories, attributes, and possible values

The API layer for the Services module has been restructured and expanded. The base controller was moved from the Products module to the Services module, updating its route template to 'api/services-module/\[controller\]'. New controllers have been added to expose endpoints for managing services (including batch retrieval, creation, and deletion), categories, attributes, and possible values. Existing category management endpoints were refactored to align with the new structure, and new endpoints were introduced for creating and removing attributes and their associated possible values.

Src/Modules/Services/Divstack.Company.Estimation.Tool.Services.Api/Controllers · high confidence

New user management commands and queries

The application layer now includes new command and query handlers for user management, including creating, deleting, and changing passwords for users, as well as retrieving user details, emails, and a list of all users. This adds the ability to manage user accounts and retrieve user information through the application layer.

Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Application/Users · high confidence

Priorities module infrastructure and execution layer

The Priorities module now includes its infrastructure layer, introducing a new \PrioritiesModule\ that acts as the central execution hub for commands and queries via MediatR. The \InfrastructureModule\ registers all necessary services, including persistence, application, mediation, background processes, events, deadlines, and domain services, and configures the application pipeline to use the persistence module.

Src/Modules/Priorities/Divstack.Company.Estimation.Tool.Priorities.Infrastructure · high confidence

Real-time push notifications for payments and valuations

The system now supports real-time push notifications for payment and valuation events. A new PaymentsHub and ValuationsHub have been added to enable SignalR-based live updates. A PaymentCompletedEventHandler listens for payment completion messages, creates notifications for all users, and broadcasts the event via SignalR. The modules register SignalR services and map their respective hub endpoints (/hubs/payments and /hubs/valuations).

Src/Modules/Push/Divstack.Company.Estimation.Tool.Push.Payments · high confidence

Real-time valuation notifications for approved proposals and new requests

The system now automatically generates and pushes notifications when a valuation proposal is approved or a new valuation request is submitted. For approved proposals, the handler creates a specific notification for the proposer and sends a targeted SignalR update to that user. For new requests, it broadcasts to all users via SignalR and creates individual notifications for every user in the system. These changes are implemented in the new \ProposalApprovedEventHandler\ and \ValuationRequestEventHandler\ classes within the Valuations module's notifications layer.

Src/Modules/Push/Divstack.Company.Estimation.Tool.Push.Valuations/Notifications · high confidence

Reminders module initialization and feature flag integration

The Reminders module now includes a feature flag configuration and a module registration class. The \FeatureFlags\ class defines a \Module\ flag for the Reminders module, allowing it to be enabled or disabled. The \RemindersModule\ class registers the module's services via \AddRemindersModule\, which checks if the module is enabled before proceeding to add valuations. This change introduces the structural foundation for the Reminders module within the application's dependency injection container.

Src/Modules/Reminders/Divstack.Company.Estimation.Tool.Reminders · high confidence

SMS notifications for completed payments

Users will now receive an SMS notification when a payment is completed. The system automatically sends a message to the client's phone number upon successful payment processing.

Src/Modules/Sms/Divstack.Company.Estimation.Tool.Sms.Payments · high confidence

Stripe payment processing integration

The application now supports processing payments via Stripe. This update introduces the Stripe payment processor, including services for creating and confirming payment intents and payment methods, an initializer to generate payment secrets, and a confirmation handler to finalize card-based payments. Configuration is managed via the 'StripeApi' section, and all components are registered in the dependency injection container.

Src/Modules/Payments/Divstack.Company.Estimation.Tool.Payments.Infrastructure.PaymentProcessor.Stripe · high confidence

Trello task creation on valuation requests

A new event handler, ValuationRequestCreatedTrelloEventHandler, was added to automatically create a Trello task whenever a ValuationRequested domain event is published. The handler generates a task name and description from the valuation ID and services, then delegates to the ITrelloTaskCreator to post to the 'Todo' list in Trello.

Src/Modules/Valuations/Divstack.Company.Estimation.Tool.Valuations.Infrastructure.Trello/Features/ValuationRequest · medium confidence

Valuations module adds Marten-based data access layer

The Valuations module now includes a new data access layer that configures Marten as the persistence provider. This introduces a dedicated connection string named 'Valuations' and registers the necessary services to connect to the Marten store, enabling event sourcing capabilities for the module.

Src/Modules/Valuations/Divstack.Company.Estimation.Tool.Valuations.Persistance/DataAccess · high confidence

Valuations module infrastructure wiring and command/query execution

The Valuations module's infrastructure layer now includes an \InfrastructureModule\ that registers persistence, application, mediation, events, Trello, and Snov services, and exposes \UseInfrastructure\ to configure the application builder. A new \ValuationsModule\ implements \IValuationsModule\ to route commands and queries through MediatR, enabling the module to execute commands and queries via the mediator pattern.

Src/Modules/Valuations/Divstack.Company.Estimation.Tool.Valuations.Infrastructure · high confidence

Removals

Removed Products domain layer

The Products domain layer has been removed from the core module. This includes the deletion of the Product entity, the ProductsService (along with its interface), the IProductsRepository interface and its implementation, the ProductExistingChecker, and all associated Data Transfer Objects (CreateProductRequest, UpdateProductRequest, CreateCategoryRequest, UpdateCategoryRequest).

Divstack.Company.Estimation.Tool.Products.Core · high confidence

Architecture

Restructured Users API controllers and DTOs into modular directory layout

The Users API controllers and their associated Data Transfer Objects (DTOs) have been reorganized from a flat structure into a modular directory hierarchy under Src/Modules/Users/. This includes moving AuthenticationController, UsersController, and BaseController to Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Api/Controllers/, alongside their corresponding DTOs (e.g., SignInRequest, ResetPasswordResponse, ExceptionDto) into Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Api/Controllers/Common/DTO/. This change improves code organization and separation of concerns within the Users module.

Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Api/Controllers · high confidence

Restructured and refactored JWT and refresh token handling in the Users module

The Users module's identity infrastructure has been reorganized into a new \Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Infrastructure/Identity\ directory structure. This change introduces new interfaces and implementations for managing JWT tokens (\JwtTokenManagementService\) and refresh tokens (\RefreshTokenGenerationService\, \RefreshTokenRepository\). The \IdentityModule\ now explicitly configures ASP.NET Core Identity with specific password and lockout policies. Additionally, a new \TokenStoreManager\ is introduced to handle token deactivation via a distributed cache, and the existing \JwtTokenManagementService\ has been refactored to use modern C\# patterns (e.g., \is not\ pattern matching, expression-bodied members).

Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Infrastructure/Identity/Jwt/RefreshTokens · high confidence

Behavioural changes

Add configuration for Valuations topic name

The Valuations module now reads the Kafka topic name from configuration via a new \IValuationsTopicConfiguration\ interface and its implementation \ValuationsTopicConfiguration\. This allows the topic name to be externalized, enabling different environments to specify their own Valuations event publishing destination without code changes.

Src/Modules/Valuations/Divstack.Company.Estimation.Tool.Valuations.Infrastructure/Events/Publish/Configuration · high confidence

Added Marten projection configuration for valuation queries

The Valuations module now registers inline Marten projections for proposals, history, valuation information, and list items. This enables the system to maintain read-optimized aggregates for querying valuation data, supporting the event-sourced architecture for these specific query paths.

Src/Modules/Valuations/Divstack.Company.Estimation.Tool.Valuations.Persistance/Domain/Valuations/Queries · high confidence

Added Valuation state constants and persistence module registration

The Valuations persistence module now includes a new ValuationStates class defining constant strings for valuation lifecycle states (WaitForProposal, WaitForClientDecision, Approved, Completed). The PersistanceModule class has been added to register data access, health checks, repositories, and projections with the service collection and application builder.

Src/Modules/Valuations/Divstack.Company.Estimation.Tool.Valuations.Persistance · medium confidence

Added configuration for payment initialization email

The payment initialization email template now reads its subject, payment URL, and template path from the application's configuration system, allowing these values to be customized without code changes.

Src/Modules/Emails/Divstack.Company.Estimation.Tool.Emails.Payments/PaymentInitialized/Configuration · high confidence

Added email sender for suggested valuation proposals

A new internal email sender has been introduced to handle notifications for suggested valuation proposals. This includes a request record carrying proposal details (valuation, proposal, and inquiry IDs, plus customer and pricing information) and an implementation that populates an HTML email template with these details and specific accept/reject links. This change modifies how users receive these specific proposal-related communications.

Src/Modules/Emails/Divstack.Company.Estimation.Tool.Emails.Valuations/Proposals/Suggested/Sender · high confidence

Added global usings for common types

A new GlobalUsings.cs file was added to the Inquiries API common module, establishing global using directives for System, System.Runtime.CompilerServices, System.Threading.Tasks, and Microsoft.Extensions.DependencyInjection. This simplifies the codebase by making these namespaces available across all files in the module without requiring explicit using statements.

Src/Modules/Inquiries/Divstack.Company.Estimation.Tool.Inquiries.Api/Common · high confidence

Enable SignalR authentication via query string

Added JwtSignalrAuthorization and UserPublicIdProvider to support JWT-based authentication for SignalR connections. The new JwtSignalrAuthorization class extracts the access token from the 'access\_token' query parameter for requests to '/hubs/', while UserPublicIdProvider implements IUserIdProvider to extract the user's public ID from the JWT claims, allowing authenticated SignalR hubs to identify users.

Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Infrastructure/Identity/Jwt/SignalR · high confidence

Enhanced JWT authentication with SignalR support and stricter validation

The JWT authorization module has been refactored to support SignalR authentication by adding a custom event handler to read tokens from the query string. Additionally, JWT validation has been tightened by explicitly enabling issuer, audience, and lifetime validation, and setting the clock skew to zero for stricter token expiration checks.

Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Infrastructure/Identity/Jwt · high confidence

Inquiries module now exposes command and query execution via a dedicated module

The Inquiries module now provides a concrete implementation (InquiriesModule) that routes commands and queries through MediatR's mediator. This change introduces a new InfrastructureModule registration that wires up persistence, application, mediation, and event services, enabling the application layer to execute commands and queries via the mediator pattern.

Src/Modules/Inquiries/Divstack.Company.Estimation.Tool.Inquiries.Infrastructure · high confidence

Introduce feature flag and module registration for the Push module

The Push module is now gated by a feature flag, allowing the module to be enabled or disabled at runtime. The module registers its API, data access, and sub-modules (Valuations, Payments) via dependency injection, and configures the application pipeline. A new appsettings file defines the default state of the feature flag and a MongoDB connection string for notifications.

Src/Modules/Push/Divstack.Company.Estimation.Tool.Push · high confidence

Introduce feature flag gating for the SMS module

The SMS module is now controlled by a feature flag named 'SmsModule'. The module's registration in the service collection is now conditional on this flag being enabled, allowing the module to be disabled at runtime or via configuration. The default configuration sets the flag to true, meaning the module is enabled by default.

Src/Modules/Sms/Divstack.Company.Estimation.Tool.Sms · high confidence

Introduce user identity and authentication configuration for the Users module

The Users module now registers a CurrentUserService that extracts the public user ID and roles from the HTTP context, and registers this service via dependency injection. The module's startup logic checks a feature flag to conditionally enable the module, and the module's configuration (including token settings, user password expiration, and an admin account initializer) is now defined in a dedicated appsettings file.

Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Api · medium confidence

Introduced MongoDB-based data access layer for services and categories

The data access module now registers a MongoDB connection and exposes an IServicesContext that provides access to 'Services' and 'Categories' collections within the 'EstimationTool' database. This change adds the infrastructure for database interactions, including repository registration and health checks, effectively shifting the storage mechanism for these entities to MongoDB.

Src/Modules/Services/Divstack.Company.Estimation.Tool.Services.DataAccess · high confidence

Introduces CQRS command/query contracts and JWT token validation policies

The application layer now defines CQRS base interfaces (ICommand, IQuery, and IUserModule) to standardize how commands and queries are executed, while the infrastructure layer adds a new authorization policy that validates the current JWT token's status via a custom TokenValidAuthorizeAttribute and associated handler, ensuring that only active tokens are accepted for protected resources.

Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Application/Contracts, Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Infrastructure/Identity/Jwt/Policies · medium confidence

Migrate Users module persistence to use a dedicated Users database connection

The persistence module for the Users module has been moved from the Carts module's namespace to the Users module's namespace. This change updates the database connection string from 'Carts' to 'Users', ensuring that the Users module connects to the correct database. Additionally, the module now registers health checks for the Users database connection.

Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Persistance · high confidence

Migrated Inquiries persistence layer to MySQL

The Inquiries module's persistence layer has been refactored to use MySQL instead of SQL Server. This includes updating the database context, connection factory, and repository implementations to work with the new database provider, and adding a health check for the Inquiries database.

Src/Modules/Inquiries/Divstack.Company.Estimation.Tool.Inquiries.Persistance · high confidence

Migrated category management to the core services module

The category management functionality, including the Category domain model, repository interface, and service layer, has been moved from the legacy Products.Core module into the new Services.Core module. This restructuring aligns the category domain with the updated project structure, ensuring that category creation, retrieval, and deletion operations are now handled within the core services layer.

Src/Modules/Services/Divstack.Company.Estimation.Tool.Services.Core/Services/Categories · high confidence

Migrated user persistence layer from SQL Server to MySQL

The user module's data access layer has been refactored to use MySQL instead of SQL Server. This change updates the \UsersContext\ and related factory classes, which have been moved from the Carts module to the Users module. The database context now targets \UsersContext\ instead of \CartsContext\, and the connection string configuration has been updated to reference 'Users' rather than 'Carts'. Additionally, the database provider has been switched from SQL Server to MySQL, requiring the use of \UseMySql\ and \ServerVersion.AutoDetect\ for connection string handling.

Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Persistance/DataAccess · high confidence

Moved and refactored the MediationModule registration

The MediationModule registration method has been moved from the Carts infrastructure module to the Users infrastructure module. The C\# file was renamed and relocated to Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Infrastructure/Mediation/MediationModule.cs. The namespace was updated from Divstack.Company.Estimation.Tool.Carts.Infrastructure.Mediation to Divstack.Company.Estimation.Tool.Users.Infrastructure.Mediation. The MediationModule class was changed from a nested internal class to an internal static class, and the AddMediationModule method was changed from an instance method to an extension method on IServiceCollection.

Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Infrastructure/Mediation · high confidence

Refactor email sending to use a shared core module

The email sending infrastructure has been restructured to use a shared \EmailCoreModule\ that registers a generic \IEmailSender\ interface. Previously, each mail sender (for account confirmation, password reset, and password expiration) relied on a specific \IEmailModule\ interface. The diff shows the introduction of \EmailCoreModule\ which registers \IEmailSender\ and \IMailTemplateReader\, and updates the user-specific mail senders to depend on this new core abstraction instead of the previous module-specific interface.

Src/Modules/Emails/Divstack.Company.Estimation.Tool.Emails.Users · high confidence

Refactored ApplicationModule structure and namespace

The ApplicationModule class has been moved to a new directory structure (Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Application) and simplified by removing the explicit IServiceCollection registration method, which now returns the services collection directly. The namespace was updated to match the new folder structure.

Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Application · medium confidence

Refactored CurrentUserService implementation

The CurrentUserService class has been moved from the Products.Api layer to the Services.Api layer, reflecting a structural reorganization. The implementation was also refactored to use private field initialization and updated using directives, aligning the code with the new project structure.

Src/Modules/Services/Divstack.Company.Estimation.Tool.Services.Api/UserAccess · medium confidence

Refactored Priorities module structure and user access service

The Priorities module's API structure was reorganized: a new Routing class was added to define the module's base URL as 'api/priorities-module', global usings were established for ASP.NET Core and Swagger annotations, and the CurrentUserService was moved from the Carts module to the Priorities module, updating its namespace and access modifiers to align with the new module structure.

Src/Modules/Priorities/Divstack.Company.Estimation.Tool.Priorities.Api/Common, Src/Modules/Priorities/Divstack.Company.Estimation.Tool.Priorities.Api/UserAccess · high confidence

Refactored core module to support service and checker scanning

The core module has been restructured to automatically register all classes ending in 'Service' and 'Checker' from their respective assemblies using assembly scanning. This replaces the previous manual registration of specific services, allowing for more flexible and scalable service discovery within the application.

Src/Modules/Services/Divstack.Company.Estimation.Tool.Services.Core · medium confidence

Refactored core service interfaces and exception classes

Moved and refactored the ICurrentUserService interface and the ServiceNotFoundException class into the core services module. The user access interface now exposes GetPublicUserId and GetCurrentUserRoles methods directly, and the exception class is now a sealed internal class inheriting from InvalidOperationException.

Src/Modules/Services/Divstack.Company.Estimation.Tool.Services.Core/Services/Exceptions, Src/Modules/Services/Divstack.Company.Estimation.Tool.Services.Core/UserAccess · high confidence

Removal of IgnoreMemberAttribute

The IgnoreMemberAttribute class, previously located in the Divstack.Company.Estimation.Tool.Shared.DDD.BuildingBlocks namespace, has been removed from the codebase. This attribute, which was used to mark properties or fields for exclusion, is no longer available for use in the project.

Divstack.Company.Estimation.Tool.Shared.DDD.BuildingBlocks · high confidence

Removal of legacy user domain models and interfaces

The domain layer for user management has been refactored by removing several legacy classes and interfaces, including Customer, Employee, ApplicationRole, and various user account and authentication-related models (such as FailedLoginAttempt, PasswordHistory, and RefreshToken). This cleanup eliminates outdated structures from the Users.Domain module, likely simplifying the codebase and preparing for a new user management implementation.

Divstack.Company.Estimation.Tool.Users.Domain · medium confidence

Removal of user identity and authentication infrastructure

The user identity and authentication infrastructure has been removed from the application. This includes the deletion of all files related to user management, JWT token generation and validation, password handling, and role management. Specifically, the \DateTimeProvider\, \IdentityModule\, \Jwt\ configuration and policies, \RefreshTokens\ services, \Users\ configuration and services, and the \InfrastructureModule\ registration have all been deleted. This change eliminates the internal implementation of user sign-in, token management, and role-based access control within this module.

Divstack.Company.Estimation.Tool.Users.Infrastructure · high confidence

Removed C4 architecture documentation and infrastructure module

The C4 architecture documentation tooling has been removed from the codebase. This includes the \Divstack.Company.Estimation.Tool.Docs.Architecture.C4\ project, which generated system context, container, and component diagrams using Structurizr. Additionally, the \InfrastructureModule\ in the \Divstack.Company.Estimation.Tool.Carts.Infrastructure\ project has been deleted, removing the registration of persistence and application modules.

Divstack.Company.Estimation.Tool.Carts.Infrastructure, Divstack.Company.Estimation.Tool.Docs.Architecture.C4 · high confidence

Removed Products and Categories data access layer

The data access layer for Products and Categories has been removed from the application. This includes the deletion of all related Entity Framework Core migrations, the \ProductsContext\ and its factory, entity type configurations, and the repository implementations for both products and categories. As a result, the system no longer supports creating, reading, updating, or deleting product and category data through this specific data access implementation.

Divstack.Company.Estimation.Tool.Products.DAL · high confidence

Removed Quantity value object

The Quantity value object has been removed from the shared DDD value objects layer. This change eliminates the previous implementation that supported addition operations on quantity values, indicating a shift in how quantity data is handled within the estimation tool's domain model.

Divstack.Company.Estimation.Tool.Shared.DDD.ValueObjects · high confidence

Removed SQL Server persistence layer for user data

The SQL Server-specific persistence implementation for the Users module has been removed. This includes the deletion of the \DataAccessModule\ and \UsersContext\ which configured the Entity Framework Core \UsersContext\ to use SQL Server, along with all associated migration files (\Add\_Users\, \Alter\_Users\_Added\_PublicId\), entity type configurations, and repository classes. This change removes the previous database provider implementation, likely in preparation for a different database technology.

Divstack.Company.Estimation.Tool.Users.Persistance · high confidence

Removed cart and order domain models and application commands

The application layer for the cart feature has been removed, specifically the AddItem, ClearItems, and DeleteItem commands and their associated handlers and validators. Additionally, the core domain models for Orders (Order, OrderItem, and Status enum) have been deleted from the Orders.Domain project. This eliminates the ability to add, clear, or remove items from a cart and removes the foundational order entities from the system.

Divstack.Company.Estimation.Tool.Carts.Application, Divstack.Company.Estimation.Tool.Orders.Domain · high confidence

Removed empty placeholder class from the project

The empty \Class1\ placeholder file has been removed from the \Divstack.Company.Estimation.Tool\ project. This cleanup eliminates unused code and reduces the project's footprint, aligning the codebase with the structural changes indicated by the commit messages regarding folder reorganization and the removal of client app code.

Divstack.Company.Estimation.Tool · medium confidence

Removed hardcoded configuration and startup class from the Bootstrapper project

The \Startup.cs\ file and the \appsettings.json\ / \appsettings.Development.json\ configuration files have been deleted from the \Divstack.Company.Estimation.Tool.Bootstrapper\ project. This removes the previous hardcoded connection strings, token secrets, and module registration logic from the application's startup configuration, likely as part of a broader refactoring to externalize sensitive data and decouple the bootstrapper from specific infrastructure details.

Divstack.Company.Estimation.Tool.Bootstrapper · high confidence

Removed internal email sender interfaces and DI registration for user emails

The internal interfaces for sending confirmation, forgot password, and password expired emails have been removed, along with the associated dependency injection registrations in the EmailUsersModule. This eliminates the previous mechanism for dispatching these specific user notification emails.

Divstack.Company.Estimation.Tool.Emails.Users · high confidence

Removed internal email sending infrastructure

The internal email sending implementation has been removed from the Emails.Core module. This includes the deletion of the core module registration, the mail configuration interface and class, the email module interface and its SMTP-based implementation, and the associated HTML email template. As a result, the system no longer supports sending emails via the previous internal configuration and sender components.

Divstack.Company.Estimation.Tool.Emails.Core · high confidence

Removed legacy Cart domain model and supporting types

The \Cart\ entity, \CartItem\ value object, \ICartRepository\ interface, \Status\ enum, and related exception classes have been deleted from the Carts domain. This removes the previous implementation of cart management, indicating a structural change to how cart data is stored or accessed in the system.

Divstack.Company.Estimation.Tool.Carts.Domain · high confidence

Removed legacy Carts API module and controller

The CartsModule registration class and the CartController have been removed from the Carts.Api project. This eliminates the previous implementation of cart management endpoints (add, delete, and clear items) and their associated dependency injection setup, indicating a structural change to how cart operations are exposed or managed within the application.

Divstack.Company.Estimation.Tool.Carts.Api · high confidence

Removed legacy ProductsController and routing configuration

The legacy ProductsController and its associated Routing constants have been removed from the Products.Api project. This eliminates the previous HTTP endpoints for listing, creating, and deleting products, as well as the internal routing definitions that mapped these requests.

Divstack.Company.Estimation.Tool.Products.Api · high confidence

Removed legacy cart persistence layer

The Entity Framework Core configuration, repository implementation, and associated database migration scripts for the Cart entity have been deleted from the persistence layer. This removes the previous implementation of cart storage, indicating a shift away from the existing database schema for managing shopping carts.

Divstack.Company.Estimation.Tool.Carts.Persistance · high confidence

Removed obsolete authentication and user management DTOs and services

The Users.Api module has removed several obsolete or unused components, including authentication request/response DTOs (ConfirmAccountRequest, ForgotPasswordRequest/Response, ResetPasswordResponse, SignInRequest, SignOutRequest/Response), the GetAllUsersResponse DTO, the CurrentUserService, the UsersModule registration class, and the Users.rest test file. This cleanup eliminates dead code from the API layer, reducing the surface area for the user authentication and user management features.

Divstack.Company.Estimation.Tool.Users.Api · high confidence

Removed user management and authentication services

The application layer has removed the core user management and authentication interfaces and their associated commands, queries, and validators. Specifically, the \IPasswordsManagementService\, \ISignInManagementService\, \ITokenGenerationService\, and \IUserManagementService\ interfaces have been deleted, along with the \ICommand\, \IQuery\, and \IUserModule\ contract interfaces. This removal eliminates the existing user creation, password management, sign-in, and user retrieval capabilities within this module.

Divstack.Company.Estimation.Tool.Users.Application · high confidence

Restructured and refactored user authentication and management services

The application layer's authentication components have been reorganized into a new directory structure under \Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Application/Authentication\. This change introduces new interfaces for managing passwords (\IPasswordsManagementService\), sign-in (\ISignInManagementService\), user details (\IUserManagementService\), and roles (\IRoleManagementService\). Existing command handlers for sign-in, sign-out, password reset, account confirmation, and token exchange have been updated to use these new interfaces and are now located within the \Commands\ subdirectories. The \SignInCommand\ handler has been refactored to use the new \ISignInManagementService\ and related services, while DTOs like \UpdateUserDto\ and \UserDetailsDto\ have been moved to a dedicated \DTOs\ folder within the authentication namespace.

Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Application/Authentication · high confidence

Restructured project modules and introduced new configuration interfaces

The codebase has been reorganized into a modular structure, moving the client application code out of the repository. New configuration interfaces and implementations have been added for email templates (IValuationProposalApprovedMailConfiguration) and JWT token settings (ITokenConfiguration). Additionally, the repository registration logic has been migrated from the Carts module to the Users module, updating the assembly scan to target UserRepository instead of CartsRepository.

(repo-wide) · medium confidence

Services module registration now respects feature flags

The Services module's dependency injection registration in the API layer has been refactored to be conditional on a feature flag. Previously, the module registered its services unconditionally; now, the \AddServicesModule\ method checks the \ServicesModule\ feature flag defined in \FeatureFlags.cs\ and skips registration if the module is disabled. This allows users to toggle the Services module on or off at runtime via configuration.

Src/Modules/Services/Divstack.Company.Estimation.Tool.Services.Api · high confidence

Standardized global usings and defined valuation module routing

Global using statements for common namespaces (e.g., System, System.Runtime.CompilerServices) were added to both the Emails and Valuations modules to reduce repetitive import statements. Additionally, a new routing configuration was introduced for the Valuations API, defining the module's base URL as 'api/valuations-module' to standardize endpoint paths.

Src/Modules/Emails/Divstack.Company.Estimation.Tool.Emails.Core/Common, Src/Modules/Valuations/Divstack.Company.Estimation.Tool.Valuations.Api/Common · high confidence

Standardized global usings for shared modules

Global using directives for common .NET namespaces (System, System.Threading, System.Collections.Generic, System.Linq, and Microsoft.Extensions.DependencyInjection) have been added to the Email and Payment modules. This change ensures consistent access to standard library types and dependency injection support across these modules.

Src/Modules/Emails/Divstack.Company.Estimation.Tool.Emails.Valuations/Common, Src/Modules/Payments/Divstack.Company.Estimation.Tool.Payments.Infrastructure/Common · high confidence

Updated Users module database migration to use MySQL-compatible types

The initial database migration for the Users module has been updated to use MySQL-compatible data types. Specifically, string columns now use 'varchar' and 'longtext' instead of SQL Server's 'nvarchar' and 'nvarchar(max)', and boolean fields use 'tinyint(1)' instead of 'bit'. Additionally, the migration timestamp has been updated from '20210218195733\_Add\_Users' to '20210626121915\_Init\_users\_module', and the EF Core product version in the model snapshot has been updated from 5.0.2 to 5.0.7.

Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Persistance/Migrations · medium confidence

Test coverage

Added acceptance test infrastructure for the Valuations module; Added acceptance tests for valuation request, proposal suggestion, and approval workflows; Added architectural tests for application and infrastructure layers; Added base test infrastructure for Valuations domain; Added domain tests for Priority archive, force, and redefine operations; Added domain tests for proposal lifecycle; Added domain tests for valuation lifecycle; Added integration tests for priority definition and redefinition; Added integration tests for the Services module; Added test builders for valuation domain objects; Added test helpers for priorities domain; Added test infrastructure for the Inquiries module; Added tests for the user sign-in management service; Removed obsolete integration tests for the Products module.

Dependencies

Upgrade to .NET 7 and update core dependencies

The application has been upgraded to .NET 7, updating the target framework across all modules. This change includes updating the \Microsoft.AspNetCore.Authentication.JwtBearer\ package to version 7.0.1 and the \MongoDB.Driver\ package to version 2.19.0, ensuring compatibility with the new runtime and leveraging the latest features and security fixes in these libraries.

(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

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 47 → 47 (-0.6)
  • Rubric changed (rubric-2026.08.18 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 80 → 70 (-9.8)
  • Architecture 59 → 59 (-0.0)
  • Maturity 64 → 64 (+0.0)
  • Readiness 29 → 27 (-1.1)
  • Security 63 → 63 (-0.3)
  • Domain Modelling 72 → 76 (+3.6)
  • Event-Driven 84 → 84 (+0.0)
  • Event Sourcing 66 → 66 (+0.0)

Resolved (29)

  • BarePragmaDisable repeated across 21 files (Src/Modules/Inquiries/Divstack.Company.Estimation.Tool.Inquiries.Application/Inquiries/Commands/Make/MakeInquiryCommand.cs)
  • Duplicated block (9 lines × 2) (Src/Modules/Users/Divstack.Company.Estimation.Tool.Users.Persistance/Migrations/Init_users_module.cs)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • …and 9 more

New (175)

  • CommentedOutCode (Src/Modules/Valuations/Divstack.Company.Estimation.Tool.Inquiries.Infrastructure.Snov/FindClientCompany/ApiConsumer/CompanyFinderHttpClient.cs)
  • CoverageExclusion (Src/Bootstrapper/Divstack.Company.Estimation.Tool.Bootstrapper/Program.cs)
  • CoverageExclusion (Src/Modules/Divstack.Company.Estimation.Tool.Push.Api/Notifications/Commands/MarkAllAsReadEndpoint.cs)
  • CoverageExclusion (Src/Modules/Divstack.Company.Estimation.Tool.Push.Api/Notifications/Commands/MarkAsReadEndpoint.cs)
  • CoverageExclusion (Src/Modules/Divstack.Company.Estimation.Tool.Push.Api/Notifications/NotificationsRouting.cs)
  • CoverageExclusion (Src/Modules/Divstack.Company.Estimation.Tool.Push.Api/Notifications/Queries/GetNotReadEndpoint.cs)
  • CoverageExclusion (Src/Modules/Payments/Divstack.Company.Estimation.Tool.Payments.Api/Common/UserAccess/CurrentUserService.cs)
  • CoverageExclusion (Src/Modules/Payments/Divstack.Company.Estimation.Tool.Payments.Api/Controllers/BaseController.cs)
  • CoverageExclusion (Src/Modules/Payments/Divstack.Company.Estimation.Tool.Payments.Api/Controllers/PaymentsController.cs)
  • CoverageExclusion (Src/Modules/Payments/Divstack.Company.Estimation.Tool.Payments.Api/FeatureFlags.cs)
  • CoverageExclusion (Src/Modules/Payments/Divstack.Company.Estimation.Tool.Payments.Api/PaymentsModule.cs)
  • CoverageExclusion (Src/Modules/Priorities/Divstack.Company.Estimation.Tool.Priorities.Api/Common/Endpoints/Routing.cs)
  • CoverageExclusion (Src/Modules/Priorities/Divstack.Company.Estimation.Tool.Priorities.Api/FeatureFlags.cs)
  • CoverageExclusion (Src/Modules/Priorities/Divstack.Company.Estimation.Tool.Priorities.Api/Priorities/Get.cs)
  • CoverageExclusion (Src/Modules/Priorities/Divstack.Company.Estimation.Tool.Priorities.Api/Priorities/PrioritiesRouting.cs)
  • CoverageExclusion (Src/Modules/Priorities/Divstack.Company.Estimation.Tool.Priorities.Api/PrioritiesModule.cs)
  • CoverageExclusion (Src/Modules/Priorities/Divstack.Company.Estimation.Tool.Priorities.Api/UserAccess/CurrentUserService.cs)
  • CoverageExclusion (Src/Modules/Priorities/Divstack.Company.Estimation.Tool.Priorities.Infrastructure/Domain/BackgroundProcesses/RedefinePrioritiesScheduler.cs)
  • CoverageExclusion (Src/Modules/Reminders/Divstack.Company.Estimation.Tool.Reminders.Priorities/PrioritiesModule.cs)
  • CoverageExclusion (Src/Modules/Services/Divstack.Company.Estimation.Tool.Services.Api/Controllers/AttributesController.cs)
  • …and 155 more

API surface

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

kamilbaczek/Modular-monolith-by-example 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 35f77216230e53d1a9df5a49f7249a8a74be8fe3 — 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.