feat: complete Item and Detail internationalization with comprehensive documentation (#196)
Commit: f7988f0deabf226158e88137b1562de6562a46fc
Date: 2025-07-06 18:33:08 +0200
Author: PascalHavelange
Commit Message
feat: complete Item and Detail internationalization with comprehensive documentation (#196)
* ### Removed
- **Contextualization and Internationalization Models**: Removed complex contextualization system deemed too complex for current requirements (July 6, 2025)
- **Contextualization Model**: Removed model, controller, resource, factory, seeder, and all related tests
- **Internationalization Model**: Removed model, controller, resource, factory, seeder, and all related tests
- **Database Tables**: Added migrations to drop `contextualizations` and `internationalizations` tables
- **API Endpoints**: Removed all contextualization and internationalization API routes
- **Model Relationships**: Cleaned up relationships in Item, Detail, Context, and Author models
- **Documentation**: Updated API documentation and field documentation
* Migrate from Language pivot pattern to Translation models
- Replace *Language pivot tables with *Translation models for Contact, Location, Province, and Address
- Create new Translation models, migrations, factories, seeders, resources, and controllers
- Update main models to use translations() hasMany instead of languages() belongsToMany relationships
- Migrate all API routes and controllers to use Translation pattern
- Update all resources to return translations instead of languages
- Fix all tests to use translations pattern and ensure unique constraint compliance
- Add withoutTranslations() factory states to prevent constraint violations
- Update translation factories to create unique languages instead of reusing seeded ones
- Remove obsolete *Language tables and update all references
This migration aligns with Laravel's recommended translation pattern and resolves
all unique constraint violations. All 822 tests now pass successfully.
Fixes: Internationalization refactoring to use Laravel best practices
* Update documentation for translation pattern migration
- Update api-models.md to reflect new Translation model pattern instead of pivot tables
- Add translation-specific API endpoints documentation for all models
- Update data relationships to show one-to-many translation relationships
- Update internationalization section to describe Laravel translation pattern
- Update CHANGELOG.md with detailed test coverage improvements and constraint fixes
- Regenerate OpenAPI documentation (api.json) to include new translation endpoints
- Document unique constraint compliance and factory improvements
This completes the documentation updates for the translation pattern migration
that aligns with Laravel best practices and resolves all test issues.
* feat: implement Item and Detail internationalization and contextualization system
- Add ItemTranslation and DetailTranslation models with comprehensive field sets
- Create translation tables with proper foreign key constraints and unique indexes
- Implement Eloquent relationships and helper methods for translation retrieval
- Add API resources and controllers for complete CRUD operations on translations
- Create factories and seeders for translation models with context/language support
- Register new API endpoints for translation management
- Update Item and Detail models with translation relationships
- Add filtering capabilities by item_id, detail_id, language_id, context_id
- Include fallback logic for missing translations and default context support
- Enhance existing factories with withoutTranslations states to prevent conflicts
- Update CHANGELOG with comprehensive documentation of new features
* feat: complete Item and Detail internationalization with comprehensive test suite
- Add ItemTranslation and DetailTranslation models with full CRUD API
- Implement context-aware translations supporting multiple versions per language
- Create comprehensive factory state methods for testing (withDefaultContext, forItem, forDetail)
- Add complete test suite with 924 tests passing (3632 assertions)
- Fix factory default context handling to use existing contexts
- Add proper imports and method signatures for type safety
- Update CHANGELOG with complete feature documentation
All tests now pass successfully with full coverage for translation functionality.
* docs: update documentation for ItemTranslation and DetailTranslation models
- Add comprehensive documentation for ItemTranslation and DetailTranslation models in api-models.md
- Document context-aware internationalization features and multi-context support
- Update Contexts section with detailed API endpoints and translation integration
- Add Context relationships to Data Relationships diagram
- Update test counts from 690+ to 924+ tests across documentation files
- Enhance internationalization section with context support and fallback logic
- Document extensive field sets and author relationships for translation models
---------
Co-authored-by: Pascal HAVELANGE <havelangep@hotmail.com>
Files Changed
- 📝 Modified:
.github/copilot-instructions.md
- 📝 Modified:
CHANGELOG.md
- 📝 Modified:
README.md
- 📝 Modified:
app/Http/Controllers/AddressController.php
- ✅ Added:
app/Http/Controllers/AddressTranslationController.php
- 📝 Modified:
app/Http/Controllers/ContactController.php
- ✅ Added:
app/Http/Controllers/ContactTranslationController.php
- ❌ Deleted:
app/Http/Controllers/ContextualizationController.php
- ✅ Added:
app/Http/Controllers/DetailTranslationController.php
- ❌ Deleted:
app/Http/Controllers/InternationalizationController.php
- ✅ Added:
app/Http/Controllers/ItemTranslationController.php
- 📝 Modified:
app/Http/Controllers/LocationController.php
- ✅ Added:
app/Http/Controllers/LocationTranslationController.php
- 📝 Modified:
app/Http/Controllers/ProvinceController.php
- ✅ Added:
app/Http/Controllers/ProvinceTranslationController.php
- 📝 Modified:
app/Http/Resources/AddressResource.php
- ✅ Added:
app/Http/Resources/AddressTranslationResource.php
- 📝 Modified:
app/Http/Resources/ContactResource.php
- ✅ Added:
app/Http/Resources/ContactTranslationResource.php
- ❌ Deleted:
app/Http/Resources/ContextualizationResource.php
- 📝 Modified:
app/Http/Resources/DetailResource.php
- ✅ Added:
app/Http/Resources/DetailTranslationResource.php
- 📝 Modified:
app/Http/Resources/ItemResource.php
- 🔄 Renamed:
app/Http/Resources/InternationalizationResource.php app/Http/Resources/ItemTranslationResource.php
- 📝 Modified:
app/Http/Resources/LocationResource.php
- ✅ Added:
app/Http/Resources/LocationTranslationResource.php
- 📝 Modified:
app/Http/Resources/ProvinceResource.php
- ✅ Added:
app/Http/Resources/ProvinceTranslationResource.php
- 📝 Modified:
app/Models/Address.php
- 🔄 Renamed:
app/Models/AddressLanguage.php app/Models/AddressTranslation.php
- 📝 Modified:
app/Models/Author.php
- 📝 Modified:
app/Models/Contact.php
- 🔄 Renamed:
app/Models/ContactLanguage.php app/Models/ContactTranslation.php
- 📝 Modified:
app/Models/Context.php
- ❌ Deleted:
app/Models/Contextualization.php
- 📝 Modified:
app/Models/Detail.php
- ✅ Added:
app/Models/DetailTranslation.php
- ❌ Deleted:
app/Models/Internationalization.php
- 📝 Modified:
app/Models/Item.php
- ✅ Added:
app/Models/ItemTranslation.php
- 📝 Modified:
app/Models/Location.php
- 🔄 Renamed:
app/Models/LocationLanguage.php app/Models/LocationTranslation.php
- 📝 Modified:
app/Models/Province.php
- 🔄 Renamed:
app/Models/ProvinceLanguage.php app/Models/ProvinceTranslation.php
- 📝 Modified:
database/factories/AddressFactory.php
- ✅ Added:
database/factories/AddressTranslationFactory.php
- 📝 Modified:
database/factories/ContactFactory.php
- ❌ Deleted:
database/factories/ContactLanguageFactory.php
- ✅ Added:
database/factories/ContactTranslationFactory.php
- 📝 Modified:
database/factories/ContextFactory.php
- ❌ Deleted:
database/factories/ContextualizationFactory.php
- 📝 Modified:
database/factories/DetailFactory.php
- ✅ Added:
database/factories/DetailTranslationFactory.php
- ❌ Deleted:
database/factories/InternationalizationFactory.php
- 📝 Modified:
database/factories/ItemFactory.php
- ✅ Added:
database/factories/ItemTranslationFactory.php
- 📝 Modified:
database/factories/LocationFactory.php
- ✅ Added:
database/factories/LocationTranslationFactory.php
- 📝 Modified:
database/factories/ProvinceFactory.php
- ✅ Added:
database/factories/ProvinceTranslationFactory.php
- ✅ Added:
database/migrations/2025_07_06_125218_drop_internationalizations_table.php
- ✅ Added:
database/migrations/2025_07_06_125226_drop_contextualizations_table.php
- ✅ Added:
database/migrations/2025_07_06_134754_create_contact_translations_table.php
- ✅ Added:
database/migrations/2025_07_06_134805_create_location_translations_table.php
- ✅ Added:
database/migrations/2025_07_06_134812_create_province_translations_table.php
- ✅ Added:
database/migrations/2025_07_06_134822_create_address_translations_table.php
- ✅ Added:
database/migrations/2025_07_06_135928_drop_old_language_tables.php
- ✅ Added:
database/migrations/2025_07_06_153857_create_item_translations_table.php
- ✅ Added:
database/migrations/2025_07_06_154006_create_detail_translations_table.php
- ✅ Added:
database/seeders/AddressTranslationSeeder.php
- ✅ Added:
database/seeders/ContactTranslationSeeder.php
- ❌ Deleted:
database/seeders/ContextualizationSeeder.php
- 📝 Modified:
database/seeders/DatabaseSeeder.php
- ✅ Added:
database/seeders/DetailTranslationSeeder.php
- ❌ Deleted:
database/seeders/InternationalizationSeeder.php
- ✅ Added:
database/seeders/ItemTranslationSeeder.php
- ✅ Added:
database/seeders/LocationTranslationSeeder.php
- ✅ Added:
database/seeders/ProvinceTranslationSeeder.php
- 📝 Modified:
docs/_openapi/api.json
- 📝 Modified:
docs/api-models.md
- 📝 Modified:
docs/contributing.md
- 📝 Modified:
docs/index.md
- 📝 Modified:
routes/api.php
- 📝 Modified:
tests/Feature/Api/Address/DestroyTest.php
- 📝 Modified:
tests/Feature/Api/Address/IndexTest.php
- 📝 Modified:
tests/Feature/Api/Address/ShowTest.php
- 📝 Modified:
tests/Feature/Api/Address/StoreTest.php
- 📝 Modified:
tests/Feature/Api/Address/UpdateTest.php
- ✅ Added:
tests/Feature/Api/AddressTranslation/AnonymousTest.php
- ✅ Added:
tests/Feature/Api/AddressTranslation/DestroyTest.php
- ✅ Added:
tests/Feature/Api/AddressTranslation/IndexTest.php
- ✅ Added:
tests/Feature/Api/AddressTranslation/ShowTest.php
- ✅ Added:
tests/Feature/Api/AddressTranslation/StoreTest.php
- ✅ Added:
tests/Feature/Api/AddressTranslation/UpdateTest.php
- 📝 Modified:
tests/Feature/Api/Contact/DestroyTest.php
- 📝 Modified:
tests/Feature/Api/Contact/IndexTest.php
- 📝 Modified:
tests/Feature/Api/Contact/ShowTest.php
- 📝 Modified:
tests/Feature/Api/Contact/StoreTest.php
- 📝 Modified:
tests/Feature/Api/Contact/UpdateTest.php
- ✅ Added:
tests/Feature/Api/ContactTranslation/AnonymousTest.php
- ✅ Added:
tests/Feature/Api/ContactTranslation/DestroyTest.php
- ✅ Added:
tests/Feature/Api/ContactTranslation/IndexTest.php
- ✅ Added:
tests/Feature/Api/ContactTranslation/ShowTest.php
- ✅ Added:
tests/Feature/Api/ContactTranslation/StoreTest.php
- ✅ Added:
tests/Feature/Api/ContactTranslation/UpdateTest.php
- ❌ Deleted:
tests/Feature/Api/Contextualization/AnonymousTest.php
- ❌ Deleted:
tests/Feature/Api/Contextualization/DestroyTest.php
- ❌ Deleted:
tests/Feature/Api/Contextualization/IndexTest.php
- ❌ Deleted:
tests/Feature/Api/Contextualization/ShowTest.php
- ❌ Deleted:
tests/Feature/Api/Contextualization/StoreTest.php
- ❌ Deleted:
tests/Feature/Api/Contextualization/UpdateTest.php
- ✅ Added:
tests/Feature/Api/DetailTranslation/AnonymousTest.php
- ✅ Added:
tests/Feature/Api/DetailTranslation/DestroyTest.php
- ✅ Added:
tests/Feature/Api/DetailTranslation/IndexTest.php
- ✅ Added:
tests/Feature/Api/DetailTranslation/ShowTest.php
- ✅ Added:
tests/Feature/Api/DetailTranslation/StoreTest.php
- ✅ Added:
tests/Feature/Api/DetailTranslation/UpdateTest.php
- ❌ Deleted:
tests/Feature/Api/Internationalization/AnonymousTest.php
- ❌ Deleted:
tests/Feature/Api/Internationalization/DestroyTest.php
- ❌ Deleted:
tests/Feature/Api/Internationalization/IndexTest.php
- ❌ Deleted:
tests/Feature/Api/Internationalization/ShowTest.php
- ❌ Deleted:
tests/Feature/Api/Internationalization/StoreTest.php
- ❌ Deleted:
tests/Feature/Api/Internationalization/UpdateTest.php
- ✅ Added:
tests/Feature/Api/ItemTranslation/AnonymousTest.php
- ✅ Added:
tests/Feature/Api/ItemTranslation/DestroyTest.php
- ✅ Added:
tests/Feature/Api/ItemTranslation/IndexTest.php
- ✅ Added:
tests/Feature/Api/ItemTranslation/ShowTest.php
- ✅ Added:
tests/Feature/Api/ItemTranslation/StoreTest.php
- ✅ Added:
tests/Feature/Api/ItemTranslation/UpdateTest.php
- 📝 Modified:
tests/Feature/Api/Location/DestroyTest.php
- 📝 Modified:
tests/Feature/Api/Location/IndexTest.php
- 📝 Modified:
tests/Feature/Api/Location/ShowTest.php
- 📝 Modified:
tests/Feature/Api/Location/StoreTest.php
- 📝 Modified:
tests/Feature/Api/Location/UpdateTest.php
- ✅ Added:
tests/Feature/Api/LocationTranslation/AnonymousTest.php
- ✅ Added:
tests/Feature/Api/LocationTranslation/DestroyTest.php
- ✅ Added:
tests/Feature/Api/LocationTranslation/IndexTest.php
- ✅ Added:
tests/Feature/Api/LocationTranslation/ShowTest.php
- ✅ Added:
tests/Feature/Api/LocationTranslation/StoreTest.php
- ✅ Added:
tests/Feature/Api/LocationTranslation/UpdateTest.php
- 📝 Modified:
tests/Feature/Api/Province/DestroyTest.php
- 📝 Modified:
tests/Feature/Api/Province/IndexTest.php
- 📝 Modified:
tests/Feature/Api/Province/ShowTest.php
- 📝 Modified:
tests/Feature/Api/Province/StoreTest.php
- 📝 Modified:
tests/Feature/Api/Province/UpdateTest.php
- ✅ Added:
tests/Feature/Api/ProvinceTranslation/AnonymousTest.php
- ✅ Added:
tests/Feature/Api/ProvinceTranslation/DestroyTest.php
- ✅ Added:
tests/Feature/Api/ProvinceTranslation/IndexTest.php
- ✅ Added:
tests/Feature/Api/ProvinceTranslation/ShowTest.php
- ✅ Added:
tests/Feature/Api/ProvinceTranslation/StoreTest.php
- ✅ Added:
tests/Feature/Api/ProvinceTranslation/UpdateTest.php
- 📝 Modified:
tests/Unit/Address/FactoryTest.php
- ✅ Added:
tests/Unit/AddressTranslation/FactoryTest.php
- 📝 Modified:
tests/Unit/Contact/FactoryTest.php
- ✅ Added:
tests/Unit/ContactTranslation/FactoryTest.php
- ❌ Deleted:
tests/Unit/Contextualization/FactoryTest.php
- ✅ Added:
tests/Unit/DetailTranslation/FactoryTest.php
- ❌ Deleted:
tests/Unit/Internationalization/FactoryTest.php
- ✅ Added:
tests/Unit/ItemTranslation/FactoryTest.php
- 📝 Modified:
tests/Unit/Location/FactoryTest.php
- ✅ Added:
tests/Unit/LocationTranslation/FactoryTest.php
- 📝 Modified:
tests/Unit/Province/FactoryTest.php
- ✅ Added:
tests/Unit/ProvinceTranslation/FactoryTest.php
Links
This documentation was automatically generated from Git commit data.