- Add utils/text_normalizer.py providing robust Arabic and Persian orthographic normalization (diacritics/tashkeel removal, unification of Alef variants, Yeh/Alef Maksura, Kaf, Teh Marbuta, Waw Hamza, Tatweel, and digit normalization).
- Implement recursive text extraction from multilingual JSON structures and models.
- Add normalized_text shadow column across Hadis, HadisCorrection, HadisInterpretation, Transmitters, BookReference, and HadisCategory models with automated save-time synchronization.
- Apply database migrations (0048 and 0049).
- Add populate_normalized_search management command for backfilling existing records.
- Update search querysets in hadis, transmitter, book reference, and category views to filter using normalized text queries.
- Add comprehensive documentation in docs/ARABIC_SEARCH_NORMALIZATION_GUIDE.md.
- Add request-level user bookmark memoization in BookmarkStatusSerializer to eliminate redundant queries across all lists
- Optimize BookReferenceSyncView and BookReference.authors caching (reduced queries from 185 to 10)
- Add multi-level prefetch_related for references and images in HadisMainListView (reduced queries from 109 to 6)
- Add incremental sync support (updated_after/since) in HadisSyncView
- Add select_related for language in BookListView (reduced queries from 35 to 18)
- Annotate episode count and cache effective_thumbnail in podcast and video playlist views (reduced queries from 22/17 to 4)
- Prefetch categories with annotated article counts in ArticleListAPIView (reduced queries from 41 to 3)
- Scale Gunicorn workers/threads to 4w/4t (16 concurrency) with gthread in docker-compose.prod.yml
- Eliminate N+1 queries in hadis serializers by using in-memory prefetch cache instead of .first() and .order_by()
- Add select_related for hadis and category in HadisSyncView prefetches
- Apply cached_view (Redis 2h + Accept-Language) to HadisSyncView and public hadis endpoints
- Enable GZipMiddleware in Django settings to compress large API responses
update corrections , interpretations and original text models to connect to new logic of our references models
made a new api for detail pages of these references
- Introduced a new API endpoint to retrieve narrator layers associated with a specific hadis.
- Enhanced the HadisLayersView to fetch and return unique narrator layers, including their names, slugs, and descriptions.
- Updated serializers to include the slug in the TransmitterShortSerializer and added a new NarratorLayerSerializer for layer details.
- Improved response structure and Swagger documentation for better clarity on usage and expected outputs.