Subiendo api v2
This commit is contained in:
67
lib/api_web/controllers/downloadpdf_controller.ex
Normal file
67
lib/api_web/controllers/downloadpdf_controller.ex
Normal file
@ -0,0 +1,67 @@
|
||||
defmodule ApiWeb.DownloadpdfController do
|
||||
use ApiWeb, :controller
|
||||
alias Api.Downloadpdf
|
||||
alias File
|
||||
require Logger
|
||||
|
||||
def index(conn, %{"idstudyreport" => idstudyreport}) do
|
||||
# Obtenemos los datos JSON del informe
|
||||
Logger.info("hash antes de llamar a la funcion: #{idstudyreport}")
|
||||
|
||||
json = Downloadpdf.get_report_query(idstudyreport)
|
||||
Logger.debug("resultado query: #{inspect(json)}")
|
||||
|
||||
# Verifica si el JSON es nulo o vacío
|
||||
if json == nil or json == %{} do
|
||||
Logger.error("Error: JSON is None or empty")
|
||||
conn
|
||||
|> send_resp(500, "Error generating PDF")
|
||||
else
|
||||
|
||||
# Codificamos el JSON en una cadena para poder escribirlo en un archivo.
|
||||
json = Jason.encode!(json)
|
||||
|
||||
Envar.load(".env")
|
||||
Envar.require_env_file(".env")
|
||||
|
||||
python_executable = Envar.get("PYTHON_EXECUTABLE")
|
||||
Logger.info("executable -> #{python_executable}")
|
||||
python_script = Envar.get("PYTHON_SCRIPT")
|
||||
Logger.info("script -> #{python_script}")
|
||||
|
||||
command = "#{python_executable} #{python_script}"
|
||||
|
||||
Logger.info("comando -> #{command}")
|
||||
|
||||
port = Port.open({:spawn, command}, [:binary, :use_stdio, :stderr_to_stdout, :exit_status])
|
||||
|
||||
Port.command(port, json <> "\n")
|
||||
|
||||
res = do_flush(<<0>>)
|
||||
# IO.puts(res)
|
||||
case json do
|
||||
{:error, mensaje} ->
|
||||
|
||||
Logger.error("No se encontraron resultados para el reporte -> #{inspect(mensaje)}")
|
||||
conn
|
||||
|> put_status(:not_found)
|
||||
|> html(mensaje)
|
||||
|
||||
_ ->
|
||||
conn
|
||||
|> put_resp_content_type("application/pdf")
|
||||
|> send_resp(200, res)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
defp do_flush(data) do
|
||||
receive do
|
||||
{_port, {:data, d}} ->
|
||||
do_flush(data <> d)
|
||||
_ ->
|
||||
data
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user