2
0
mirror of https://github.com/frappe/books.git synced 2024-09-20 11:29:00 +00:00
books/fyo/demux/db.ts

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

113 lines
2.7 KiB
TypeScript
Raw Normal View History

2022-03-31 09:04:30 +00:00
import { ipcRenderer } from 'electron';
import { DEFAULT_COUNTRY_CODE } from 'fyo/utils/consts';
import { SchemaMap } from 'schemas/types';
import { DatabaseDemuxBase, DatabaseMethod } from 'utils/db/types';
import { DatabaseResponse } from 'utils/ipc/types';
2022-03-31 09:04:30 +00:00
import { IPC_ACTIONS } from 'utils/messages';
export class DatabaseDemux extends DatabaseDemuxBase {
2022-03-31 09:04:30 +00:00
#isElectron: boolean = false;
constructor(isElectron: boolean) {
super();
2022-03-31 09:04:30 +00:00
this.#isElectron = isElectron;
}
async getSchemaMap(): Promise<SchemaMap> {
let response: DatabaseResponse;
if (this.#isElectron) {
response = await ipcRenderer.invoke(IPC_ACTIONS.DB_SCHEMA);
} else {
// TODO: API Call
response = { error: '', data: undefined };
}
if (response.error) {
throw new Error(response.error);
}
return response.data as SchemaMap;
}
async createNewDatabase(
dbPath: string,
countryCode?: string
): Promise<string> {
2022-03-31 09:04:30 +00:00
let response: DatabaseResponse;
if (this.#isElectron) {
response = await ipcRenderer.invoke(
IPC_ACTIONS.DB_CREATE,
dbPath,
countryCode
);
} else {
// TODO: API Call
response = { error: '', data: undefined };
}
if (response.error) {
throw new Error(response.error);
}
return (response.data ?? DEFAULT_COUNTRY_CODE) as string;
2022-03-31 09:04:30 +00:00
}
async connectToDatabase(
dbPath: string,
countryCode?: string
): Promise<string> {
2022-03-31 09:04:30 +00:00
let response: DatabaseResponse;
if (this.#isElectron) {
response = await ipcRenderer.invoke(
IPC_ACTIONS.DB_CONNECT,
dbPath,
countryCode
);
} else {
// TODO: API Call
response = { error: '', data: undefined };
}
if (response.error) {
throw new Error(response.error);
}
return (response.data ?? DEFAULT_COUNTRY_CODE) as string;
2022-03-31 09:04:30 +00:00
}
async call(method: DatabaseMethod, ...args: unknown[]): Promise<unknown> {
let response: DatabaseResponse;
if (this.#isElectron) {
response = await ipcRenderer.invoke(IPC_ACTIONS.DB_CALL, method, ...args);
} else {
// TODO: API Call
response = { error: '', data: undefined };
}
if (response.error) {
throw new Error(response.error);
}
return response.data;
}
async callBespoke(method: string, ...args: unknown[]): Promise<unknown> {
let response: DatabaseResponse;
if (this.#isElectron) {
response = await ipcRenderer.invoke(
IPC_ACTIONS.DB_BESPOKE,
method,
...args
);
} else {
// TODO: API Call
response = { error: '', data: undefined };
}
if (response.error) {
throw new Error(response.error);
}
return response.data;
}
2022-03-31 09:04:30 +00:00
}