kamilbaczek/Modular-monolith-by-example
46.5
Weak · 21 September 2026
13.6k
lines of production code
C#
primary language
4
measurements over time
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.