web_lib

Common web application libraries
git clone https://radroots.dev/git/web_lib.git
Log | Files | Refs | LICENSE

commit 73892ee9abe1babc0eae57fa17648da3d22b9b0e
parent d6b3cbfe17f56fe7fa94c5bdd663a817b4568f65
Author: triesap <137732411+triesap@users.noreply.github.com>
Date:   Wed,  9 Apr 2025 00:58:17 +0000

client: refactor clients. migrate types from `@radroots/util`

Diffstat:
Dclient/src/database/tauri.ts | 507-------------------------------------------------------------------------------
Aclient/src/database/tauri/lib.ts | 505+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aclient/src/database/tauri/types.ts | 40++++++++++++++++++++++++++++++++++++++++
Dclient/src/database/types.ts | 70----------------------------------------------------------------------
Mclient/src/datastore/tauri.ts | 18++++++++++++++++--
Mclient/src/http/tauri.ts | 31+++++--------------------------
Mclient/src/index.ts | 6++----
Mclient/src/radroots/tauri.ts | 10+++++-----
8 files changed, 573 insertions(+), 614 deletions(-)

diff --git a/client/src/database/tauri.ts b/client/src/database/tauri.ts @@ -1,506 +0,0 @@ - -import { location_gcs_parse, location_gcs_parse_list, location_gcs_parse_select_query, location_gcs_parse_select_query_list, location_gcs_parse_update_query, location_gcs_validate_form_fields, location_gcs_validate_update_form_fields, log_error_parse, log_error_parse_list, log_error_parse_select_query, log_error_parse_select_query_list, log_error_parse_update_query, log_error_validate_form_fields, log_error_validate_update_form_fields, media_image_parse, media_image_parse_list, media_image_parse_select_query, media_image_parse_select_query_list, media_image_parse_update_query, media_image_validate_form_fields, media_image_validate_update_form_fields, nostr_profile_parse, nostr_profile_parse_list, nostr_profile_parse_select_query, nostr_profile_parse_select_query_list, nostr_profile_parse_update_query, nostr_profile_validate_form_fields, nostr_profile_validate_update_form_fields, nostr_relay_parse, nostr_relay_parse_list, nostr_relay_parse_select_query, nostr_relay_parse_select_query_list, nostr_relay_parse_update_query, nostr_relay_validate_form_fields, nostr_relay_validate_update_form_fields, trade_product_parse, trade_product_parse_list, trade_product_parse_select_query, trade_product_parse_select_query_list, trade_product_parse_update_query, trade_product_validate_form_fields, trade_product_validate_update_form_fields, type ILocationGcsCreate, type ILocationGcsCreateHandler, type ILocationGcsCreateResolve, type ILocationGcsDelete, type ILocationGcsDeleteHandler, type ILocationGcsDeleteResolve, type ILocationGcsRead, type ILocationGcsReadHandler, type ILocationGcsReadList, type ILocationGcsReadListHandler, type ILocationGcsReadListResolve, type ILocationGcsReadResolve, type ILocationGcsUpdate, type ILocationGcsUpdateHandler, type ILocationGcsUpdateResolve, type ILogErrorCreate, type ILogErrorCreateHandler, type ILogErrorCreateResolve, type ILogErrorDelete, type ILogErrorDeleteHandler, type ILogErrorDeleteResolve, type ILogErrorRead, type ILogErrorReadHandler, type ILogErrorReadList, type ILogErrorReadListHandler, type ILogErrorReadListResolve, type ILogErrorReadResolve, type ILogErrorUpdate, type ILogErrorUpdateHandler, type ILogErrorUpdateResolve, type IMediaImageCreate, type IMediaImageCreateHandler, type IMediaImageCreateResolve, type IMediaImageDelete, type IMediaImageDeleteHandler, type IMediaImageDeleteResolve, type IMediaImageRead, type IMediaImageReadHandler, type IMediaImageReadList, type IMediaImageReadListHandler, type IMediaImageReadListResolve, type IMediaImageReadResolve, type IMediaImageUpdate, type IMediaImageUpdateHandler, type IMediaImageUpdateResolve, type INostrProfileCreate, type INostrProfileCreateHandler, type INostrProfileCreateResolve, type INostrProfileDelete, type INostrProfileDeleteHandler, type INostrProfileDeleteResolve, type INostrProfileRead, type INostrProfileReadHandler, type INostrProfileReadList, type INostrProfileReadListHandler, type INostrProfileReadListResolve, type INostrProfileReadResolve, type INostrProfileRelayRelation, type INostrProfileRelayResolve, type INostrProfileUpdate, type INostrProfileUpdateHandler, type INostrProfileUpdateResolve, type INostrRelayCreate, type INostrRelayCreateHandler, type INostrRelayCreateResolve, type INostrRelayDelete, type INostrRelayDeleteHandler, type INostrRelayDeleteResolve, type INostrRelayRead, type INostrRelayReadHandler, type INostrRelayReadList, type INostrRelayReadListHandler, type INostrRelayReadListResolve, type INostrRelayReadResolve, type INostrRelayUpdate, type INostrRelayUpdateHandler, type INostrRelayUpdateResolve, type ITradeProductCreate, type ITradeProductCreateHandler, type ITradeProductCreateResolve, type ITradeProductDelete, type ITradeProductDeleteHandler, type ITradeProductDeleteResolve, type ITradeProductLocationRelation, type ITradeProductLocationResolve, type ITradeProductMediaRelation, type ITradeProductMediaResolve, type ITradeProductRead, type ITradeProductReadHandler, type ITradeProductReadList, type ITradeProductReadListHandler, type ITradeProductReadListResolve, type ITradeProductReadResolve, type ITradeProductUpdate, type ITradeProductUpdateHandler, type ITradeProductUpdateResolve } from "@radroots/models"; -import { err_msg, is_err_response, is_pass_response, is_result_response, is_results_response, type ErrorMessage } from "@radroots/util"; -import { invoke } from "@tauri-apps/api/core"; -import type { IClientTauriDatabase, IClientTauriDatabaseMessage } from "./types"; - -export class TauriClientDatabase implements IClientTauriDatabase { - private append_logs(scope: string, opts: any, error: any): IClientTauriDatabaseMessage { - console.log('[database:tauri] append logs') - console.log('scope ', scope) - console.log('opts ', opts) - console.log('error ', error) - const error_msg = String(error); - return `append-logs-${error_msg}`; - } - - private handle_errors(scope: string, opts: any, e: any): ErrorMessage<IClientTauriDatabaseMessage> { - const error = this.append_logs(scope, opts, e); - if (error.includes("UNIQUE constraint failed: location_gcs.geohash")) return err_msg("*-location-gcs-geohash-unique"); - else if (error.includes("UNIQUE constraint failed: nostr_relay.url")) return err_msg("*-nostr-relay-url-unique"); - return err_msg(error); - } - - public reset = async (): Promise<{ pass: true } | ErrorMessage<IClientTauriDatabaseMessage>> => { - try { - const response = await invoke<any>("model_tables_reset"); - return { pass: true }; - } catch (e) { - return this.handle_errors("reset", undefined, e); - }; - } - - public async location_gcs_create(opts: ILocationGcsCreate): Promise<ILocationGcsCreateResolve<IClientTauriDatabaseMessage>> { - try { - const args = location_gcs_validate_form_fields(opts); - if (Array.isArray(args)) return { err_s: args }; - const response = await invoke<any>("model_location_gcs_create", { args } satisfies ILocationGcsCreateHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_result_response(response)) return { id: response.result }; - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_location_gcs_create", opts, e); - }; - } - - public async location_gcs_read(opts: ILocationGcsRead): Promise<ILocationGcsReadResolve<IClientTauriDatabaseMessage>> { - try { - const args = location_gcs_parse_select_query(opts); - const response = await invoke<any>("model_location_gcs_read", { args } satisfies ILocationGcsReadHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_results_response(response)) { - const result = location_gcs_parse(response.results[0]); - if (result) return { result }; - } - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_location_gcs_read", opts, e); - }; - } - - public async location_gcs_read_list(opts?: ILocationGcsReadList): Promise<ILocationGcsReadListResolve<IClientTauriDatabaseMessage>> { - try { - const args = location_gcs_parse_select_query_list(opts); - const response = await invoke<any>("model_location_gcs_read_list", { args } satisfies ILocationGcsReadListHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_results_response(response)) { - const results = location_gcs_parse_list(response.results); - if (results.length) return { results }; - } - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_location_gcs_read_list", opts, e); - }; - } - - public async location_gcs_update(opts: ILocationGcsUpdate): Promise<ILocationGcsUpdateResolve<IClientTauriDatabaseMessage>> { - try { - const fields = location_gcs_validate_update_form_fields(opts.fields); - if (Array.isArray(fields)) return { err_s: fields }; - const args = location_gcs_parse_update_query(opts.filter, fields); - const response = await invoke<any>("model_location_gcs_update", { args } satisfies ILocationGcsUpdateHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_pass_response(response)) return { pass: true }; - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_location_gcs_update", opts, e); - }; - } - - public async location_gcs_delete(args: ILocationGcsDelete): Promise<ILocationGcsDeleteResolve<IClientTauriDatabaseMessage>> { - try { - const response = await invoke<any>("model_location_gcs_delete", { args } satisfies ILocationGcsDeleteHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_pass_response(response)) return { pass: true }; - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_location_gcs_delete", args, e); - }; - } - - public async trade_product_create(opts: ITradeProductCreate): Promise<ITradeProductCreateResolve<IClientTauriDatabaseMessage>> { - try { - const args = trade_product_validate_form_fields(opts); - if (Array.isArray(args)) return { err_s: args }; - const response = await invoke<any>("model_trade_product_create", { args } satisfies ITradeProductCreateHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_result_response(response)) return { id: response.result }; - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_trade_product_create", opts, e); - }; - } - - public async trade_product_read(opts: ITradeProductRead): Promise<ITradeProductReadResolve<IClientTauriDatabaseMessage>> { - try { - const args = trade_product_parse_select_query(opts); - const response = await invoke<any>("model_trade_product_read", { args } satisfies ITradeProductReadHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_results_response(response)) { - const result = trade_product_parse(response.results[0]); - if (result) return { result }; - } - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_trade_product_read", opts, e); - }; - } - - public async trade_product_read_list(opts?: ITradeProductReadList): Promise<ITradeProductReadListResolve<IClientTauriDatabaseMessage>> { - try { - const args = trade_product_parse_select_query_list(opts); - const response = await invoke<any>("model_trade_product_read_list", { args } satisfies ITradeProductReadListHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_results_response(response)) { - const results = trade_product_parse_list(response.results); - if (results.length) return { results }; - } - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_trade_product_read_list", opts, e); - }; - } - - public async trade_product_update(opts: ITradeProductUpdate): Promise<ITradeProductUpdateResolve<IClientTauriDatabaseMessage>> { - try { - const fields = trade_product_validate_update_form_fields(opts.fields); - if (Array.isArray(fields)) return { err_s: fields }; - const args = trade_product_parse_update_query(opts.filter, fields); - const response = await invoke<any>("model_trade_product_update", { args } satisfies ITradeProductUpdateHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_pass_response(response)) return { pass: true }; - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_trade_product_update", opts, e); - }; - } - - public async trade_product_delete(args: ITradeProductDelete): Promise<ITradeProductDeleteResolve<IClientTauriDatabaseMessage>> { - try { - const response = await invoke<any>("model_trade_product_delete", { args } satisfies ITradeProductDeleteHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_pass_response(response)) return { pass: true }; - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_trade_product_delete", args, e); - }; - } - - public async nostr_profile_create(opts: INostrProfileCreate): Promise<INostrProfileCreateResolve<IClientTauriDatabaseMessage>> { - try { - const args = nostr_profile_validate_form_fields(opts); - if (Array.isArray(args)) return { err_s: args }; - const response = await invoke<any>("model_nostr_profile_create", { args } satisfies INostrProfileCreateHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_result_response(response)) return { id: response.result }; - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_nostr_profile_create", opts, e); - }; - } - - public async nostr_profile_read(opts: INostrProfileRead): Promise<INostrProfileReadResolve<IClientTauriDatabaseMessage>> { - try { - const args = nostr_profile_parse_select_query(opts); - const response = await invoke<any>("model_nostr_profile_read", { args } satisfies INostrProfileReadHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_results_response(response)) { - const result = nostr_profile_parse(response.results[0]); - if (result) return { result }; - } - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_nostr_profile_read", opts, e); - }; - } - - public async nostr_profile_read_list(opts?: INostrProfileReadList): Promise<INostrProfileReadListResolve<IClientTauriDatabaseMessage>> { - try { - const args = nostr_profile_parse_select_query_list(opts); - const response = await invoke<any>("model_nostr_profile_read_list", { args } satisfies INostrProfileReadListHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_results_response(response)) { - const results = nostr_profile_parse_list(response.results); - if (results.length) return { results }; - } - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_nostr_profile_read_list", opts, e); - }; - } - - public async nostr_profile_update(opts: INostrProfileUpdate): Promise<INostrProfileUpdateResolve<IClientTauriDatabaseMessage>> { - try { - const fields = nostr_profile_validate_update_form_fields(opts.fields); - if (Array.isArray(fields)) return { err_s: fields }; - const args = nostr_profile_parse_update_query(opts.filter, fields); - const response = await invoke<any>("model_nostr_profile_update", { args } satisfies INostrProfileUpdateHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_pass_response(response)) return { pass: true }; - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_nostr_profile_update", opts, e); - }; - } - - public async nostr_profile_delete(args: INostrProfileDelete): Promise<INostrProfileDeleteResolve<IClientTauriDatabaseMessage>> { - try { - const response = await invoke<any>("model_nostr_profile_delete", { args } satisfies INostrProfileDeleteHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_pass_response(response)) return { pass: true }; - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_nostr_profile_delete", args, e); - }; - } - - public async nostr_relay_create(opts: INostrRelayCreate): Promise<INostrRelayCreateResolve<IClientTauriDatabaseMessage>> { - try { - const args = nostr_relay_validate_form_fields(opts); - if (Array.isArray(args)) return { err_s: args }; - const response = await invoke<any>("model_nostr_relay_create", { args } satisfies INostrRelayCreateHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_result_response(response)) return { id: response.result }; - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_nostr_relay_create", opts, e); - }; - } - - public async nostr_relay_read(opts: INostrRelayRead): Promise<INostrRelayReadResolve<IClientTauriDatabaseMessage>> { - try { - const args = nostr_relay_parse_select_query(opts); - const response = await invoke<any>("model_nostr_relay_read", { args } satisfies INostrRelayReadHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_results_response(response)) { - const result = nostr_relay_parse(response.results[0]); - if (result) return { result }; - } - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_nostr_relay_read", opts, e); - }; - } - - public async nostr_relay_read_list(opts?: INostrRelayReadList): Promise<INostrRelayReadListResolve<IClientTauriDatabaseMessage>> { - try { - const args = nostr_relay_parse_select_query_list(opts); - const response = await invoke<any>("model_nostr_relay_read_list", { args } satisfies INostrRelayReadListHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_results_response(response)) { - const results = nostr_relay_parse_list(response.results); - if (results.length) return { results }; - } - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_nostr_relay_read_list", opts, e); - }; - } - - public async nostr_relay_update(opts: INostrRelayUpdate): Promise<INostrRelayUpdateResolve<IClientTauriDatabaseMessage>> { - try { - const fields = nostr_relay_validate_update_form_fields(opts.fields); - if (Array.isArray(fields)) return { err_s: fields }; - const args = nostr_relay_parse_update_query(opts.filter, fields); - const response = await invoke<any>("model_nostr_relay_update", { args } satisfies INostrRelayUpdateHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_pass_response(response)) return { pass: true }; - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_nostr_relay_update", opts, e); - }; - } - - public async nostr_relay_delete(args: INostrRelayDelete): Promise<INostrRelayDeleteResolve<IClientTauriDatabaseMessage>> { - try { - const response = await invoke<any>("model_nostr_relay_delete", { args } satisfies INostrRelayDeleteHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_pass_response(response)) return { pass: true }; - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_nostr_relay_delete", args, e); - }; - } - - public async media_image_create(opts: IMediaImageCreate): Promise<IMediaImageCreateResolve<IClientTauriDatabaseMessage>> { - try { - const args = media_image_validate_form_fields(opts); - if (Array.isArray(args)) return { err_s: args }; - const response = await invoke<any>("model_media_image_create", { args } satisfies IMediaImageCreateHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_result_response(response)) return { id: response.result }; - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_media_image_create", opts, e); - }; - } - - public async media_image_read(opts: IMediaImageRead): Promise<IMediaImageReadResolve<IClientTauriDatabaseMessage>> { - try { - const args = media_image_parse_select_query(opts); - const response = await invoke<any>("model_media_image_read", { args } satisfies IMediaImageReadHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_results_response(response)) { - const result = media_image_parse(response.results[0]); - if (result) return { result }; - } - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_media_image_read", opts, e); - }; - } - - public async media_image_read_list(opts?: IMediaImageReadList): Promise<IMediaImageReadListResolve<IClientTauriDatabaseMessage>> { - try { - const args = media_image_parse_select_query_list(opts); - const response = await invoke<any>("model_media_image_read_list", { args } satisfies IMediaImageReadListHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_results_response(response)) { - const results = media_image_parse_list(response.results); - if (results.length) return { results }; - } - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_media_image_read_list", opts, e); - }; - } - - public async media_image_update(opts: IMediaImageUpdate): Promise<IMediaImageUpdateResolve<IClientTauriDatabaseMessage>> { - try { - const fields = media_image_validate_update_form_fields(opts.fields); - if (Array.isArray(fields)) return { err_s: fields }; - const args = media_image_parse_update_query(opts.filter, fields); - const response = await invoke<any>("model_media_image_update", { args } satisfies IMediaImageUpdateHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_pass_response(response)) return { pass: true }; - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_media_image_update", opts, e); - }; - } - - public async media_image_delete(args: IMediaImageDelete): Promise<IMediaImageDeleteResolve<IClientTauriDatabaseMessage>> { - try { - const response = await invoke<any>("model_media_image_delete", { args } satisfies IMediaImageDeleteHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_pass_response(response)) return { pass: true }; - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_media_image_delete", args, e); - }; - } - - public async log_error_create(opts: ILogErrorCreate): Promise<ILogErrorCreateResolve<IClientTauriDatabaseMessage>> { - try { - const args = log_error_validate_form_fields(opts); - if (Array.isArray(args)) return { err_s: args }; - const response = await invoke<any>("model_log_error_create", { args } satisfies ILogErrorCreateHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_result_response(response)) return { id: response.result }; - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_log_error_create", opts, e); - }; - } - - public async log_error_read(opts: ILogErrorRead): Promise<ILogErrorReadResolve<IClientTauriDatabaseMessage>> { - try { - const args = log_error_parse_select_query(opts); - const response = await invoke<any>("model_log_error_read", { args } satisfies ILogErrorReadHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_results_response(response)) { - const result = log_error_parse(response.results[0]); - if (result) return { result }; - } - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_log_error_read", opts, e); - }; - } - - public async log_error_read_list(opts?: ILogErrorReadList): Promise<ILogErrorReadListResolve<IClientTauriDatabaseMessage>> { - try { - const args = log_error_parse_select_query_list(opts); - const response = await invoke<any>("model_log_error_read_list", { args } satisfies ILogErrorReadListHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_results_response(response)) { - const results = log_error_parse_list(response.results); - if (results.length) return { results }; - } - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_log_error_read_list", opts, e); - }; - } - - public async log_error_update(opts: ILogErrorUpdate): Promise<ILogErrorUpdateResolve<IClientTauriDatabaseMessage>> { - try { - const fields = log_error_validate_update_form_fields(opts.fields); - if (Array.isArray(fields)) return { err_s: fields }; - const args = log_error_parse_update_query(opts.filter, fields); - const response = await invoke<any>("model_log_error_update", { args } satisfies ILogErrorUpdateHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_pass_response(response)) return { pass: true }; - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_log_error_update", opts, e); - }; - } - - public async log_error_delete(args: ILogErrorDelete): Promise<ILogErrorDeleteResolve<IClientTauriDatabaseMessage>> { - try { - const response = await invoke<any>("model_log_error_delete", { args } satisfies ILogErrorDeleteHandler); - if (is_err_response(response)) return err_msg(response.err); - else if (is_pass_response(response)) return { pass: true }; - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_log_error_delete", args, e); - }; - } - - public async nostr_profile_relay_set(args: INostrProfileRelayRelation): Promise<INostrProfileRelayResolve<IClientTauriDatabaseMessage>> { - try { - const response = await invoke<any>("model_nostr_profile_relay_set", { args }); - if (response === true) return { pass: true }; - else if (typeof response === "string") return err_msg(response); - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_nostr_profile_relay_set", args, e); - }; - } - - public async nostr_profile_relay_unset(args: INostrProfileRelayRelation): Promise<INostrProfileRelayResolve<IClientTauriDatabaseMessage>> { - try { - const response = await invoke<any>("model_nostr_profile_relay_unset", { args }); - if (response === true) return { pass: true }; - else if (typeof response === "string") return err_msg(response); - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_nostr_profile_relay_unset", args, e); - }; - } - - public async trade_product_location_set(args: ITradeProductLocationRelation): Promise<ITradeProductLocationResolve<IClientTauriDatabaseMessage>> { - try { - const response = await invoke<any>("model_trade_product_location_set", { args }); - if (response === true) return { pass: true }; - else if (typeof response === "string") return err_msg(response); - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_trade_product_location_set", args, e); - }; - } - - public async trade_product_location_unset(args: ITradeProductLocationRelation): Promise<ITradeProductLocationResolve<IClientTauriDatabaseMessage>> { - try { - const response = await invoke<any>("model_trade_product_location_unset", { args }); - if (response === true) return { pass: true }; - else if (typeof response === "string") return err_msg(response); - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_trade_product_location_unset", args, e); - }; - } - - public async trade_product_media_set(args: ITradeProductMediaRelation): Promise<ITradeProductMediaResolve<IClientTauriDatabaseMessage>> { - try { - const response = await invoke<any>("model_trade_product_media_set", { args }); - if (response === true) return { pass: true }; - else if (typeof response === "string") return err_msg(response); - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_trade_product_media_set", args, e); - }; - } - - public async trade_product_media_unset(args: ITradeProductMediaRelation): Promise<ITradeProductMediaResolve<IClientTauriDatabaseMessage>> { - try { - const response = await invoke<any>("model_trade_product_media_unset", { args }); - if (response === true) return { pass: true }; - else if (typeof response === "string") return err_msg(response); - return err_msg("*-result"); - } catch (e) { - return this.handle_errors("model_trade_product_media_unset", args, e); - }; - } -} -\ No newline at end of file diff --git a/client/src/database/tauri/lib.ts b/client/src/database/tauri/lib.ts @@ -0,0 +1,504 @@ + +import { location_gcs_parse, location_gcs_parse_list, location_gcs_parse_select_query, location_gcs_parse_select_query_list, location_gcs_parse_update_query, location_gcs_validate_form_fields, location_gcs_validate_update_form_fields, log_error_parse, log_error_parse_list, log_error_parse_select_query, log_error_parse_select_query_list, log_error_parse_update_query, log_error_validate_form_fields, log_error_validate_update_form_fields, media_image_parse, media_image_parse_list, media_image_parse_select_query, media_image_parse_select_query_list, media_image_parse_update_query, media_image_validate_form_fields, media_image_validate_update_form_fields, nostr_profile_parse, nostr_profile_parse_list, nostr_profile_parse_select_query, nostr_profile_parse_select_query_list, nostr_profile_parse_update_query, nostr_profile_validate_form_fields, nostr_profile_validate_update_form_fields, nostr_relay_parse, nostr_relay_parse_list, nostr_relay_parse_select_query, nostr_relay_parse_select_query_list, nostr_relay_parse_update_query, nostr_relay_validate_form_fields, nostr_relay_validate_update_form_fields, trade_product_parse, trade_product_parse_list, trade_product_parse_select_query, trade_product_parse_select_query_list, trade_product_parse_update_query, trade_product_validate_form_fields, trade_product_validate_update_form_fields, type ILocationGcsCreate, type ILocationGcsCreateHandler, type ILocationGcsCreateResolve, type ILocationGcsDelete, type ILocationGcsDeleteHandler, type ILocationGcsDeleteResolve, type ILocationGcsRead, type ILocationGcsReadHandler, type ILocationGcsReadList, type ILocationGcsReadListHandler, type ILocationGcsReadListResolve, type ILocationGcsReadResolve, type ILocationGcsUpdate, type ILocationGcsUpdateHandler, type ILocationGcsUpdateResolve, type ILogErrorCreate, type ILogErrorCreateHandler, type ILogErrorCreateResolve, type ILogErrorDelete, type ILogErrorDeleteHandler, type ILogErrorDeleteResolve, type ILogErrorRead, type ILogErrorReadHandler, type ILogErrorReadList, type ILogErrorReadListHandler, type ILogErrorReadListResolve, type ILogErrorReadResolve, type ILogErrorUpdate, type ILogErrorUpdateHandler, type ILogErrorUpdateResolve, type IMediaImageCreate, type IMediaImageCreateHandler, type IMediaImageCreateResolve, type IMediaImageDelete, type IMediaImageDeleteHandler, type IMediaImageDeleteResolve, type IMediaImageRead, type IMediaImageReadHandler, type IMediaImageReadList, type IMediaImageReadListHandler, type IMediaImageReadListResolve, type IMediaImageReadResolve, type IMediaImageUpdate, type IMediaImageUpdateHandler, type IMediaImageUpdateResolve, type INostrProfileCreate, type INostrProfileCreateHandler, type INostrProfileCreateResolve, type INostrProfileDelete, type INostrProfileDeleteHandler, type INostrProfileDeleteResolve, type INostrProfileRead, type INostrProfileReadHandler, type INostrProfileReadList, type INostrProfileReadListHandler, type INostrProfileReadListResolve, type INostrProfileReadResolve, type INostrProfileRelayRelation, type INostrProfileRelayResolve, type INostrProfileUpdate, type INostrProfileUpdateHandler, type INostrProfileUpdateResolve, type INostrRelayCreate, type INostrRelayCreateHandler, type INostrRelayCreateResolve, type INostrRelayDelete, type INostrRelayDeleteHandler, type INostrRelayDeleteResolve, type INostrRelayRead, type INostrRelayReadHandler, type INostrRelayReadList, type INostrRelayReadListHandler, type INostrRelayReadListResolve, type INostrRelayReadResolve, type INostrRelayUpdate, type INostrRelayUpdateHandler, type INostrRelayUpdateResolve, type ITradeProductCreate, type ITradeProductCreateHandler, type ITradeProductCreateResolve, type ITradeProductDelete, type ITradeProductDeleteHandler, type ITradeProductDeleteResolve, type ITradeProductLocationRelation, type ITradeProductLocationResolve, type ITradeProductMediaRelation, type ITradeProductMediaResolve, type ITradeProductRead, type ITradeProductReadHandler, type ITradeProductReadList, type ITradeProductReadListHandler, type ITradeProductReadListResolve, type ITradeProductReadResolve, type ITradeProductUpdate, type ITradeProductUpdateHandler, type ITradeProductUpdateResolve } from "@radroots/models"; +import { err_msg, is_err_response, is_pass_response, is_result_response, is_results_response, type ErrorMessage } from "@radroots/util"; +import { invoke } from "@tauri-apps/api/core"; +import type { IClientTauriDatabase, IClientTauriDatabaseMessage } from "./types"; + +export class TauriClientDatabase implements IClientTauriDatabase { + private append_logs(scope: string, opts: any, error: any): IClientTauriDatabaseMessage { + console.log('[radroots] append_logs (scope, opts, error)'); + console.log(scope, opts, error); + const error_msg = String(error); + return `append_logs::${error_msg}`; + } + + private handle_errors(scope: string, opts: any, e: any): ErrorMessage<IClientTauriDatabaseMessage> { + const error = this.append_logs(scope, opts, e); + if (error.includes("UNIQUE constraint failed: location_gcs.geohash")) return err_msg("*-location-gcs-geohash-unique"); + else if (error.includes("UNIQUE constraint failed: nostr_relay.url")) return err_msg("*-nostr-relay-url-unique"); + return err_msg(error); + } + + public reset = async (): Promise<{ pass: true } | ErrorMessage<IClientTauriDatabaseMessage>> => { + try { + const response = await invoke<any>("model_tables_reset"); + return { pass: true }; + } catch (e) { + return this.handle_errors("reset", undefined, e); + }; + } + + public async location_gcs_create(opts: ILocationGcsCreate): Promise<ILocationGcsCreateResolve<IClientTauriDatabaseMessage>> { + try { + const args = location_gcs_validate_form_fields(opts); + if (Array.isArray(args)) return { err_s: args }; + const response = await invoke<any>("model_location_gcs_create", { args } satisfies ILocationGcsCreateHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_result_response(response)) return { id: response.result }; + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_location_gcs_create", opts, e); + }; + } + + public async location_gcs_read(opts: ILocationGcsRead): Promise<ILocationGcsReadResolve<IClientTauriDatabaseMessage>> { + try { + const args = location_gcs_parse_select_query(opts); + const response = await invoke<any>("model_location_gcs_read", { args } satisfies ILocationGcsReadHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_results_response(response)) { + const result = location_gcs_parse(response.results[0]); + if (result) return { result }; + } + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_location_gcs_read", opts, e); + }; + } + + public async location_gcs_read_list(opts?: ILocationGcsReadList): Promise<ILocationGcsReadListResolve<IClientTauriDatabaseMessage>> { + try { + const args = location_gcs_parse_select_query_list(opts); + const response = await invoke<any>("model_location_gcs_read_list", { args } satisfies ILocationGcsReadListHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_results_response(response)) { + const results = location_gcs_parse_list(response.results); + if (results.length) return { results }; + } + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_location_gcs_read_list", opts, e); + }; + } + + public async location_gcs_update(opts: ILocationGcsUpdate): Promise<ILocationGcsUpdateResolve<IClientTauriDatabaseMessage>> { + try { + const fields = location_gcs_validate_update_form_fields(opts.fields); + if (Array.isArray(fields)) return { err_s: fields }; + const args = location_gcs_parse_update_query(opts.filter, fields); + const response = await invoke<any>("model_location_gcs_update", { args } satisfies ILocationGcsUpdateHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_pass_response(response)) return { pass: true }; + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_location_gcs_update", opts, e); + }; + } + + public async location_gcs_delete(args: ILocationGcsDelete): Promise<ILocationGcsDeleteResolve<IClientTauriDatabaseMessage>> { + try { + const response = await invoke<any>("model_location_gcs_delete", { args } satisfies ILocationGcsDeleteHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_pass_response(response)) return { pass: true }; + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_location_gcs_delete", args, e); + }; + } + + public async trade_product_create(opts: ITradeProductCreate): Promise<ITradeProductCreateResolve<IClientTauriDatabaseMessage>> { + try { + const args = trade_product_validate_form_fields(opts); + if (Array.isArray(args)) return { err_s: args }; + const response = await invoke<any>("model_trade_product_create", { args } satisfies ITradeProductCreateHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_result_response(response)) return { id: response.result }; + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_trade_product_create", opts, e); + }; + } + + public async trade_product_read(opts: ITradeProductRead): Promise<ITradeProductReadResolve<IClientTauriDatabaseMessage>> { + try { + const args = trade_product_parse_select_query(opts); + const response = await invoke<any>("model_trade_product_read", { args } satisfies ITradeProductReadHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_results_response(response)) { + const result = trade_product_parse(response.results[0]); + if (result) return { result }; + } + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_trade_product_read", opts, e); + }; + } + + public async trade_product_read_list(opts?: ITradeProductReadList): Promise<ITradeProductReadListResolve<IClientTauriDatabaseMessage>> { + try { + const args = trade_product_parse_select_query_list(opts); + const response = await invoke<any>("model_trade_product_read_list", { args } satisfies ITradeProductReadListHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_results_response(response)) { + const results = trade_product_parse_list(response.results); + if (results.length) return { results }; + } + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_trade_product_read_list", opts, e); + }; + } + + public async trade_product_update(opts: ITradeProductUpdate): Promise<ITradeProductUpdateResolve<IClientTauriDatabaseMessage>> { + try { + const fields = trade_product_validate_update_form_fields(opts.fields); + if (Array.isArray(fields)) return { err_s: fields }; + const args = trade_product_parse_update_query(opts.filter, fields); + const response = await invoke<any>("model_trade_product_update", { args } satisfies ITradeProductUpdateHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_pass_response(response)) return { pass: true }; + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_trade_product_update", opts, e); + }; + } + + public async trade_product_delete(args: ITradeProductDelete): Promise<ITradeProductDeleteResolve<IClientTauriDatabaseMessage>> { + try { + const response = await invoke<any>("model_trade_product_delete", { args } satisfies ITradeProductDeleteHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_pass_response(response)) return { pass: true }; + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_trade_product_delete", args, e); + }; + } + + public async nostr_profile_create(opts: INostrProfileCreate): Promise<INostrProfileCreateResolve<IClientTauriDatabaseMessage>> { + try { + const args = nostr_profile_validate_form_fields(opts); + if (Array.isArray(args)) return { err_s: args }; + const response = await invoke<any>("model_nostr_profile_create", { args } satisfies INostrProfileCreateHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_result_response(response)) return { id: response.result }; + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_nostr_profile_create", opts, e); + }; + } + + public async nostr_profile_read(opts: INostrProfileRead): Promise<INostrProfileReadResolve<IClientTauriDatabaseMessage>> { + try { + const args = nostr_profile_parse_select_query(opts); + const response = await invoke<any>("model_nostr_profile_read", { args } satisfies INostrProfileReadHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_results_response(response)) { + const result = nostr_profile_parse(response.results[0]); + if (result) return { result }; + } + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_nostr_profile_read", opts, e); + }; + } + + public async nostr_profile_read_list(opts?: INostrProfileReadList): Promise<INostrProfileReadListResolve<IClientTauriDatabaseMessage>> { + try { + const args = nostr_profile_parse_select_query_list(opts); + const response = await invoke<any>("model_nostr_profile_read_list", { args } satisfies INostrProfileReadListHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_results_response(response)) { + const results = nostr_profile_parse_list(response.results); + if (results.length) return { results }; + } + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_nostr_profile_read_list", opts, e); + }; + } + + public async nostr_profile_update(opts: INostrProfileUpdate): Promise<INostrProfileUpdateResolve<IClientTauriDatabaseMessage>> { + try { + const fields = nostr_profile_validate_update_form_fields(opts.fields); + if (Array.isArray(fields)) return { err_s: fields }; + const args = nostr_profile_parse_update_query(opts.filter, fields); + const response = await invoke<any>("model_nostr_profile_update", { args } satisfies INostrProfileUpdateHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_pass_response(response)) return { pass: true }; + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_nostr_profile_update", opts, e); + }; + } + + public async nostr_profile_delete(args: INostrProfileDelete): Promise<INostrProfileDeleteResolve<IClientTauriDatabaseMessage>> { + try { + const response = await invoke<any>("model_nostr_profile_delete", { args } satisfies INostrProfileDeleteHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_pass_response(response)) return { pass: true }; + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_nostr_profile_delete", args, e); + }; + } + + public async nostr_relay_create(opts: INostrRelayCreate): Promise<INostrRelayCreateResolve<IClientTauriDatabaseMessage>> { + try { + const args = nostr_relay_validate_form_fields(opts); + if (Array.isArray(args)) return { err_s: args }; + const response = await invoke<any>("model_nostr_relay_create", { args } satisfies INostrRelayCreateHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_result_response(response)) return { id: response.result }; + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_nostr_relay_create", opts, e); + }; + } + + public async nostr_relay_read(opts: INostrRelayRead): Promise<INostrRelayReadResolve<IClientTauriDatabaseMessage>> { + try { + const args = nostr_relay_parse_select_query(opts); + const response = await invoke<any>("model_nostr_relay_read", { args } satisfies INostrRelayReadHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_results_response(response)) { + const result = nostr_relay_parse(response.results[0]); + if (result) return { result }; + } + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_nostr_relay_read", opts, e); + }; + } + + public async nostr_relay_read_list(opts?: INostrRelayReadList): Promise<INostrRelayReadListResolve<IClientTauriDatabaseMessage>> { + try { + const args = nostr_relay_parse_select_query_list(opts); + const response = await invoke<any>("model_nostr_relay_read_list", { args } satisfies INostrRelayReadListHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_results_response(response)) { + const results = nostr_relay_parse_list(response.results); + if (results.length) return { results }; + } + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_nostr_relay_read_list", opts, e); + }; + } + + public async nostr_relay_update(opts: INostrRelayUpdate): Promise<INostrRelayUpdateResolve<IClientTauriDatabaseMessage>> { + try { + const fields = nostr_relay_validate_update_form_fields(opts.fields); + if (Array.isArray(fields)) return { err_s: fields }; + const args = nostr_relay_parse_update_query(opts.filter, fields); + const response = await invoke<any>("model_nostr_relay_update", { args } satisfies INostrRelayUpdateHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_pass_response(response)) return { pass: true }; + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_nostr_relay_update", opts, e); + }; + } + + public async nostr_relay_delete(args: INostrRelayDelete): Promise<INostrRelayDeleteResolve<IClientTauriDatabaseMessage>> { + try { + const response = await invoke<any>("model_nostr_relay_delete", { args } satisfies INostrRelayDeleteHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_pass_response(response)) return { pass: true }; + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_nostr_relay_delete", args, e); + }; + } + + public async media_image_create(opts: IMediaImageCreate): Promise<IMediaImageCreateResolve<IClientTauriDatabaseMessage>> { + try { + const args = media_image_validate_form_fields(opts); + if (Array.isArray(args)) return { err_s: args }; + const response = await invoke<any>("model_media_image_create", { args } satisfies IMediaImageCreateHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_result_response(response)) return { id: response.result }; + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_media_image_create", opts, e); + }; + } + + public async media_image_read(opts: IMediaImageRead): Promise<IMediaImageReadResolve<IClientTauriDatabaseMessage>> { + try { + const args = media_image_parse_select_query(opts); + const response = await invoke<any>("model_media_image_read", { args } satisfies IMediaImageReadHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_results_response(response)) { + const result = media_image_parse(response.results[0]); + if (result) return { result }; + } + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_media_image_read", opts, e); + }; + } + + public async media_image_read_list(opts?: IMediaImageReadList): Promise<IMediaImageReadListResolve<IClientTauriDatabaseMessage>> { + try { + const args = media_image_parse_select_query_list(opts); + const response = await invoke<any>("model_media_image_read_list", { args } satisfies IMediaImageReadListHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_results_response(response)) { + const results = media_image_parse_list(response.results); + if (results.length) return { results }; + } + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_media_image_read_list", opts, e); + }; + } + + public async media_image_update(opts: IMediaImageUpdate): Promise<IMediaImageUpdateResolve<IClientTauriDatabaseMessage>> { + try { + const fields = media_image_validate_update_form_fields(opts.fields); + if (Array.isArray(fields)) return { err_s: fields }; + const args = media_image_parse_update_query(opts.filter, fields); + const response = await invoke<any>("model_media_image_update", { args } satisfies IMediaImageUpdateHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_pass_response(response)) return { pass: true }; + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_media_image_update", opts, e); + }; + } + + public async media_image_delete(args: IMediaImageDelete): Promise<IMediaImageDeleteResolve<IClientTauriDatabaseMessage>> { + try { + const response = await invoke<any>("model_media_image_delete", { args } satisfies IMediaImageDeleteHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_pass_response(response)) return { pass: true }; + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_media_image_delete", args, e); + }; + } + + public async log_error_create(opts: ILogErrorCreate): Promise<ILogErrorCreateResolve<IClientTauriDatabaseMessage>> { + try { + const args = log_error_validate_form_fields(opts); + if (Array.isArray(args)) return { err_s: args }; + const response = await invoke<any>("model_log_error_create", { args } satisfies ILogErrorCreateHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_result_response(response)) return { id: response.result }; + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_log_error_create", opts, e); + }; + } + + public async log_error_read(opts: ILogErrorRead): Promise<ILogErrorReadResolve<IClientTauriDatabaseMessage>> { + try { + const args = log_error_parse_select_query(opts); + const response = await invoke<any>("model_log_error_read", { args } satisfies ILogErrorReadHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_results_response(response)) { + const result = log_error_parse(response.results[0]); + if (result) return { result }; + } + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_log_error_read", opts, e); + }; + } + + public async log_error_read_list(opts?: ILogErrorReadList): Promise<ILogErrorReadListResolve<IClientTauriDatabaseMessage>> { + try { + const args = log_error_parse_select_query_list(opts); + const response = await invoke<any>("model_log_error_read_list", { args } satisfies ILogErrorReadListHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_results_response(response)) { + const results = log_error_parse_list(response.results); + if (results.length) return { results }; + } + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_log_error_read_list", opts, e); + }; + } + + public async log_error_update(opts: ILogErrorUpdate): Promise<ILogErrorUpdateResolve<IClientTauriDatabaseMessage>> { + try { + const fields = log_error_validate_update_form_fields(opts.fields); + if (Array.isArray(fields)) return { err_s: fields }; + const args = log_error_parse_update_query(opts.filter, fields); + const response = await invoke<any>("model_log_error_update", { args } satisfies ILogErrorUpdateHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_pass_response(response)) return { pass: true }; + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_log_error_update", opts, e); + }; + } + + public async log_error_delete(args: ILogErrorDelete): Promise<ILogErrorDeleteResolve<IClientTauriDatabaseMessage>> { + try { + const response = await invoke<any>("model_log_error_delete", { args } satisfies ILogErrorDeleteHandler); + if (is_err_response(response)) return err_msg(response.err); + else if (is_pass_response(response)) return { pass: true }; + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_log_error_delete", args, e); + }; + } + + public async nostr_profile_relay_set(args: INostrProfileRelayRelation): Promise<INostrProfileRelayResolve<IClientTauriDatabaseMessage>> { + try { + const response = await invoke<any>("model_nostr_profile_relay_set", { args }); + if (response === true) return { pass: true }; + else if (typeof response === "string") return err_msg(response); + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_nostr_profile_relay_set", args, e); + }; + } + + public async nostr_profile_relay_unset(args: INostrProfileRelayRelation): Promise<INostrProfileRelayResolve<IClientTauriDatabaseMessage>> { + try { + const response = await invoke<any>("model_nostr_profile_relay_unset", { args }); + if (response === true) return { pass: true }; + else if (typeof response === "string") return err_msg(response); + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_nostr_profile_relay_unset", args, e); + }; + } + + public async trade_product_location_set(args: ITradeProductLocationRelation): Promise<ITradeProductLocationResolve<IClientTauriDatabaseMessage>> { + try { + const response = await invoke<any>("model_trade_product_location_set", { args }); + if (response === true) return { pass: true }; + else if (typeof response === "string") return err_msg(response); + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_trade_product_location_set", args, e); + }; + } + + public async trade_product_location_unset(args: ITradeProductLocationRelation): Promise<ITradeProductLocationResolve<IClientTauriDatabaseMessage>> { + try { + const response = await invoke<any>("model_trade_product_location_unset", { args }); + if (response === true) return { pass: true }; + else if (typeof response === "string") return err_msg(response); + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_trade_product_location_unset", args, e); + }; + } + + public async trade_product_media_set(args: ITradeProductMediaRelation): Promise<ITradeProductMediaResolve<IClientTauriDatabaseMessage>> { + try { + const response = await invoke<any>("model_trade_product_media_set", { args }); + if (response === true) return { pass: true }; + else if (typeof response === "string") return err_msg(response); + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_trade_product_media_set", args, e); + }; + } + + public async trade_product_media_unset(args: ITradeProductMediaRelation): Promise<ITradeProductMediaResolve<IClientTauriDatabaseMessage>> { + try { + const response = await invoke<any>("model_trade_product_media_unset", { args }); + if (response === true) return { pass: true }; + else if (typeof response === "string") return err_msg(response); + return err_msg("*-result"); + } catch (e) { + return this.handle_errors("model_trade_product_media_unset", args, e); + }; + } +} +\ No newline at end of file diff --git a/client/src/database/tauri/types.ts b/client/src/database/tauri/types.ts @@ -0,0 +1,39 @@ +import { type ILocationGcsCreate, type ILocationGcsCreateResolve, type ILocationGcsDelete, type ILocationGcsDeleteResolve, type ILocationGcsRead, type ILocationGcsReadList, type ILocationGcsReadListResolve, type ILocationGcsReadResolve, type ILocationGcsUpdate, type ILocationGcsUpdateResolve, type ILogErrorCreate, type ILogErrorCreateResolve, type ILogErrorDelete, type ILogErrorDeleteResolve, type ILogErrorRead, type ILogErrorReadList, type ILogErrorReadListResolve, type ILogErrorReadResolve, type ILogErrorUpdate, type ILogErrorUpdateResolve, type IMediaImageCreate, type IMediaImageCreateResolve, type IMediaImageDelete, type IMediaImageDeleteResolve, type IMediaImageRead, type IMediaImageReadList, type IMediaImageReadListResolve, type IMediaImageReadResolve, type IMediaImageUpdate, type IMediaImageUpdateResolve, type INostrProfileCreate, type INostrProfileCreateResolve, type INostrProfileDelete, type INostrProfileDeleteResolve, type INostrProfileRead, type INostrProfileReadList, type INostrProfileReadListResolve, type INostrProfileReadResolve, type INostrProfileUpdate, type INostrProfileUpdateResolve, type INostrRelayCreate, type INostrRelayCreateResolve, type INostrRelayDelete, type INostrRelayDeleteResolve, type INostrRelayRead, type INostrRelayReadList, type INostrRelayReadListResolve, type INostrRelayReadResolve, type INostrRelayUpdate, type INostrRelayUpdateResolve, type ITradeProductCreate, type ITradeProductCreateResolve, type ITradeProductDelete, type ITradeProductDeleteResolve, type ITradeProductRead, type ITradeProductReadList, type ITradeProductReadListResolve, type ITradeProductReadResolve, type ITradeProductUpdate, type ITradeProductUpdateResolve } from "@radroots/models"; + +export type IClientTauriDatabaseMessage = + | string + | "*-fields" + | "*-result"; + +export type IClientTauriDatabase = { + location_gcs_create(opts: ILocationGcsCreate): Promise<ILocationGcsCreateResolve<IClientTauriDatabaseMessage>>; + location_gcs_read(opts: ILocationGcsRead): Promise<ILocationGcsReadResolve<IClientTauriDatabaseMessage>>; + location_gcs_read_list(opts: ILocationGcsReadList): Promise<ILocationGcsReadListResolve<IClientTauriDatabaseMessage>>; + location_gcs_delete(opts: ILocationGcsDelete): Promise<ILocationGcsDeleteResolve<IClientTauriDatabaseMessage>>; + location_gcs_update(opts: ILocationGcsUpdate): Promise<ILocationGcsUpdateResolve<IClientTauriDatabaseMessage>>; + trade_product_create(opts: ITradeProductCreate): Promise<ITradeProductCreateResolve<IClientTauriDatabaseMessage>>; + trade_product_read(opts: ITradeProductRead): Promise<ITradeProductReadResolve<IClientTauriDatabaseMessage>>; + trade_product_read_list(opts: ITradeProductReadList): Promise<ITradeProductReadListResolve<IClientTauriDatabaseMessage>>; + trade_product_delete(opts: ITradeProductDelete): Promise<ITradeProductDeleteResolve<IClientTauriDatabaseMessage>>; + trade_product_update(opts: ITradeProductUpdate): Promise<ITradeProductUpdateResolve<IClientTauriDatabaseMessage>>; + nostr_profile_create(opts: INostrProfileCreate): Promise<INostrProfileCreateResolve<IClientTauriDatabaseMessage>>; + nostr_profile_read(opts: INostrProfileRead): Promise<INostrProfileReadResolve<IClientTauriDatabaseMessage>>; + nostr_profile_read_list(opts: INostrProfileReadList): Promise<INostrProfileReadListResolve<IClientTauriDatabaseMessage>>; + nostr_profile_delete(opts: INostrProfileDelete): Promise<INostrProfileDeleteResolve<IClientTauriDatabaseMessage>>; + nostr_profile_update(opts: INostrProfileUpdate): Promise<INostrProfileUpdateResolve<IClientTauriDatabaseMessage>>; + nostr_relay_create(opts: INostrRelayCreate): Promise<INostrRelayCreateResolve<IClientTauriDatabaseMessage>>; + nostr_relay_read(opts: INostrRelayRead): Promise<INostrRelayReadResolve<IClientTauriDatabaseMessage>>; + nostr_relay_read_list(opts: INostrRelayReadList): Promise<INostrRelayReadListResolve<IClientTauriDatabaseMessage>>; + nostr_relay_delete(opts: INostrRelayDelete): Promise<INostrRelayDeleteResolve<IClientTauriDatabaseMessage>>; + nostr_relay_update(opts: INostrRelayUpdate): Promise<INostrRelayUpdateResolve<IClientTauriDatabaseMessage>>; + media_image_create(opts: IMediaImageCreate): Promise<IMediaImageCreateResolve<IClientTauriDatabaseMessage>>; + media_image_read(opts: IMediaImageRead): Promise<IMediaImageReadResolve<IClientTauriDatabaseMessage>>; + media_image_read_list(opts: IMediaImageReadList): Promise<IMediaImageReadListResolve<IClientTauriDatabaseMessage>>; + media_image_delete(opts: IMediaImageDelete): Promise<IMediaImageDeleteResolve<IClientTauriDatabaseMessage>>; + media_image_update(opts: IMediaImageUpdate): Promise<IMediaImageUpdateResolve<IClientTauriDatabaseMessage>>; + log_error_create(opts: ILogErrorCreate): Promise<ILogErrorCreateResolve<IClientTauriDatabaseMessage>>; + log_error_read(opts: ILogErrorRead): Promise<ILogErrorReadResolve<IClientTauriDatabaseMessage>>; + log_error_read_list(opts: ILogErrorReadList): Promise<ILogErrorReadListResolve<IClientTauriDatabaseMessage>>; + log_error_delete(opts: ILogErrorDelete): Promise<ILogErrorDeleteResolve<IClientTauriDatabaseMessage>>; + log_error_update(opts: ILogErrorUpdate): Promise<ILogErrorUpdateResolve<IClientTauriDatabaseMessage>>; +}; +\ No newline at end of file diff --git a/client/src/database/types.ts b/client/src/database/types.ts @@ -1,70 +0,0 @@ -import { type ILocationGcsCreate, type ILocationGcsCreateResolve, type ILocationGcsDelete, type ILocationGcsDeleteResolve, type ILocationGcsRead, type ILocationGcsReadList, type ILocationGcsReadListResolve, type ILocationGcsReadResolve, type ILocationGcsUpdate, type ILocationGcsUpdateResolve, type ILogErrorCreate, type ILogErrorCreateResolve, type ILogErrorDelete, type ILogErrorDeleteResolve, type ILogErrorRead, type ILogErrorReadList, type ILogErrorReadListResolve, type ILogErrorReadResolve, type ILogErrorUpdate, type ILogErrorUpdateResolve, type IMediaImageCreate, type IMediaImageCreateResolve, type IMediaImageDelete, type IMediaImageDeleteResolve, type IMediaImageRead, type IMediaImageReadList, type IMediaImageReadListResolve, type IMediaImageReadResolve, type IMediaImageUpdate, type IMediaImageUpdateResolve, type INostrProfileCreate, type INostrProfileCreateResolve, type INostrProfileDelete, type INostrProfileDeleteResolve, type INostrProfileRead, type INostrProfileReadList, type INostrProfileReadListResolve, type INostrProfileReadResolve, type INostrProfileUpdate, type INostrProfileUpdateResolve, type INostrRelayCreate, type INostrRelayCreateResolve, type INostrRelayDelete, type INostrRelayDeleteResolve, type INostrRelayRead, type INostrRelayReadList, type INostrRelayReadListResolve, type INostrRelayReadResolve, type INostrRelayUpdate, type INostrRelayUpdateResolve, type ITradeProductCreate, type ITradeProductCreateResolve, type ITradeProductDelete, type ITradeProductDeleteResolve, type ITradeProductRead, type ITradeProductReadList, type ITradeProductReadListResolve, type ITradeProductReadResolve, type ITradeProductUpdate, type ITradeProductUpdateResolve } from "@radroots/models"; -import type { IClientDatabase } from "@radroots/util"; - -export type IClientTauriDatabaseMessage = - | string - | "*-fields" - | "*-result"; - -export type IClientTauriDatabase = IClientDatabase< - ILocationGcsCreate, - ILocationGcsCreateResolve<IClientTauriDatabaseMessage>, - ILocationGcsRead, - ILocationGcsReadResolve<IClientTauriDatabaseMessage>, - ILocationGcsReadList, - ILocationGcsReadListResolve<IClientTauriDatabaseMessage>, - ILocationGcsDelete, - ILocationGcsDeleteResolve<IClientTauriDatabaseMessage>, - ILocationGcsUpdate, - ILocationGcsUpdateResolve<IClientTauriDatabaseMessage>, - ITradeProductCreate, - ITradeProductCreateResolve<IClientTauriDatabaseMessage>, - ITradeProductRead, - ITradeProductReadResolve<IClientTauriDatabaseMessage>, - ITradeProductReadList, - ITradeProductReadListResolve<IClientTauriDatabaseMessage>, - ITradeProductDelete, - ITradeProductDeleteResolve<IClientTauriDatabaseMessage>, - ITradeProductUpdate, - ITradeProductUpdateResolve<IClientTauriDatabaseMessage>, - INostrProfileCreate, - INostrProfileCreateResolve<IClientTauriDatabaseMessage>, - INostrProfileRead, - INostrProfileReadResolve<IClientTauriDatabaseMessage>, - INostrProfileReadList, - INostrProfileReadListResolve<IClientTauriDatabaseMessage>, - INostrProfileDelete, - INostrProfileDeleteResolve<IClientTauriDatabaseMessage>, - INostrProfileUpdate, - INostrProfileUpdateResolve<IClientTauriDatabaseMessage>, - INostrRelayCreate, - INostrRelayCreateResolve<IClientTauriDatabaseMessage>, - INostrRelayRead, - INostrRelayReadResolve<IClientTauriDatabaseMessage>, - INostrRelayReadList, - INostrRelayReadListResolve<IClientTauriDatabaseMessage>, - INostrRelayDelete, - INostrRelayDeleteResolve<IClientTauriDatabaseMessage>, - INostrRelayUpdate, - INostrRelayUpdateResolve<IClientTauriDatabaseMessage>, - IMediaImageCreate, - IMediaImageCreateResolve<IClientTauriDatabaseMessage>, - IMediaImageRead, - IMediaImageReadResolve<IClientTauriDatabaseMessage>, - IMediaImageReadList, - IMediaImageReadListResolve<IClientTauriDatabaseMessage>, - IMediaImageDelete, - IMediaImageDeleteResolve<IClientTauriDatabaseMessage>, - IMediaImageUpdate, - IMediaImageUpdateResolve<IClientTauriDatabaseMessage>, - ILogErrorCreate, - ILogErrorCreateResolve<IClientTauriDatabaseMessage>, - ILogErrorRead, - ILogErrorReadResolve<IClientTauriDatabaseMessage>, - ILogErrorReadList, - ILogErrorReadListResolve<IClientTauriDatabaseMessage>, - ILogErrorDelete, - ILogErrorDeleteResolve<IClientTauriDatabaseMessage>, - ILogErrorUpdate, - ILogErrorUpdateResolve<IClientTauriDatabaseMessage> ->; diff --git a/client/src/datastore/tauri.ts b/client/src/datastore/tauri.ts @@ -1,7 +1,21 @@ -import { ds_map, ds_map_param, err_msg, type IClientDatastore, type IClientDatastoreEntriesResolve, type IClientDatastoreGetPResolve, type IClientDatastoreGetResolve, type IClientDatastoreKeysResolve, type IClientDatastoreRemoveResolve, type IClientDatastoreSetPResolve, type IClientDatastoreSetResolve } from '@radroots/util'; +import { err_msg, type IClientDatastore, type IClientDatastoreEntriesResolve, type IClientDatastoreGetPResolve, type IClientDatastoreGetResolve, type IClientDatastoreKeysResolve, type IClientDatastoreRemoveResolve, type IClientDatastoreSetPResolve, type IClientDatastoreSetResolve } from '@radroots/util'; import { load, Store } from '@tauri-apps/plugin-store'; -export class TauriClientDatastore implements IClientDatastore { +const ds_map_param = { + radroots_profile: (public_key: string) => `radroots:profile:${public_key}` +} as const; + +const ds_map = { + key_nostr: `nostr:publickey`, + role: `config:role`, + is_setup: `config:is_setup`, + eula: `eula:date` +} as const; + +export class TauriClientDatastore implements IClientDatastore< + typeof ds_map, + typeof ds_map_param +> { private _store: Store | null = null; private _store_path: string; diff --git a/client/src/http/tauri.ts b/client/src/http/tauri.ts @@ -1,29 +1,7 @@ -import { err_msg, http_fetch_opts, http_parse_response, type ErrorMessage, type FieldRecord, type IHttpImageResponse, type IHttpOpts, type IHttpResponse } from '@radroots/util'; +import { err_msg, http_fetch_opts, lib_http_parse_headers, lib_http_parse_response, type ErrorMessage, type FieldRecord, type IHttpImageResponse, type IHttpOpts, type IHttpResponse } from '@radroots/util'; import { fetch, type ClientOptions } from '@tauri-apps/plugin-http'; import type { IClientHttp } from './types'; -const parse_headers = (headers: Headers): FieldRecord => { - const acc: FieldRecord = {}; - headers.forEach((value, key) => acc[key] = value); - return acc; -}; - -const to_bodyinit = (data: any): BodyInit => { - if (typeof data === 'string') { - return data; - } else if (data instanceof FormData) { - return data; - } else if (data instanceof Blob) { - return data; - } else if (data instanceof ArrayBuffer) { - return data; - } else if (data instanceof URLSearchParams) { - return data; - } else { - return JSON.stringify(data); - } -} - export class TauriClientHttp implements IClientHttp { private _headers: FieldRecord; @@ -47,7 +25,8 @@ export class TauriClientHttp implements IClientHttp { try { const { url, options } = http_fetch_opts(opts); const response = await fetch(url, options); - return http_parse_response(response); + console.log(`response `, response) + return lib_http_parse_response(response); } catch (e) { console.log(`e fetch`, e) return err_msg(String(e)); @@ -72,14 +51,14 @@ export class TauriClientHttp implements IClientHttp { status: response.status, url: response.url, blob, - headers: parse_headers(response.headers) + headers: lib_http_parse_headers(response.headers) }; } case false: { return { status: response.status, url: response.url, - headers: parse_headers(response.headers) + headers: lib_http_parse_headers(response.headers) }; } } diff --git a/client/src/index.ts b/client/src/index.ts @@ -1,6 +1,5 @@ - -export * from "./database/tauri" -export * from "./database/types" +export * from "./database/tauri/lib" +export * from "./database/tauri/types" export * from "./datastore/tauri" export * from "./fs/tauri" export * from "./fs/types" @@ -17,4 +16,3 @@ export * from "./radroots/tauri" export * from "./radroots/types" export * from "./types" export * from "./util" - diff --git a/client/src/radroots/tauri.ts b/client/src/radroots/tauri.ts @@ -1,8 +1,8 @@ +import { lib_nostr_event_sign_attest } from '@radroots/nostr-util'; import { err_msg, type IHttpResponse, is_err_response, is_error_response } from '@radroots/util'; import { lib_http } from '../lib'; import type { IClientRadroots, IClientRadrootsFetchMediaImageUpload, IClientRadrootsFetchMediaImageUploadResolve, IClientRadrootsFetchProfileActivate, IClientRadrootsFetchProfileActivateResolve, IClientRadrootsFetchProfileCreate, IClientRadrootsFetchProfileCreateResolve, IClientRadrootsFetchProfileRequest, IClientRadrootsFetchProfileRequestResolve } from './types'; -import { lib_nostr_event_sign_attest } from '@radroots/nostr-util'; export class TauriClientRadroots implements IClientRadroots { private _base_url: string; @@ -32,7 +32,7 @@ export class TauriClientRadroots implements IClientRadroots { } }); if (is_err_response(res)) return res; - if (is_error_response(res)) err_msg(res.error); + if (is_error_response(res)) return err_msg(res.error); else if (this.is_res_pass(res)) { const tok = this.parse_res_field(res.data.tok); if (tok) return { result: res.data.tok }; @@ -51,7 +51,7 @@ export class TauriClientRadroots implements IClientRadroots { authorization: tok, }); if (is_err_response(res)) return res; - if (is_error_response(res)) err_msg(res.error); + if (is_error_response(res)) return err_msg(res.error); else if (this.is_res_pass(res)) { const id = this.parse_res_field(res.data.id); if (id) return { result: id }; @@ -72,7 +72,7 @@ export class TauriClientRadroots implements IClientRadroots { } }); if (is_err_response(res)) return res; - if (is_error_response(res)) err_msg(res.error); + if (is_error_response(res)) return err_msg(res.error); else if (this.is_res_pass(res)) return { pass: true }; return err_msg(`error.client.request_failure`); } @@ -89,7 +89,7 @@ export class TauriClientRadroots implements IClientRadroots { data_bin: file_data, }); if (is_err_response(res)) return res; - if (is_error_response(res)) err_msg(res.error); + if (is_error_response(res)) return err_msg(res.error); else if ( this.is_res_pass(res) && `res_base` in res.data &&