From 2c59a643dcecfb8e918ef0f62a61f9019700fb52 Mon Sep 17 00:00:00 2001 From: Dariusz Filipiak Date: Mon, 29 Apr 2024 17:35:16 +0200 Subject: [PATCH] $$$ update $$$ --- src/app.ts | 2 + src/lib/endpoint-context.ts | 139 +++++++++++++++++++++--------------- src/lib/models.ts | 3 +- 3 files changed, 86 insertions(+), 58 deletions(-) diff --git a/src/app.ts b/src/app.ts index 8b902ff5..ead1051e 100644 --- a/src/app.ts +++ b/src/app.ts @@ -90,6 +90,7 @@ class UserProvider extends Firedev.Base.Provider { } const UserContext = Firedev.createContext({ + contextName: 'UserContext', host: `http://localhost:${HOST_BACKEND_PORT}`, entities: { User, @@ -104,6 +105,7 @@ const UserContext = Firedev.createContext({ const AppContext = Firedev.createContext({ + contextName: 'AppContext', remoteHost: `http://localhost:${HOST_BACKEND_PORT}`, contexts: { UserContext }, }); diff --git a/src/lib/endpoint-context.ts b/src/lib/endpoint-context.ts index b9bc73b8..8a44e2ed 100644 --- a/src/lib/endpoint-context.ts +++ b/src/lib/endpoint-context.ts @@ -2,14 +2,14 @@ import { Models } from "./models"; import { ClassHelpers } from "./helpers/class-helpers"; import { Symbols } from "./symbols"; -import { _, Helpers } from 'tnp-core'; +import { _, Helpers } from 'tnp-core/src'; import type { createContext } from './create-context'; import { DIFiredevContainer } from "./dependency-injection/di-container"; import { FiredevControllerOptions } from "./decorators/classes/controller-decorator"; import { FiredevHelpers } from "./helpers/firedev-helpers"; import { Mapping, Models as ModelsNg2Rest, Resource, RestHeaders } from 'ng2-rest/src'; import { JSON10 } from 'json10/src'; -import { path } from 'tnp-core'; +import { path } from 'tnp-core/src'; import { from, Subject } from "rxjs"; import { EntityProcess } from "./entity-process"; import { getResponseValue } from "./get-response-value"; @@ -114,58 +114,71 @@ export class EndpointContext { //#region resolve database config if (config.database === true) { - switch (this.mode) { - - //#region resolve database config for mode backend-frontend(tcp+udp) - case 'backend-frontend(ipc-electron)': - this.databaseConfig = { - database: `firedev-db-${EndpointContext.endpointId++}.sqljs.db`, - type: 'sqljs', - autoSave: true, - synchronize: true, - dropSchema: true, - logging: true, - } - break; - //#endregion + if (Helpers.isRunningInDocker()) { + Helpers.info('Running in docker, using in mysql database'); + // TODO + this.databaseConfig = { + database: `firedev-db-${EndpointContext.endpointId++}.sqljs.db`, + type: 'mysql', + autoSave: true, + synchronize: true, + dropSchema: true, + logging: true, + } + } else { + Helpers.info(`Automatically resolving database config for mode ${this.mode}`); + switch (this.mode) { + + //#region resolve database config for mode backend-frontend(tcp+udp) + case 'backend-frontend(ipc-electron)': + this.databaseConfig = { + database: `firedev-db-${EndpointContext.endpointId++}.sqljs.db`, + type: 'sqljs', + autoSave: true, + synchronize: true, + dropSchema: true, + logging: true, + } + break; + //#endregion - //#region resolve database config for mode backend-frontend(websql) - case 'backend-frontend(websql)': - this.databaseConfig = { - location: `firedev-db-${EndpointContext.endpointId++}.sqljs.db`, - type: 'sqljs', - useLocalForage: !!window['localforage'], - autoSave: true, - synchronize: true, - dropSchema: true, - logging: true, - }; - - if (FiredevAdmin.Instance.keepWebsqlDbDataAfterReload) { - this.databaseConfig.dropSchema = false; - delete this.databaseConfig.synchronize // false is not auto synchonize - from what I understand - } else { - this.databaseConfig.dropSchema = true; - this.databaseConfig.synchronize = true; - } + //#region resolve database config for mode backend-frontend(websql) + case 'backend-frontend(websql)': + this.databaseConfig = { + location: `firedev-db-${EndpointContext.endpointId++}.sqljs.db`, + type: 'sqljs', + useLocalForage: !!window['localforage'], + autoSave: true, + synchronize: true, + dropSchema: true, + logging: true, + }; + + if (FiredevAdmin.Instance.keepWebsqlDbDataAfterReload) { + this.databaseConfig.dropSchema = false; + delete this.databaseConfig.synchronize // false is not auto synchonize - from what I understand + } else { + this.databaseConfig.dropSchema = true; + this.databaseConfig.synchronize = true; + } - break; - //#endregion + break; + //#endregion - //#region resolve database config for mode backend-frontend(tcp+udp) - case 'backend-frontend(tcp+udp)': - this.databaseConfig = { - database: `firedev-db-${EndpointContext.endpointId++}.sqlite`, - type: 'better-sqlite3', - autoSave: true, - synchronize: true, - dropSchema: true, - logging: true, - } - break; - //#endregion + //#region resolve database config for mode backend-frontend(tcp+udp) + case 'backend-frontend(tcp+udp)': + this.databaseConfig = { + database: `firedev-db-${EndpointContext.endpointId++}.sqlite`, + type: 'better-sqlite3', + autoSave: true, + synchronize: true, + dropSchema: true, + logging: true, + } + break; + //#endregion + } } - } else if (_.isObject(config.database)) { this.databaseConfig = _.cloneDeep(config.database) as Models.DatabaseConfig; } @@ -447,6 +460,15 @@ export class EndpointContext { } //#endregion + //#region methods & getters / public assets + /** + * ipc/udp needs this + */ + public get contextName() { + return this.config.contextName; + } + //#endregion + //#region methods & getters / public assets public get publicAssets() { return this.config?.publicAssets || []; @@ -471,7 +493,6 @@ export class EndpointContext { } //#endregion - //#region methods & getters / init subscribers async initSubscribers() { //#region @websql @@ -639,6 +660,7 @@ export class EndpointContext { } //#endregion + //#region methods & getters / data source config get dataSourceDbConfig() { const config = (this.config.database as Models.DatabaseConfig); return { @@ -653,6 +675,7 @@ export class EndpointContext { location: config.location, } as DataSourceOptions; } + //#endregion //#region methods & getters / init connection async initDatabaseConnection() { @@ -743,7 +766,7 @@ export class EndpointContext { ) { //#region @websql - const { routePath, method } = this.initMethodNodejs( + const { routePath, method } = this.initServer( type, methodConfig, classConfig, @@ -762,7 +785,6 @@ export class EndpointContext { //#endregion } - if (Helpers.isBrowser //#region @backend || this.remoteHost @@ -772,7 +794,7 @@ export class EndpointContext { //#endregion ) { - this.initMethodBrowser(controllerClassFn, type, methodConfig, expressPath) + this.initClient(controllerClassFn, type, methodConfig, expressPath) } }); @@ -915,7 +937,7 @@ export class EndpointContext { //#endregion //#region methods & getters / init methods node - private initMethodNodejs( + private initServer( //#region parameters type: Models.Http.Rest.HttpMethod, methodConfig: Models.MethodConfig, @@ -1162,8 +1184,11 @@ export class EndpointContext { } //#endregion - //#region methods & getters / init method browser - private initMethodBrowser( + //#region methods & getters / init client + /** + * client can be browser or nodejs (when remote host) + */ + private initClient( //#region parameters target: Function, type: Models.Http.Rest.HttpMethod, diff --git a/src/lib/models.ts b/src/lib/models.ts index 5fd78618..54bfc9da 100644 --- a/src/lib/models.ts +++ b/src/lib/models.ts @@ -37,7 +37,7 @@ export namespace Models { useLocalForage?: boolean; autoSave: boolean; // TODO what is this type?: CoreModels.DatabaseType; - databasePort ?: number; + databasePort?: number; databaseHost?: string; } //#endregion @@ -64,6 +64,7 @@ export namespace Models { //#region models / context options export interface ContextOptions { + contextName: string; host?: string; remoteHost?: string; useIpcWhenElectron?: boolean;