52 lines
1.2 KiB
Crystal
52 lines
1.2 KiB
Crystal
require "http/client"
|
|
|
|
module Backend::Auth
|
|
extend self
|
|
|
|
struct UsersResponse
|
|
include JSON::Serializable
|
|
|
|
struct Class
|
|
include JSON::Serializable
|
|
|
|
getter name : String
|
|
getter students : Array(User)
|
|
end
|
|
|
|
struct User
|
|
include JSON::Serializable
|
|
|
|
getter username : String
|
|
getter first_name : String
|
|
getter last_name : String
|
|
end
|
|
|
|
getter error : String?
|
|
getter classes : Array(Class)
|
|
getter teachers : Array(User)
|
|
end
|
|
|
|
struct GeneratePdfResponse
|
|
include JSON::Serializable
|
|
|
|
getter error : String?
|
|
getter filename : String?
|
|
end
|
|
|
|
def users : UsersResponse
|
|
resp = HTTP::Client.get(Path[Backend.config.auth.url, "users"].to_s)
|
|
data = UsersResponse.from_json(resp.body)
|
|
raise "Error in response (#{resp.status_code}): #{data.error}" if resp.status_code != 200
|
|
|
|
data
|
|
end
|
|
|
|
def generate_pdf(html : String) : GeneratePdfResponse
|
|
resp = HTTP::Client.post(Path[Backend.config.auth.url, "pdf"].to_s, body: {:html => html}.to_json)
|
|
data = GeneratePdfResponse.from_json(resp.body)
|
|
raise "Error in response (#{resp.status_code}): #{data.error}" if resp.status_code != 201
|
|
|
|
data
|
|
end
|
|
end
|