thisisnabi/DigitalWallet
41.4
Weak · 21 September 2026
1.3k
lines of production code
C#
primary language
4
measurements over time
What this system is
This system is a .NET-based digital wallet service that manages user accounts, multi-currency support, and financial transactions. It provides APIs for creating and suspending wallets, retrieving balances and transaction histories, and transferring funds between wallets. The architecture includes a persistence layer for wallets, currencies, and transactions, along with validation filters to ensure data integrity.
Features
Add ability to change a wallet's title
Users can now update the title of their wallet via a new PATCH endpoint. The request payload contains a 'Title' string, which is validated to be non-empty, not null, and limited to a maximum of 30 characters. The endpoint is mapped using the Carter package and integrates with the existing WalletService to perform the title change.
src/DigitalWallet/Features/UserWallet/ChangeTitle · high confidence
Add endpoint for increasing wallet balance
A new POST endpoint is introduced to increase a user's wallet balance. The endpoint accepts a wallet ID and a request body containing the amount and a description. Validation rules ensure the amount is greater than zero and the description is non-empty and under 500 characters.
src/DigitalWallet/Features/Transactions/IncreaseWalletBalance · medium confidence
Add endpoint to retrieve all supported currencies
A new API endpoint has been introduced to fetch the complete list of supported currencies. The response includes each currency's ID, name, code, and exchange ratio, allowing users to view all available currency options in their digital wallet.
src/DigitalWallet/Features/MultiCurrency/GetAll · high confidence
Add endpoint to update currency exchange ratio
A new PATCH endpoint is introduced at /{currency\_id} to update the exchange ratio for a specific currency. The request body contains a 'Ratio' field, which is validated to ensure it is greater than zero.
src/DigitalWallet/Features/MultiCurrency/UpdateRatio · high confidence
Add multi-currency creation endpoint
Users can now create new currencies by providing a code, name, and exchange ratio. The new CreateCurrency feature exposes a POST endpoint that accepts these parameters, validates them (ensuring the ratio is positive and names/codes meet length constraints), and returns the new currency's ID.
src/DigitalWallet/Features/MultiCurrency/CreateCurrency · high confidence
Add wallet balance retrieval endpoint
A new GET endpoint is introduced to retrieve a user's wallet balance. The endpoint accepts a wallet ID as a route parameter, queries the database for the corresponding wallet record, and returns the wallet ID and current balance. If the wallet is not found, a WalletNotFoundException is thrown.
src/DigitalWallet/Features/UserWallet/GetBalance · high confidence
Add wallet creation capability with validation and Carter-based routing
Users can now create a new digital wallet by providing a title, currency ID, and user ID. The request is validated to ensure all fields are present and the title does not exceed 30 characters. The endpoint is implemented using the Carter package for route mapping, exposing a POST endpoint that processes the request and returns the new wallet ID.
src/DigitalWallet/Features/UserWallet/CreateWallet · medium confidence
Added core currency domain model and services for multi-currency support
Introduced the foundational components for multi-currency functionality, including the \Currency\ entity, \CurrencyId\ value object, and \CurrencyConverter\ for exchange rate calculations. The update also adds the \CurrencyService\ to manage currency creation and ratio updates, along with specific exceptions (\DuplicateCurrencyException\, \InvalidCurrencyRatioException\, etc.) to handle validation errors, and an Entity Framework configuration (\CurrencyEfConfiguration\) to map the currency table.
src/DigitalWallet/Features/MultiCurrency/Common · medium confidence
Added endpoint to retrieve wallet transactions
A new API endpoint has been added to fetch the transaction history for a specific wallet. Users can now retrieve a list of past transactions associated with their wallet, with each entry including the creation date, description, transaction type, and kind. The endpoint is implemented using the Carter package for route mapping.
src/DigitalWallet/Features/UserWallet/GetTransactions · medium confidence
Added endpoint validation filter for request data
A new \EndpointValidatorFilter\ has been introduced to automatically validate incoming request data against a specified validator. When a request is processed, the filter checks the input object; if validation fails, it returns an HTTP 422 (Unprocessable Entity) error. This ensures that only valid data reaches the endpoint logic, improving data integrity and error handling for API consumers.
src/DigitalWallet/Common/Filters · high confidence
Added wallet transactions endpoint
A new GET endpoint has been added to retrieve a wallet's transaction history. The endpoint accepts 'from\_date' and 'to\_date' query parameters to filter transactions by creation date, returning a list of transaction details including description, type, and kind.
src/DigitalWallet/Features/Transactions/WalletTransactions · high confidence
Initial Digital Wallet service setup with core features
The Digital Wallet service has been initialized with a new ASP.NET Core 8.0 application structure, including a Dockerfile for containerization and configuration files for development and production environments. The service exposes wallet management capabilities, such as activating wallets, retrieving balances, and managing transactions, using the Carter package for endpoint mapping and FluentValidation for request validation. The setup also includes Swagger documentation and a database context for persistence.
src/DigitalWallet · high confidence
Initial database schema for wallet, currency, and transaction features
The persistence layer now includes the initial Entity Framework Core migrations for the digital wallet system. This introduces database tables for Currencies, Wallets, and Transactions within the 'wallet' schema, establishing the foundational data model for multi-currency support, user wallets, and transaction history. Additionally, a subsequent migration standardizes timestamp columns by renaming 'CreatedOn' to 'CreatedOnUtc' in the Wallets and Transactions tables to explicitly indicate UTC time zones.
src/DigitalWallet/Common/Persistence/Migrations · high confidence
Initial project structure and documentation
The repository was initialized with a .NET solution file defining the project structure, including the main DigitalWallet application and separate projects for unit, integration, and functional tests. A .dockerignore file was added to exclude build artifacts and sensitive files from Docker builds, and the README.md was updated to document the project's features, such as multi-currency support and wallet management, along with contribution guidelines.
(repo-wide) · high confidence
Introduce Multi-Currency Feature Manager and Service Registration
A new FeatureManager class has been added to the MultiCurrency feature, establishing the '/currencies' endpoint prefix and 'Currency' tag. It also registers CurrencyService as a scoped dependency and CurrencyConverter as a singleton, enabling the multi-currency functionality within the digital wallet application.
src/DigitalWallet/Features/MultiCurrency · high confidence
Introduce transaction feature manager for service registration
A new FeatureManager class has been added to the Transactions feature, providing a centralized location for registering the TransactionService as a scoped dependency. This change consolidates service discovery and endpoint configuration (tagged as 'Transaction' with a '/transactions' prefix) within the feature's own scope, rather than relying on static classes or extensions.
src/DigitalWallet/Features/Transactions · medium confidence
Introduce wallet persistence layer with read-only context
Added new persistence classes to support wallet, currency, and transaction data. The main context (WalletDbContext) is configured with a 'wallet' schema and maps Wallet, Currency, and Transaction entities. A separate read-only context (WalletDbContextReadOnly) is introduced to provide safe, read-only access to these entities, preventing accidental writes while allowing queries for transactions, wallets, and currencies.
src/DigitalWallet/Common/Persistence · high confidence
Introduce wallet-to-wallet funds transfer endpoint
Users can now transfer funds between wallets via a new POST /funds endpoint. The request requires source and destination wallet IDs, a positive amount, and a description (up to 500 characters). Validation ensures all fields are present and the amount is greater than zero.
src/DigitalWallet/Features/Transactions/WalletFunds · high confidence
Introduces core transaction domain and service for wallet operations
Adds the foundational components for the digital wallet's transaction system, including the Transaction entity, its Entity Framework Core configuration, and the TransactionService that orchestrates balance increases, decreases, and fund transfers. The service enforces validation by throwing InvalidTransactionAmountException for zero amounts and WalletOwnershipException when a user lacks access to the relevant wallets, ensuring all balance changes are persisted within database transactions.
src/DigitalWallet/Features/Transactions/Common · high confidence
Introduces core wallet domain model and service layer
Adds the foundational components for the digital wallet feature, including the Wallet entity with balance and status management, value objects for WalletId and UserId, and a WalletService that handles wallet creation, balance adjustments, title updates, and status changes. The implementation includes specific exception types (InsufficientBalance, WalletAlreadyExists, WalletNotFound, WalletUnavailable) to enforce business rules and a database configuration that maps the wallet to the persistence layer with concurrency token support for transaction safety.
src/DigitalWallet/Features/UserWallet/Common · high confidence
New endpoint to decrease wallet balance
A new API endpoint has been added to decrease a user's wallet balance. The endpoint accepts a request containing the amount and a description, validates that the amount is greater than zero and the description is not empty, and invokes the underlying service to perform the balance reduction.
src/DigitalWallet/Features/Transactions/DecreaseWalletBalance · high confidence
Suspend wallet endpoint added via Carter
A new PATCH endpoint has been added to suspend a user's wallet. The endpoint is mapped using the Carter package and accepts a wallet ID as a route parameter, invoking the corresponding service method to perform the suspension.
src/DigitalWallet/Features/UserWallet/Suspend · high confidence
Behavioural changes
Centralized database and validation configuration
The application now uses centralized extension methods to configure the database contexts (including read-only tracking behavior) and register FluentValidation validators. This simplifies the startup process by providing single points of entry for setting up SQL Server connections and validation filters.
src/DigitalWallet/Common/Extensions · high confidence
Test coverage
Added initial test scaffolding and integration test for currencies
Added empty unit test classes for the DigitalWallet.FunctionalTests, DigitalWallet.IntegrationTests, and DigitalWallet.UnitTests projects. Additionally, added an integration test for the GetAllCurrencies endpoint, which verifies that the endpoint correctly returns a list of currencies from the database.
tests · high confidence
Dependencies
Add .NET 8.0 project files and test project scaffolding
The project structure was initialized with four new .csproj files: the main DigitalWallet application targeting .NET 8.0, along with functional, integration, and unit test projects. The main project references libraries including Carter, FluentValidation, Microsoft.EntityFrameworkCore (8.0.5), Swashbuckle, and ServiceCollector.Core. The test projects are configured with xUnit, Test SDK, and relevant assertion and mocking libraries.
(dependencies) · medium confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 41 → 41 (+0.5)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 97 → 97 (-0.2)
- Architecture 69 → 69 (+0.0)
- Maturity 49 → 49 (+0.0)
- Readiness 25 → 26 (+0.3)
- Security 48 → 49 (+1.2)
Resolved (13)
- High CVE: System.Text.Json 8.0.0
- High CVE: System.Text.Json 8.0.0
- Low CVE: Microsoft.Identity.Client 4.56.0
- Medium CVE: Azure.Identity 1.10.3
- Medium CVE: Azure.Identity 1.10.3
- Medium IaC: CKV_DOCKER_2 (src/DigitalWallet/Dockerfile)
- No exposed public API
- dormant codebase — no living knowledge left to concentrate
- redundant comment (src/DigitalWallet/GlobalUsings.cs)
- redundant comment (src/DigitalWallet/GlobalUsings.cs)
- redundant comment (src/DigitalWallet/GlobalUsings.cs)
- redundant comment (tests/DigitalWallet.IntegrationTests/GetAllCurrencies.cs)
- redundant comment (tests/DigitalWallet.IntegrationTests/GetAllCurrencies.cs)
New (57)
- CRAP 30: TransactionService.WalletFundsAsync (src/DigitalWallet/Features/Transactions/Common/TransactionService.cs)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (12 lines × 2) (src/DigitalWallet/Features/Transactions/WalletTransactions/Endpoint.cs)
- Duplicated block (8 lines × 2) (src/DigitalWallet/Common/Persistence/WalletDbContext.cs)
- Duplicated block (9 lines × 2) (src/DigitalWallet/Features/Transactions/DecreaseWalletBalance/DecreaseWalletBalanceRequestValidator.cs)
- High CVE: System.Text.Json 8.0.0
- Low coverage: src/DigitalWallet/Common/Extensions/IServiceCollectionExtensions.cs (src/DigitalWallet/Common/Extensions/IServiceCollectionExtensions.cs)
- Low coverage: src/DigitalWallet/Common/Filters/EndpointValidatorFilter.cs (src/DigitalWallet/Common/Filters/EndpointValidatorFilter.cs)
- Low coverage: src/DigitalWallet/Features/MultiCurrency/Common/CurrencyNotFoundException.cs (src/DigitalWallet/Features/MultiCurrency/Common/CurrencyNotFoundException.cs)
- Low coverage: src/DigitalWallet/Features/MultiCurrency/Common/CurrencyService.cs (src/DigitalWallet/Features/MultiCurrency/Common/CurrencyService.cs)
- Low coverage: src/DigitalWallet/Features/MultiCurrency/Common/DuplicateCurrencyException.cs (src/DigitalWallet/Features/MultiCurrency/Common/DuplicateCurrencyException.cs)
- Low coverage: src/DigitalWallet/Features/MultiCurrency/Common/InvalidCurrencyException.cs (src/DigitalWallet/Features/MultiCurrency/Common/InvalidCurrencyException.cs)
- Low coverage: src/DigitalWallet/Features/MultiCurrency/Common/InvalidCurrencyRatioException.cs (src/DigitalWallet/Features/MultiCurrency/Common/InvalidCurrencyRatioException.cs)
- Low coverage: src/DigitalWallet/Features/MultiCurrency/CreateCurrency/CreateCurrencyRequestValidator.cs (src/DigitalWallet/Features/MultiCurrency/CreateCurrency/CreateCurrencyRequestValidator.cs)
- Low coverage: src/DigitalWallet/Features/MultiCurrency/CreateCurrency/Endpoint.cs (src/DigitalWallet/Features/MultiCurrency/CreateCurrency/Endpoint.cs)
- Low coverage: src/DigitalWallet/Features/MultiCurrency/UpdateRatio/Endpoint.cs (src/DigitalWallet/Features/MultiCurrency/UpdateRatio/Endpoint.cs)
- Low coverage: src/DigitalWallet/Features/MultiCurrency/UpdateRatio/UpdateRatioRequestValidator.cs (src/DigitalWallet/Features/MultiCurrency/UpdateRatio/UpdateRatioRequestValidator.cs)
- Low coverage: src/DigitalWallet/Features/Transactions/Common/InvalidTransactionAmountException.cs (src/DigitalWallet/Features/Transactions/Common/InvalidTransactionAmountException.cs)
- Low coverage: src/DigitalWallet/Features/Transactions/Common/Transaction.cs (src/DigitalWallet/Features/Transactions/Common/Transaction.cs)
- …and 37 more
API surface
- Unchanged — 12 HTTP endpoints
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
thisisnabi/DigitalWallet 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 d2a08a670432c7cf4aa836923ec75f1eff83c153 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-fa71c66cabd8.