Pixel-Composer/scripts/FirebaseFirestoreMainFunctions/FirebaseFirestoreMainFunctions.gml
2023-11-14 20:29:11 +07:00

321 lines
9 KiB
Text

function RESTFirebaseFirestore_Collection_Add(path,json)
{
if(!FirebaseREST_Firestore_path_isCollection(path))
{show_debug_message("error: path not correspond to collection") exit}
var listener = FirebaseREST_asyncFunction_Firestore(
"FirebaseFirestore_Collection_Add",
Obj_FirebaseREST_Listener_Once_Firestore,
FirebaseREST_Firestore_getURL(path),
"POST",
FirebaseREST_Firestore_headerToken(),
FirebaseREST_Firestore_jsonEncode(json));
listener.path = path
return listener
}
function RESTFirebaseFirestore_Collection_Read(path)
{
if(!FirebaseREST_Firestore_path_isCollection(path))
{show_debug_message("error: path not correspond to collection") exit}
var listener = FirebaseREST_asyncFunction_Firestore(
"FirebaseFirestore_Collection_Read",
Obj_FirebaseREST_Listener_Once_Firestore,
FirebaseREST_Firestore_getURL(path),
"GET",
FirebaseREST_Firestore_headerToken(),
"");
listener.path = path
return listener
}
function RESTFirebaseFirestore_Collection_Listener(path)
{
if(!FirebaseREST_Firestore_path_isCollection(path))
{show_debug_message("error: path not correspond to collection") exit}
var listener = FirebaseREST_asyncFunction_Firestore(
"FirebaseFirestore_Collection_Listener",
Obj_FirebaseREST_Listener_On_firestore_collection,
FirebaseREST_Firestore_getURL(path),
"GET",
FirebaseREST_Firestore_headerToken(),
"");
listener.path = path
return listener
}
/*
function RESTFirebaseFirestore_Collection_Query(
path,
where_operation,where_ref,where_value,
where_operation2,where_ref2,where_value2,
orderBy_direction,orderBy_field,
start,
end_,
limit,
)
{
Firestore_Query_ASCENDING
Firestore_Query_DESCENDING
Firestore_Query_equal
Firestore_Query_greater_than
Firestore_Query_greater_than_or_equal
Firestore_Query_less_than
Firestore_Query_less_than_or_equal
}
*/
function RESTFirebaseFirestore_Collection_Query(struct)
{
var path = struct._path
var start = struct._start
var end_ = struct._end
var limit = struct._limit
if(!FirebaseREST_Firestore_path_isCollection(path))
{show_debug_message("error: path not correspond to collection") exit}
var original_ref = path
//https://firebase.google.com/docs/firestore/reference/rest/v1/StructuredQuery
/////////////////
var collection = FirebaseFirestore_Path_GetName(path,0)
//From
var list_from = ds_list_create()
var map_collector = ds_map_create()
ds_map_add(map_collector,"collectionId",collection)
ds_map_add(map_collector,"allDescendants","false")
//var map_count = json_decode(path)
//var size = ds_map_size(map_count)
//ds_map_destroy(map_count)
//if(true)//if(size mod 2 != 0)//unpair//collection
{
ds_list_add(list_from,map_collector)
ds_list_mark_as_map(list_from,0)
}
path = FirebaseFirestore_Path_Back(path,1)
//Where
var map_where = ds_map_create()
var map_compositeFilter = ds_map_create()
ds_map_add(map_compositeFilter,"op","AND")
var list_filters = ds_list_create()
if(!is_undefined(struct._operations))
for(var a = 0 ; a < array_length(struct._operations) ; a++)//if(!is_undefined(struct._operations[0]))
{
var map_FieldFilter = ds_map_create()
ds_map_add_map(map_FieldFilter,"field",FirebaseREST_firestore_fieldReference(struct._operations[a].path))
ds_map_add(map_FieldFilter,"op",struct._operations[a].operation)
ds_map_add_map(map_FieldFilter,"value",FirebaseREST_firestore_value(struct._operations[a].value))
var map_toList = ds_map_create()
ds_map_add_map(map_toList,"fieldFilter",map_FieldFilter)
ds_list_add(list_filters,map_toList)
}
for(var a = 0 ; a < ds_list_size(list_filters) ; a++)
ds_list_mark_as_map(list_filters,a)
ds_map_add_list(map_compositeFilter,"filters",list_filters)
ds_map_add_map(map_where,"compositeFilter",map_compositeFilter)
/////////////////////////////////////////// orderBy
var list_orderBy = ds_list_create()
if(!is_undefined(struct._orderBy_direction) and !is_undefined(struct._orderBy_field))
{
var map_orderList = ds_map_create()
ds_map_add_map(map_orderList,"field",FirebaseREST_firestore_fieldReference(struct._orderBy_field))
if(!is_undefined(struct._orderBy_direction))
ds_map_add(map_orderList,"direction",struct._orderBy_direction)
ds_list_add(list_orderBy,map_orderList)
ds_list_mark_as_map(list_orderBy,0)
}
////////////////////////////////////////// startAt
var map_startAt
if(is_undefined(start))
map_startAt = ds_map_create()
else
map_startAt = FirebaseREST_firestore_cursor(start,1)
////////////////////////////////////////// endAt
var map_endAt
if(is_undefined(end_))
map_endAt = ds_map_create()
else
map_endAt = FirebaseREST_firestore_cursor(end_,0)
///////map_structuredQuery
var map_structuredQuery = ds_map_create()
ds_map_add_list(map_structuredQuery,"from",list_from)
if(ds_map_size(map_where))
ds_map_add_map(map_structuredQuery,"where",map_where)
else
ds_map_destroy(map_where)
if(ds_list_size(list_orderBy))
ds_map_add_list(map_structuredQuery,"orderBy",list_orderBy)
else
ds_list_destroy(list_orderBy)
if(ds_map_size(map_startAt))
ds_map_add_map(map_structuredQuery,"startAt",map_startAt)
else
ds_map_destroy(map_startAt)
if(ds_map_size(map_endAt))
ds_map_add_map(map_structuredQuery,"endAt",map_endAt)
else
ds_map_destroy(map_endAt)
//limit
if(!is_undefined(limit))
ds_map_add(map_structuredQuery,"limit",limit)
///////requestBody
var map_requestBody = ds_map_create()
ds_map_add_map(map_requestBody,"structuredQuery",map_structuredQuery)
var json = json_encode(map_requestBody)
ds_map_destroy(map_requestBody)
var listener = FirebaseREST_asyncFunction_Firestore(
"FirebaseFirestore_Collection_Query",
Obj_FirebaseREST_Listener_Once_Firestore,
FirebaseREST_Firestore_getURL(path),
"POST",
FirebaseREST_Firestore_headerToken(),
json)
listener.url += ":runQuery"
listener.path = original_ref
return listener
}
function RESTFirebaseFirestore_Document_Delete(path)
{
if(!FirebaseREST_Firestore_path_isDocument(path))
{show_debug_message("error: path not correspond to document") exit}
var listener = FirebaseREST_asyncFunction_Firestore(
"FirebaseFirestore_Document_Delete",
Obj_FirebaseREST_Listener_Once_Firestore,
FirebaseREST_Firestore_getURL(path),
"DELETE",
FirebaseREST_Firestore_headerToken(),
"")
listener.path = path
return listener
}
function RESTFirebaseFirestore_Document_Read(path)
{
if(!FirebaseREST_Firestore_path_isDocument(path))
{show_debug_message("error: path not correspond to document") exit}
var listener = FirebaseREST_asyncFunction_Firestore(
"FirebaseFirestore_Document_Read",
Obj_FirebaseREST_Listener_Once_Firestore,
FirebaseREST_Firestore_getURL(path),
"GET",
FirebaseREST_Firestore_headerToken(),
"")
listener.path = path
return listener
}
function RESTFirebaseFirestore_Document_Listener(path)
{
if(!FirebaseREST_Firestore_path_isDocument(path))
{show_debug_message("error: path not correspond to document") exit}
var listener = FirebaseREST_asyncFunction_Firestore(
"FirebaseFirestore_Document_Listener",
Obj_FirebaseREST_Listener_On_firestore_document,
FirebaseREST_Firestore_getURL(path),
"GET",
FirebaseREST_Firestore_headerToken(),
"")
listener.path = path
return listener
}
/*Deprecated due if exists not override the document, and SDKs do it.....
function RESTFirebaseFirestore_Document_Set(path,json)
{
if(!FirebaseREST_Firestore_path_isDocument(path))
{show_debug_message("error: path not correspond to document") exit}
var original_ref = path
var doc_name = FirebaseFirestore_Path_GetName(path,0)
var ref_ = FirebaseFirestore_Path_Back(path,1)
var listener = FirebaseREST_asyncFunction_Firestore(
"FirebaseFirestore_Document_Set",
Obj_FirebaseREST_Listener_Once_Firestore,
FirebaseREST_Firestore_getURL(ref_),
"POST",
FirebaseREST_Firestore_headerToken(),
FirebaseREST_Firestore_jsonEncode(json),
)
listener.url += "?documentId=" + doc_name
listener.path = original_ref
return listener
}
*/
function RESTFirebaseFirestore_Document_Set(path,json)
{
if(!FirebaseREST_Firestore_path_isDocument(path))
{show_debug_message("error: path not correspond to document") exit}
var listener = FirebaseREST_asyncFunction_Firestore(
"RESTFirebaseFirestore_Document_Set",
Obj_FirebaseREST_Listener_Once_Firestore,
FirebaseREST_Firestore_getURL(path),
"PATCH",
FirebaseREST_Firestore_headerToken(),
FirebaseREST_Firestore_jsonEncode(json))
listener.path = path
return listener
}
function RESTFirebaseFirestore_Document_Update(path,json)
{
if(!FirebaseREST_Firestore_path_isDocument(path))
{show_debug_message("error: path not correspond to document") exit}
var listener = FirebaseREST_asyncFunction_Firestore(
"RESTFirebaseFirestore_Document_Update",
Obj_FirebaseREST_Listener_Once_Firestore,
FirebaseREST_Firestore_getURL(path),
"PATCH",
FirebaseREST_Firestore_headerToken(),
FirebaseREST_Firestore_jsonEncode(json)
)
listener.url += FriebaseREST_Firestore_urlUpdateMask(json)
show_debug_message(listener.url)
listener.path = path
return listener
}