340 lines
7.8 KiB
TypeScript
340 lines
7.8 KiB
TypeScript
import type { key_val } from '$lib/stores/ae_stores';
|
|
import { post_object } from './api_post_object';
|
|
import { patch_object } from './api_patch_object';
|
|
import { delete_object } from './api_delete_object';
|
|
|
|
const JSON_PRETTY_SPACES = 2;
|
|
|
|
function serialize_json_field_pretty(value: unknown) {
|
|
if (value === null || value === undefined) return value;
|
|
|
|
if (typeof value === 'string') {
|
|
try {
|
|
return JSON.stringify(JSON.parse(value), null, JSON_PRETTY_SPACES);
|
|
} catch {
|
|
return value;
|
|
}
|
|
}
|
|
|
|
return JSON.stringify(value, null, JSON_PRETTY_SPACES);
|
|
}
|
|
|
|
/**
|
|
* --- POST (CREATE) WRAPPERS ---
|
|
*/
|
|
|
|
interface CreateAeObjV3Params {
|
|
api_cfg: any;
|
|
obj_type: string;
|
|
fields: key_val;
|
|
params?: key_val;
|
|
log_lvl?: number;
|
|
}
|
|
|
|
export async function create_ae_obj({
|
|
api_cfg,
|
|
obj_type,
|
|
fields,
|
|
params = {},
|
|
log_lvl = 0
|
|
}: CreateAeObjV3Params) {
|
|
const endpoint = `/v3/crud/${obj_type}/`;
|
|
|
|
if (log_lvl) {
|
|
console.log('*** create_ae_obj ***');
|
|
console.log('Endpoint:', endpoint);
|
|
console.log('Fields:', fields);
|
|
}
|
|
|
|
// Standard Aether Pattern: Auto-serialize any key ending in _json
|
|
const cleaned_fields = { ...fields };
|
|
for (const key in cleaned_fields) {
|
|
if (key.endsWith('_json') && cleaned_fields[key] !== null) {
|
|
if (log_lvl) console.log(`Auto-serializing field: ${key}`);
|
|
cleaned_fields[key] = serialize_json_field_pretty(
|
|
cleaned_fields[key]
|
|
);
|
|
}
|
|
}
|
|
|
|
if (log_lvl) {
|
|
console.log('Cleaned Fields (Final):', cleaned_fields);
|
|
}
|
|
|
|
return await post_object({
|
|
api_cfg,
|
|
endpoint,
|
|
params,
|
|
data: cleaned_fields,
|
|
log_lvl
|
|
});
|
|
}
|
|
|
|
interface CreateNestedObjV3Params {
|
|
api_cfg: any;
|
|
parent_type?: string;
|
|
parent_id?: string;
|
|
child_type?: string;
|
|
// Aliases for migration
|
|
for_obj_type?: string;
|
|
for_obj_id?: string;
|
|
obj_type?: string;
|
|
|
|
fields: key_val;
|
|
params?: key_val;
|
|
log_lvl?: number;
|
|
}
|
|
|
|
export async function create_nested_obj({
|
|
api_cfg,
|
|
parent_type,
|
|
parent_id,
|
|
child_type,
|
|
for_obj_type,
|
|
for_obj_id,
|
|
obj_type,
|
|
fields,
|
|
params = {},
|
|
log_lvl = 0
|
|
}: CreateNestedObjV3Params) {
|
|
const p_type = parent_type || for_obj_type;
|
|
const p_id = parent_id || for_obj_id;
|
|
const c_type = child_type || obj_type;
|
|
|
|
const endpoint = `/v3/crud/${p_type}/${p_id}/${c_type}/`;
|
|
|
|
if (log_lvl) {
|
|
console.log('*** create_nested_obj ***');
|
|
console.log('Endpoint:', endpoint);
|
|
console.log('Fields:', fields);
|
|
}
|
|
|
|
// Standard Aether Pattern: Auto-serialize any key ending in _json
|
|
const cleaned_fields = { ...fields };
|
|
for (const key in cleaned_fields) {
|
|
if (key.endsWith('_json') && cleaned_fields[key] !== null) {
|
|
cleaned_fields[key] = serialize_json_field_pretty(
|
|
cleaned_fields[key]
|
|
);
|
|
}
|
|
}
|
|
|
|
return await post_object({
|
|
api_cfg,
|
|
endpoint,
|
|
params,
|
|
data: cleaned_fields,
|
|
log_lvl
|
|
});
|
|
}
|
|
|
|
/**
|
|
* --- PATCH (UPDATE) WRAPPERS ---
|
|
*/
|
|
|
|
interface UpdateAeObjV3Params {
|
|
api_cfg: any;
|
|
obj_type: string;
|
|
obj_id: string;
|
|
fields: key_val;
|
|
params?: key_val;
|
|
log_lvl?: number;
|
|
}
|
|
|
|
export async function update_ae_obj({
|
|
api_cfg,
|
|
obj_type,
|
|
obj_id,
|
|
fields,
|
|
params = {},
|
|
log_lvl = 0
|
|
}: UpdateAeObjV3Params) {
|
|
const endpoint = `/v3/crud/${obj_type}/${obj_id}`;
|
|
|
|
if (log_lvl) {
|
|
console.log('*** update_ae_obj ***');
|
|
console.log('Endpoint:', endpoint);
|
|
console.log('Fields:', fields);
|
|
}
|
|
|
|
// Standard Aether Pattern: Auto-serialize any key ending in _json
|
|
const cleaned_fields = { ...fields };
|
|
for (const key in cleaned_fields) {
|
|
if (key.endsWith('_json') && cleaned_fields[key] !== null) {
|
|
if (log_lvl > 1) console.log(`Auto-serializing field: ${key}`);
|
|
cleaned_fields[key] = serialize_json_field_pretty(
|
|
cleaned_fields[key]
|
|
);
|
|
}
|
|
}
|
|
|
|
return await patch_object({
|
|
api_cfg,
|
|
endpoint,
|
|
params,
|
|
data: cleaned_fields,
|
|
log_lvl
|
|
});
|
|
}
|
|
|
|
interface UpdateNestedObjV3Params {
|
|
api_cfg: any;
|
|
parent_type?: string;
|
|
parent_id?: string;
|
|
child_type?: string;
|
|
child_id?: string;
|
|
// Aliases for migration
|
|
for_obj_type?: string;
|
|
for_obj_id?: string;
|
|
obj_type?: string;
|
|
obj_id?: string;
|
|
|
|
fields: key_val;
|
|
params?: key_val;
|
|
log_lvl?: number;
|
|
}
|
|
|
|
export async function update_nested_obj({
|
|
api_cfg,
|
|
parent_type,
|
|
parent_id,
|
|
child_type,
|
|
child_id,
|
|
for_obj_type,
|
|
for_obj_id,
|
|
obj_type,
|
|
obj_id,
|
|
fields,
|
|
params = {},
|
|
log_lvl = 0
|
|
}: UpdateNestedObjV3Params) {
|
|
const p_type = parent_type || for_obj_type;
|
|
const p_id = parent_id || for_obj_id;
|
|
const c_type = child_type || obj_type;
|
|
const c_id = child_id || obj_id;
|
|
|
|
const endpoint = `/v3/crud/${p_type}/${p_id}/${c_type}/${c_id}`;
|
|
|
|
if (log_lvl) {
|
|
console.log('*** update_nested_obj ***');
|
|
console.log('Endpoint:', endpoint);
|
|
console.log('Fields:', fields);
|
|
}
|
|
|
|
// Standard Aether Pattern: Auto-serialize any key ending in _json
|
|
const cleaned_fields = { ...fields };
|
|
for (const key in cleaned_fields) {
|
|
if (key.endsWith('_json') && cleaned_fields[key] !== null) {
|
|
cleaned_fields[key] = serialize_json_field_pretty(
|
|
cleaned_fields[key]
|
|
);
|
|
}
|
|
}
|
|
|
|
return await patch_object({
|
|
api_cfg,
|
|
endpoint,
|
|
params,
|
|
data: cleaned_fields,
|
|
log_lvl
|
|
});
|
|
}
|
|
|
|
/**
|
|
* --- DELETE WRAPPERS ---
|
|
*/
|
|
|
|
interface DeleteAeObjV3Params {
|
|
api_cfg: any;
|
|
obj_type: string;
|
|
obj_id: string;
|
|
method?: 'delete' | 'soft_delete' | 'disable' | 'hide';
|
|
params?: key_val;
|
|
log_lvl?: number;
|
|
}
|
|
|
|
/**
|
|
* Delete a single object by ID (V3)
|
|
* Supports 'delete' (hard), 'soft_delete', 'disable' (enable=false), and 'hide' (hide=true).
|
|
*/
|
|
export async function delete_ae_obj({
|
|
api_cfg,
|
|
obj_type,
|
|
obj_id,
|
|
method = 'delete',
|
|
params = {},
|
|
log_lvl = 0
|
|
}: DeleteAeObjV3Params) {
|
|
const endpoint = `/v3/crud/${obj_type}/${obj_id}`;
|
|
const query_params = { ...params, method };
|
|
|
|
if (log_lvl) {
|
|
console.log('*** delete_ae_obj ***');
|
|
console.log('Endpoint:', endpoint);
|
|
console.log('Params:', query_params);
|
|
}
|
|
|
|
return await delete_object({
|
|
api_cfg,
|
|
endpoint,
|
|
params: query_params,
|
|
log_lvl
|
|
});
|
|
}
|
|
|
|
interface DeleteNestedAeObjV3Params {
|
|
api_cfg: any;
|
|
parent_type?: string;
|
|
parent_id?: string;
|
|
child_type?: string;
|
|
child_id?: string;
|
|
// Aliases for migration
|
|
for_obj_type?: string;
|
|
for_obj_id?: string;
|
|
obj_type?: string;
|
|
obj_id?: string;
|
|
|
|
method?: 'delete' | 'soft_delete' | 'disable' | 'hide';
|
|
params?: key_val;
|
|
log_lvl?: number;
|
|
}
|
|
|
|
/**
|
|
* Delete a single nested object by ID (V3)
|
|
*/
|
|
export async function delete_nested_ae_obj({
|
|
api_cfg,
|
|
parent_type,
|
|
parent_id,
|
|
child_type,
|
|
child_id,
|
|
for_obj_type,
|
|
for_obj_id,
|
|
obj_type,
|
|
obj_id,
|
|
method = 'delete',
|
|
params = {},
|
|
log_lvl = 0
|
|
}: DeleteNestedAeObjV3Params) {
|
|
const p_type = parent_type || for_obj_type;
|
|
const p_id = parent_id || for_obj_id;
|
|
const c_type = child_type || obj_type;
|
|
const c_id = child_id || obj_id;
|
|
|
|
const endpoint = `/v3/crud/${p_type}/${p_id}/${c_type}/${c_id}`;
|
|
const query_params = { ...params, method };
|
|
|
|
if (log_lvl) {
|
|
console.log('*** delete_nested_ae_obj ***');
|
|
console.log('Endpoint:', endpoint);
|
|
console.log('Params:', query_params);
|
|
}
|
|
|
|
return await delete_object({
|
|
api_cfg,
|
|
endpoint,
|
|
params: query_params,
|
|
log_lvl
|
|
});
|
|
}
|