Skip to content

Commit

Permalink
api update
Browse files Browse the repository at this point in the history
  • Loading branch information
cecoeco committed Aug 2, 2024
1 parent dbd4af8 commit 9f106b9
Show file tree
Hide file tree
Showing 5 changed files with 110 additions and 81 deletions.
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name = "PRISMA"
uuid = "7b67a8d2-c4f5-4933-b91c-0fc427024db5"
authors = ["Ceco Elijah Maples <mapleselijah9@gmail.com>", "PRISMA.jl Contributors"]
version = "0.0.2"
version = "0.0.3"

[deps]
DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
Expand Down
1 change: 1 addition & 0 deletions app/backend/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ RUN julia -e 'using Pkg;\
Pkg.add([\
"CSV",\
"DataFrames",\
"Graphviz_jll",\
"HTMLTables",\
"HTTP",\
"JSON3",\
Expand Down
101 changes: 64 additions & 37 deletions app/backend/app.jl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using CSV, DataFrames, HTMLTables, HTTP, JSON3, JSONTables, Oxygen, PRISMA
using CSV, DataFrames, Graphviz_jll, HTMLTables, HTTP, JSON3, JSONTables, Oxygen, PRISMA

const ALLOWED_ORIGINS::Vector{Pair{String,String}} = [
"Access-Control-Allow-Origin" => "*"
Expand Down Expand Up @@ -33,87 +33,114 @@ Oxygen.post("/checklist/generate") do req::HTTP.Request
clist, classes="checklist", css=false, editable=true, footer=false
)

response_body::Dict{String,String} = Dict{String,String}(
"title" => clist_title,
"checklist" => clist_table
)

return Oxygen.json(status=200, response_body)
return Oxygen.json(status=200, Dict{String,String}("title" => clist_title, "checklist" => clist_table))
catch error
response_body_error::Dict{String,String} = Dict{String,String}(
"error" => "error generating checklist: $error"
)

return Oxygen.json(status=500, response_body_error)
return Oxygen.json(status=500, Dict{String,String}("error" => "error generating checklist: $error"))
end
end

Oxygen.post("/checklist/export") do req::HTTP.Request
try
checklists::JSON3.Object = JSON3.read(String(req.body))

response_body_csv_s::Dict{String,String} = Dict{String,String}()
csv_files::Dict{String,String} = Dict{String,String}()
for checklist in checklists["checklists"]
io::IO = IOBuffer()
CSV.write(io, HTMLTables.read(checklist["checklist"], DataFrame))
response_body_csv_s["$(checklist["title"]).csv"] = String(take!(io))
csv_files["$(checklist["title"]).csv"] = String(take!(io))
end

return Oxygen.json(status=200, response_body_csv_s)
return Oxygen.json(status=200, csv_files)
catch error
response_body_error::Dict{String,String} = Dict{String,String}(
"error" => "error exporting checklists: $error"
)
return Oxygen.json(status=500, Dict{String,String}("error" => "error exporting checklists: $error"))
end
end

function bytes(fd::PRISMA.FlowDiagram, format::AbstractString="svg")
temp_gv::String = Base.Filesystem.tempname() * ".gv"

Base.Filesystem.write(temp_gv, fd.dot)

return Oxygen.json(status=500, response_body_error)
try
return Base.read(`$(Graphviz_jll.neato()) $temp_gv -T$format`, String)
catch error
Base.rethrow(error)
finally
Base.rm(temp_gv, force=true)
end
end

Oxygen.post("/flow_diagram/generate") do req::HTTP.Request
try
flow_diagram_options::JSON3.Object = JSON3.read(String(req.body))

flow_diagram_gv::PRISMA.FlowDiagram = PRISMA.flow_diagram(
flow_diagram_dot::PRISMA.FlowDiagram = PRISMA.flow_diagram(
DataFrame(JSONTables.jsontable(flow_diagram_options["data"])),

background_color = flow_diagram_options["background_color"],
background_color = "$(flow_diagram_options["background_color"])",
grayboxes = flow_diagram_options["grayboxes"],
grayboxes_color = flow_diagram_options["grayboxes_color"],
grayboxes_color = "$(flow_diagram_options["grayboxes_color"])",
top_boxes = flow_diagram_options["top_boxes"],
top_boxes_borders = flow_diagram_options["top_boxes_borders"],
top_boxes_color = flow_diagram_options["top_boxes_color"],
top_boxes_color = "$(flow_diagram_options["top_boxes_color"])",
side_boxes = flow_diagram_options["side_boxes"],
side_boxes_borders = flow_diagram_options["side_boxes_borders"],
side_boxes_color = flow_diagram_options["side_boxes_color"],
side_boxes_color = "$(flow_diagram_options["side_boxes_color"])",
previous_studies = flow_diagram_options["previous_studies"],
other_methods = flow_diagram_options["other_methods"],
borders = flow_diagram_options["borders"],
border_style = flow_diagram_options["border_style"],
border_width = flow_diagram_options["border_width"],
border_color = flow_diagram_options["border_color"],
border_color = "$(flow_diagram_options["border_color"])",
font = flow_diagram_options["font"],
font_color = flow_diagram_options["font_color"],
font_color = "$(flow_diagram_options["font_color"])",
font_size = flow_diagram_options["font_size"],
arrow_head = flow_diagram_options["arrow_head"],
arrow_size = flow_diagram_options["arrow_size"],
arrow_color = flow_diagram_options["arrow_color"],
arrow_color = "$(flow_diagram_options["arrow_color"])",
arrow_width = flow_diagram_options["arrow_width"]
)

tempname_svg::String = Base.Filesystem.tempname() * ".svg"
PRISMA.flow_diagram_save(tempname_svg, flow_diagram_gv)
svg_string::String = Base.read(tempname_svg, String)
Base.Filesystem.rm(tempname_svg)
return Oxygen.json(status=200, Dict{String,String}("svg" => bytes(flow_diagram_dot, "svg")))
catch error
return Oxygen.json(status=500, Dict{String,String}("error" => "error generating flow diagram: $error"))
end
end

response_body_svg::Dict{String,String} = Dict{String,String}("svg" => svg_string)
Oxygen.post("/flow_diagram/export") do req::HTTP.Request
try
flow_diagram_options::JSON3.Object = JSON3.read(String(req.body))

return Oxygen.json(status=200, response_body_svg)
catch error
response_body_error::Dict{String,String} = Dict{String,String}(
"error" => "error generating flow diagram: $error"
flow_diagram_dot::PRISMA.FlowDiagram = PRISMA.flow_diagram(
DataFrame(JSONTables.jsontable(flow_diagram_options["data"])),

background_color = "$(flow_diagram_options["background_color"])",
grayboxes = flow_diagram_options["grayboxes"],
grayboxes_color = "$(flow_diagram_options["grayboxes_color"])",
top_boxes = flow_diagram_options["top_boxes"],
top_boxes_borders = flow_diagram_options["top_boxes_borders"],
top_boxes_color = "$(flow_diagram_options["top_boxes_color"])",
side_boxes = flow_diagram_options["side_boxes"],
side_boxes_borders = flow_diagram_options["side_boxes_borders"],
side_boxes_color = "$(flow_diagram_options["side_boxes_color"])",
previous_studies = flow_diagram_options["previous_studies"],
other_methods = flow_diagram_options["other_methods"],
borders = flow_diagram_options["borders"],
border_style = flow_diagram_options["border_style"],
border_width = flow_diagram_options["border_width"],
border_color = "$(flow_diagram_options["border_color"])",
font = flow_diagram_options["font"],
font_color = "$(flow_diagram_options["font_color"])",
font_size = flow_diagram_options["font_size"],
arrow_head = flow_diagram_options["arrow_head"],
arrow_size = flow_diagram_options["arrow_size"],
arrow_color = "$(flow_diagram_options["arrow_color"])",
arrow_width = flow_diagram_options["arrow_width"]
)

return Oxygen.json(status=500, response_body_error)
return Oxygen.json(status=200, Dict{String,String}("flow_diagram" => bytes(flow_diagram_dot, flow_diagram_options["format"])))
catch error
return Oxygen.json(status=500, Dict{String,String}("error" => "error generating flow diagram: $error"))
end
end

Expand Down
Loading

0 comments on commit 9f106b9

Please sign in to comment.