theseus/app/controllers/public_ids_controller.rb
2025-06-01 16:16:29 -04:00

81 lines
2.6 KiB
Ruby
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

class PublicIdsController < ApplicationController
# GET /id/:public_id
#
skip_after_action :verify_authorized
#
def index
end
def lookup
# The public_id contains the prefix that determines the model class
prefix = params[:id].split("!").first&.downcase
id_part = params[:id].split("!").last
# Find the corresponding model based on the prefix
case prefix
when "mtr"
@record = USPS::IVMTR::Event.find_by_public_id!(params[:id])
@letter = @record.letter
if current_user.admin?
redirect_to inspect_iv_mtr_event_path(@record)
else
if @letter.present?
redirect_to public_letter_path(@letter)
else
redirect_to public_ids_path, alert: "MTR event found, but no associated letter...?"
end
end
when "hackapost", "dev"
@indicium = USPS::Indicium.find(id_part[1...])
@letter = @indicium.letter
if current_user.admin?
redirect_to inspect_indicium_path(@indicium)
else
if @letter.present?
redirect_to public_letter_path(@letter)
else
redirect_to public_ids_path, alert: "indicium found, but no associated letter...?"
end
end
else
# bad hack:
clazzes = ActiveRecord::Base.descendants.select { |c| c.included_modules.include?(PublicIdentifiable) }
clazz = clazzes.find { |c| c.public_id_prefix == prefix }
unless clazz.present?
return search_by_tracking_number(params[:id])
end
@record = clazz.find_by_public_id(params[:id])
unless @record.present?
return redirect_to public_ids_path, alert: "no #{clazz.name} found with public id #{params[:id]}"
end
redirect_to url_for(@record)
# If no matching prefix is found, return 404
# raise ActiveRecord::RecordNotFound, "No record found with public_id: #{params[:id]}"
end
rescue ActiveRecord::RecordNotFound => e
flash[:alert] = "Record not found"
redirect_to public_ids_path
end
private
def search_by_tracking_number(tracking_number)
# Search for warehouse orders by tracking number
warehouse_order = Warehouse::Order.find_by(tracking_number: tracking_number)
if warehouse_order
return redirect_to warehouse_order_path(warehouse_order)
end
lsv = LSV::MarketingShipmentRequest.first_where("{WarehouseTracking Number} = '#{tracking_number.gsub("'", "\\'")}'")
if lsv
return redirect_to show_lsv_path(LSV.slug_for(lsv), lsv.id)
end
# No package found with this tracking number
flash[:alert] = "nothing found at all."
redirect_to public_ids_path
end
end