batch_preview: accept pre-fetched wiki_data from client
This commit is contained in:
parent
9e72e828f7
commit
f589f58eb5
4 changed files with 24 additions and 14 deletions
|
|
@ -163,6 +163,7 @@ module Api
|
||||||
# Fetches wiki data and suggestions for multiple wiki page names
|
# Fetches wiki data and suggestions for multiple wiki page names
|
||||||
def batch_preview
|
def batch_preview
|
||||||
wiki_pages = params[:wiki_pages]
|
wiki_pages = params[:wiki_pages]
|
||||||
|
wiki_data = params[:wiki_data] || {}
|
||||||
|
|
||||||
unless wiki_pages.is_a?(Array) && wiki_pages.any?
|
unless wiki_pages.is_a?(Array) && wiki_pages.any?
|
||||||
return render json: { error: 'wiki_pages must be a non-empty array' }, status: :unprocessable_entity
|
return render json: { error: 'wiki_pages must be a non-empty array' }, status: :unprocessable_entity
|
||||||
|
|
@ -172,7 +173,7 @@ module Api
|
||||||
wiki_pages = wiki_pages.first(10)
|
wiki_pages = wiki_pages.first(10)
|
||||||
|
|
||||||
results = wiki_pages.map do |wiki_page|
|
results = wiki_pages.map do |wiki_page|
|
||||||
process_wiki_preview(wiki_page, :character)
|
process_wiki_preview(wiki_page, :character, wiki_raw: wiki_data[wiki_page])
|
||||||
end
|
end
|
||||||
|
|
||||||
render json: { results: results }
|
render json: { results: results }
|
||||||
|
|
|
||||||
|
|
@ -154,6 +154,7 @@ module Api
|
||||||
# Fetches wiki data and suggestions for multiple wiki page names
|
# Fetches wiki data and suggestions for multiple wiki page names
|
||||||
def batch_preview
|
def batch_preview
|
||||||
wiki_pages = params[:wiki_pages]
|
wiki_pages = params[:wiki_pages]
|
||||||
|
wiki_data = params[:wiki_data] || {}
|
||||||
|
|
||||||
unless wiki_pages.is_a?(Array) && wiki_pages.any?
|
unless wiki_pages.is_a?(Array) && wiki_pages.any?
|
||||||
return render json: { error: 'wiki_pages must be a non-empty array' }, status: :unprocessable_entity
|
return render json: { error: 'wiki_pages must be a non-empty array' }, status: :unprocessable_entity
|
||||||
|
|
@ -163,7 +164,7 @@ module Api
|
||||||
wiki_pages = wiki_pages.first(10)
|
wiki_pages = wiki_pages.first(10)
|
||||||
|
|
||||||
results = wiki_pages.map do |wiki_page|
|
results = wiki_pages.map do |wiki_page|
|
||||||
process_wiki_preview(wiki_page, :summon)
|
process_wiki_preview(wiki_page, :summon, wiki_raw: wiki_data[wiki_page])
|
||||||
end
|
end
|
||||||
|
|
||||||
render json: { results: results }
|
render json: { results: results }
|
||||||
|
|
|
||||||
|
|
@ -154,6 +154,7 @@ module Api
|
||||||
# Fetches wiki data and suggestions for multiple wiki page names
|
# Fetches wiki data and suggestions for multiple wiki page names
|
||||||
def batch_preview
|
def batch_preview
|
||||||
wiki_pages = params[:wiki_pages]
|
wiki_pages = params[:wiki_pages]
|
||||||
|
wiki_data = params[:wiki_data] || {}
|
||||||
|
|
||||||
unless wiki_pages.is_a?(Array) && wiki_pages.any?
|
unless wiki_pages.is_a?(Array) && wiki_pages.any?
|
||||||
return render json: { error: 'wiki_pages must be a non-empty array' }, status: :unprocessable_entity
|
return render json: { error: 'wiki_pages must be a non-empty array' }, status: :unprocessable_entity
|
||||||
|
|
@ -163,7 +164,7 @@ module Api
|
||||||
wiki_pages = wiki_pages.first(10)
|
wiki_pages = wiki_pages.first(10)
|
||||||
|
|
||||||
results = wiki_pages.map do |wiki_page|
|
results = wiki_pages.map do |wiki_page|
|
||||||
process_wiki_preview(wiki_page, :weapon)
|
process_wiki_preview(wiki_page, :weapon, wiki_raw: wiki_data[wiki_page])
|
||||||
end
|
end
|
||||||
|
|
||||||
render json: { results: results }
|
render json: { results: results }
|
||||||
|
|
|
||||||
|
|
@ -9,25 +9,32 @@ module BatchPreviewable
|
||||||
# Process a single wiki page and return preview data
|
# Process a single wiki page and return preview data
|
||||||
# @param wiki_page [String] The wiki page name to fetch
|
# @param wiki_page [String] The wiki page name to fetch
|
||||||
# @param entity_type [Symbol] The type of entity (:character, :weapon, :summon)
|
# @param entity_type [Symbol] The type of entity (:character, :weapon, :summon)
|
||||||
|
# @param wiki_raw [String, nil] Pre-fetched wiki text (from client-side fetch)
|
||||||
# @return [Hash] Preview data including status, suggestions, and errors
|
# @return [Hash] Preview data including status, suggestions, and errors
|
||||||
def process_wiki_preview(wiki_page, entity_type)
|
def process_wiki_preview(wiki_page, entity_type, wiki_raw: nil)
|
||||||
result = {
|
result = {
|
||||||
wiki_page: wiki_page,
|
wiki_page: wiki_page,
|
||||||
status: 'success'
|
status: 'success'
|
||||||
}
|
}
|
||||||
|
|
||||||
begin
|
begin
|
||||||
# Fetch wiki content
|
# Use provided wiki_raw or fetch from wiki
|
||||||
wiki = Granblue::Parsers::Wiki.new
|
wiki_text = if wiki_raw.present?
|
||||||
wiki_text = wiki.fetch(wiki_page)
|
wiki_raw
|
||||||
|
else
|
||||||
|
wiki = Granblue::Parsers::Wiki.new
|
||||||
|
wiki.fetch(wiki_page)
|
||||||
|
end
|
||||||
|
|
||||||
# Handle redirects
|
# Handle redirects (only if we fetched server-side)
|
||||||
redirect_match = wiki_text.match(/#REDIRECT \[\[(.*?)\]\]/)
|
if wiki_raw.blank?
|
||||||
if redirect_match
|
redirect_match = wiki_text.match(/#REDIRECT \[\[(.*?)\]\]/)
|
||||||
redirect_target = redirect_match[1]
|
if redirect_match
|
||||||
result[:redirected_from] = wiki_page
|
redirect_target = redirect_match[1]
|
||||||
result[:wiki_page] = redirect_target
|
result[:redirected_from] = wiki_page
|
||||||
wiki_text = wiki.fetch(redirect_target)
|
result[:wiki_page] = redirect_target
|
||||||
|
wiki_text = wiki.fetch(redirect_target)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
result[:wiki_raw] = wiki_text
|
result[:wiki_raw] = wiki_text
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue