mirror of
https://github.com/FOSSBilling/FOSSBilling.git
synced 2026-11-02 01:57:03 +09:00
* Migrated the Currency module to Doctrine * Caching and other improvements * Types, error handling and other improvements * Don't return false but throw an exception * Types * Refactor currency model usage to new Currency entity * Remove Fastnetmon submodule Deleted the Fastnetmon submodule from src/modules. This change may be part of a cleanup or migration away from using Fastnetmon as a submodule. * Refactor currency API admin get test * Fix failing Currency-related tests after Doctrine migration Updated test files to work with the new Doctrine-based Currency implementation. * Refactor currency retrieval to use repository * Refactor Currency database handling in several services and tests * Replace anonymous class mocks with standard PHPUnit mocks in Invoice tests (#3037) * Refactor currency retrieval and currency service * Apply suggestions from code review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Confirm updateCurrencyRates() method signature alignment (#3034) * Add null check for currency in Cart::toApiArray to prevent fatal error (#3035) * Initial plan * Add null check for currency in toApiArray method Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> * Initial plan * Replace anonymous class mocks with standard PHPUnit mocks for consistency Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> --------- Co-authored-by: Adam Daley <admdly@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> * Fix incorrect getRateByCode call in Order service (#3039) * Initial plan * Fix getRateByCode call and add null check with proper exception Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> * Fix silent failure in Currency::getBaseCurrencyRate when currency not found (#3040) * Initial plan * Throw exception when currency not found in getBaseCurrencyRate Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> * Use FOSSBilling\Exception for currency conversion rate failures (#3041) Use FOSSBilling\Exception for conversion rate fetch failures Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> * Remove problematic reflection usage in Cart service tests (#3042) Remove problematic reflection usage in Cart test Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> * Update tests-legacy/modules/Cart/Api/GuestTest.php Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/modules/Currency/Service.php Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/modules/Currency/Entity/Currency.php Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Use FOSSBilling\Exception for null currency check in Cart service (#3058) * Initial plan * Use FOSSBilling\Exception for null currency check in Cart service Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> * Use consistent error message for default currency not found Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> * Remove silent fallback in CurrencyRepository::findDefault() (#3057) * Add logging for default currency fallback behavior - Log warning when no default currency is found and falling back to ID 1 - Log critical error when neither default currency nor ID 1 exists - Clarify return type documentation - Cache result even if null to avoid repeated warnings Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> * Remove silent fallback to currency ID 1 in findDefault() Instead of silently falling back to currency ID 1 when no default is found, the method now returns null and lets callers handle it. This addresses the feedback about the silent fallback hiding configuration issues. All existing callers already properly handle null by throwing exceptions, so this change makes the error visible rather than hidden. Benefits: - No silent failures hiding misconfiguration - Cleaner separation of concerns (repositories for data access only) - Better adherence to Doctrine repository pattern - All callers already handle null appropriately Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> * Remove redundant documentation in findDefault() Simplified @return annotation to avoid redundancy with the description. Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> * Fix Currency entity getId() to handle uninitialized state (#3059) Make Currency::getId() return nullable int to prevent runtime errors Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> * Remove static cache from CurrencyRepository to fix long-running process issues (#3061) * Initial plan * Remove static cache from CurrencyRepository to fix long-running process issues Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> * Fix inconsistent null handling in CurrencyRepository::getRateByCode callers (#3062) * Fix null handling in Invoice/Service.php getRateByCode call Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> * Fix Invoice test to mock getRateByCode with valid return value Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> * Refactor Qwen `settings.json` structure and update version * Verify null handling consistency in CurrencyRepository::getRateByCode (#3073) Initial plan Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> * Update src/modules/Order/Service.php Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/modules/Currency/Service.php Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/modules/Currency/Repository/CurrencyRepository.php Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/modules/Currency/Service.php Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/modules/Currency/Service.php Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Improve return type annotation for Currency Admin API get_pairs method (#3075) * Initial plan * Improve return type annotation for get_pairs method in Currency Admin API Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> * Fix return type description to accurately reflect the return format Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> * Fix nullable type inconsistency in Currency entity setCode/getCode methods (#3074) * Initial plan * Fix nullable type in Currency entity setCode and getCode methods Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> * Fix PHPUnit test failures by updating mock return values for getCode Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> * Restore deleted Cart API Guest tests for Doctrine Currency migration (#3076) * Initial plan * Restore deleted Cart API Guest tests and update for Doctrine Currency migration Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> * Fix testAddItemSingle mock to return boolean instead of cart object Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> * Refactor currency handling in `Cart` and `Invoice` services Updated `Cart` and `Invoice` services to consistently use `CurrencyRepository` for retrieving currency entities and default currency. Improved error handling for missing currencies and updated related tests to mock new repository methods. Also fixed minor typos and improved code clarity in tests. * Refactor currency handling in `Cart` Service Replaced direct property access of currency code and conversion rate with getter methods in `Cart` Service. This improves encapsulation and consistency when handling currency-related operations. * Update src/modules/Cart/Service.php Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update tests-legacy/modules/Order/ServiceTest.php Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/modules/Currency/Service.php Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/modules/Currency/Entity/Currency.php Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Fix exception signature and type hint in `Currency` service Updated the exception thrown in `validateCurrencyForma`t to include a null second parameter for compatibility. Also added a return type to the closure in `Cart` `ServiceTest` for better type safety. * Refactor currency selection logic in `Cart` Service Improves clarity by separating client currency retrieval and default currency fallback. Ensures that the default currency is only checked and exception thrown if both client and default currencies are unavailable. * Add precision handling and caching for Currency conversionRate property (#3082) * Add documentation and caching for conversionRate precision handling Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> * Use sprintf for float-to-string conversion to avoid scientific notation Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> * Fix Doctrine identity map caching issue when changing default currency (#3081) * Fix Doctrine identity map caching issue in setAsDefault method Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> * Store currency code before clearing identity map to avoid detached entity access Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> * Fix PHPUnit test for setAsDefault method by mocking findOneByCode and clear Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: admdly <2807620+admdly@users.noreply.github.com> * Refactor currency test mocks for static data providers Replaces direct mock object creation in static data providers with string flags or placeholders, enabling proper mock instantiation within test methods. Updates test signatures and logic to handle these flags, improving test maintainability and compatibility with PHPUnit static context constraints. --------- Co-authored-by: Adam Daley <admdly@users.noreply.github.com> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: admdly <2807620+admdly@users.noreply.github.com>