From 99860771d3c8063cc70c394563caf11f799ce579 Mon Sep 17 00:00:00 2001 From: William Le Date: Fri, 31 Oct 2025 14:51:37 +0800 Subject: [PATCH 1/3] feat(solution2/pms): Add file upload --- drivers/solutions2/pms.cr | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/solutions2/pms.cr b/drivers/solutions2/pms.cr index cd1e064f97..3ff89fa74b 100644 --- a/drivers/solutions2/pms.cr +++ b/drivers/solutions2/pms.cr @@ -171,6 +171,15 @@ class PMS < PlaceOS::Driver request("GET", "/api/parking/full-notifications") end + def upload_vehicle_documents(vehicle_id : String, files : Array(NamedTuple(file_name: String, base64: String))) + payload = { + "Files" => files.map { |f| {"FileName" => f[:file_name], "Base64" => f[:base64]} } + }.to_json + + request("POST", "/api/vehicles/upload-documents/#{vehicle_id}") + end + + private def request(method : String, resource : String, payload : String? = nil, params : Hash(String, String?) | URI::Params = URI::Params.new) headers = get_headers("application/x-www-form-urlencoded") logger.debug { {msg: "#{method} #{resource}:", headers: headers.to_json, payload: payload} } if @debug_payload From 9e47a41a1a566da069873839594ce3837d3d1ffa Mon Sep 17 00:00:00 2001 From: William Le Date: Fri, 31 Oct 2025 15:11:26 +0800 Subject: [PATCH 2/3] fix(solution2/pms): include payload --- drivers/solutions2/pms.cr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/solutions2/pms.cr b/drivers/solutions2/pms.cr index 3ff89fa74b..0552d8e1ea 100644 --- a/drivers/solutions2/pms.cr +++ b/drivers/solutions2/pms.cr @@ -176,7 +176,7 @@ class PMS < PlaceOS::Driver "Files" => files.map { |f| {"FileName" => f[:file_name], "Base64" => f[:base64]} } }.to_json - request("POST", "/api/vehicles/upload-documents/#{vehicle_id}") + request("POST", "/api/vehicles/upload-documents/#{vehicle_id}", payload) end From 64330f18189aa8c0af7c9674dba2f4097bc04994 Mon Sep 17 00:00:00 2001 From: William Le Date: Mon, 3 Nov 2025 18:52:24 +0800 Subject: [PATCH 3/3] fix(solution2/pms): include content-length --- drivers/solutions2/pms.cr | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/solutions2/pms.cr b/drivers/solutions2/pms.cr index 0552d8e1ea..276a8afb28 100644 --- a/drivers/solutions2/pms.cr +++ b/drivers/solutions2/pms.cr @@ -171,15 +171,21 @@ class PMS < PlaceOS::Driver request("GET", "/api/parking/full-notifications") end - def upload_vehicle_documents(vehicle_id : String, files : Array(NamedTuple(file_name: String, base64: String))) + def upload_vehicle_documents(vehicle_id : String, file_name : String, file_in_base64 : String) + method = "POST" + resource = "/api/vehicles/upload-documents/#{vehicle_id}" payload = { - "Files" => files.map { |f| {"FileName" => f[:file_name], "Base64" => f[:base64]} } + "Files" => [{"FileName" => file_name, "Base64" => file_in_base64}] }.to_json + headers = get_headers + headers["Content-Length"] = payload.bytesize.to_s - request("POST", "/api/vehicles/upload-documents/#{vehicle_id}", payload) + logger.debug { {msg: "#{method} #{resource}:", headers: headers.to_json, payload: payload} } if @debug_payload + response = http(method: method, path: resource, headers: headers, body: payload) + logger.debug { "RESPONSE code: #{response.status_code}, body: #{response.body}" } if @debug_payload + raise "failed to #{method} #{resource}, code #{response.status_code}, body: #{response.body}" unless response.success? end - private def request(method : String, resource : String, payload : String? = nil, params : Hash(String, String?) | URI::Params = URI::Params.new) headers = get_headers("application/x-www-form-urlencoded") logger.debug { {msg: "#{method} #{resource}:", headers: headers.to_json, payload: payload} } if @debug_payload