Skip to content

Commit b7f3f57

Browse files
committed
feat(verses): enable support for multi-ayah tafsir
via verse ID range join - Introduced support for multi-ayah tafsir loading in VerseFinder - Added load_tafsirs method to join tafsirs based on verse ID range (start_verse_id to end_verse_id) - Ensured single-ayah tafsir continues to work as expected - Maintains backward compatibility while enabling richer tafsir rendering across APIs like /v4/verses/by_key
1 parent 665f166 commit b7f3f57

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

app/finders/verse_finder.rb

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ def load_verses(language_code)
2828
load_translations
2929
load_words(language_code)
3030
load_audio
31+
load_tafsirs # ← add this line
32+
3133
translations_order = params[:translations].present? ? ',translations.priority ASC' : ''
3234

3335
@results.order("verses.verse_index ASC, words.position ASC, word_translations.priority ASC #{translations_order}".strip)
@@ -84,6 +86,23 @@ def load_audio
8486
end
8587
end
8688

89+
# Load tafsirs that span the current verse (single-ayah OR multi-ayah)
90+
def load_tafsirs
91+
return unless params[:tafsirs].present?
92+
93+
tafsir_ids = Array(params[:tafsirs]).map(&:to_i)
94+
95+
@results = @results
96+
.joins(<<~SQL)
97+
LEFT JOIN tafsirs
98+
ON tafsirs.start_verse_id <= verses.id
99+
AND (tafsirs.end_verse_id IS NULL OR tafsirs.end_verse_id >= verses.id)
100+
SQL
101+
.where(tafsirs: { resource_content_id: tafsir_ids })
102+
.eager_load(:tafsirs)
103+
end
104+
105+
87106
def set_offset
88107
if offset.present?
89108
@results = @results.offset(offset)

0 commit comments

Comments
 (0)