İlk commit: Stepstead Godot istemci (4.6 Mobile)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
jts 2026-07-11 11:31:35 +03:00
commit 6a1706051d
346 changed files with 14415 additions and 0 deletions

47
autoload/api.gd Normal file
View file

@ -0,0 +1,47 @@
extends Node
## HTTP istemcisi — Stepstead API'sine istek atar.
signal request_completed(method: String, path: String, status: int, body: Variant)
func request(method: String, path: String, body: Variant = null, auth: bool = true) -> Dictionary:
var http := HTTPRequest.new()
add_child(http)
var url := Config.get_api_base() + path
var headers := ["Content-Type: application/json", "Accept: application/json"]
if auth and Auth.token != "":
headers.append("Authorization: Bearer " + Auth.token)
var method_id: int = HTTPClient.METHOD_GET
match method.to_upper():
"GET": method_id = HTTPClient.METHOD_GET
"POST": method_id = HTTPClient.METHOD_POST
"PUT": method_id = HTTPClient.METHOD_PUT
"DELETE": method_id = HTTPClient.METHOD_DELETE
"PATCH": method_id = HTTPClient.METHOD_PATCH
var body_str := ""
if body != null:
body_str = JSON.stringify(body)
var err := http.request(url, headers, method_id, body_str)
if err != OK:
http.queue_free()
return {"ok": false, "status": 0, "error": "request_failed", "body": null}
var result: Array = await http.request_completed
http.queue_free()
var status: int = result[1]
var raw_body: PackedByteArray = result[3]
var parsed: Variant = null
if raw_body.size() > 0:
var text := raw_body.get_string_from_utf8()
var json := JSON.new()
if json.parse(text) == OK:
parsed = json.data
else:
parsed = text
var ok := status >= 200 and status < 300
request_completed.emit(method.to_upper(), path, status, parsed)
return {"ok": ok, "status": status, "body": parsed}