mentorenwahl/backend/src/backend/auth.cr

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