@ -10,6 +10,7 @@
* - Mixin pattern for easy integration with existing class components
* - Enhanced utility methods for common patterns
* - Robust error handling and logging
* - Ultra - concise database interaction methods
*
* Benefits :
* - Eliminates repeated PlatformServiceFactory . getInstance ( ) calls
@ -18,15 +19,17 @@
* - Maintains type safety with TypeScript
* - Includes common database utility patterns
* - Enhanced error handling and logging
* - Ultra - concise method names for frequent operations
*
* @author Matthew Raymer
* @version 2 .0. 0
* @version 3 .0. 0
* @since 2025 - 07 - 02
* /
import { PlatformServiceFactory } from "@/services/PlatformServiceFactory" ;
import type { PlatformService } from "@/services/PlatformService" ;
import { mapColumnsToValues , parseJsonField } from "@/db/databaseUtil" ;
import { MASTER_SETTINGS_KEY } from "@/db/tables/settings" ;
/ * *
* Enhanced mixin that provides cached platform service access and utility methods
@ -284,6 +287,103 @@ export const PlatformServiceMixin = {
throw error ;
}
} ,
// =================================================
// ULTRA-CONCISE DATABASE METHODS (shortest names)
// =================================================
/ * *
* Ultra - short database query - just $db ( )
* @param sql SQL query string
* @param params Query parameters
* /
async $db ( sql : string , params : unknown [ ] = [ ] ) : Promise < any > {
return await ( this as any ) . platformService . dbQuery ( sql , params ) ;
} ,
/ * *
* Ultra - short database exec - just $exec ( )
* @param sql SQL statement string
* @param params Statement parameters
* /
async $exec ( sql : string , params : unknown [ ] = [ ] ) : Promise < any > {
return await ( this as any ) . platformService . dbExec ( sql , params ) ;
} ,
/ * *
* Ultra - short single row query - just $one ( )
* @param sql SQL query string
* @param params Query parameters
* /
async $one ( sql : string , params : unknown [ ] = [ ] ) : Promise < any > {
return await ( this as any ) . platformService . dbGetOneRow ( sql , params ) ;
} ,
// =================================================
// QUERY + MAPPING COMBO METHODS (ultimate conciseness)
// =================================================
/ * *
* Query with automatic result mapping - $query ( )
* Combines database query + mapping in one call
* @param sql SQL query string
* @param params Query parameters
* @returns Mapped array of results
* /
async $query ( sql : string , params : unknown [ ] = [ ] ) : Promise < any [ ] > {
const result = await ( this as any ) . platformService . dbQuery ( sql , params ) ;
if ( ! result ? . columns || ! result ? . values ) {
return [ ] ;
}
return mapColumnsToValues ( result . columns , result . values ) || [ ] ;
} ,
/ * *
* Get first result with automatic mapping - $first ( )
* @param sql SQL query string
* @param params Query parameters
* @returns First mapped result or null
* /
async $first ( sql : string , params : unknown [ ] = [ ] ) : Promise < any | null > {
const results = await ( this as any ) . $query ( sql , params ) ;
return results . length > 0 ? results [ 0 ] : null ;
} ,
// =================================================
// SPECIALIZED SHORTCUTS (common patterns)
// =================================================
/ * *
* Load all contacts in one call - $contacts ( )
* Ultra - concise shortcut for the most common query
* @returns Mapped array of all contacts
* /
async $contacts ( ) : Promise < any [ ] > {
return await ( this as any ) . $query ( "SELECT * FROM contacts ORDER BY name" ) ;
} ,
/ * *
* Load settings with optional defaults - $settings ( )
* @param defaults Optional default values
* @returns Settings object
* /
async $settings ( defaults : any = { } ) : Promise < any > {
return await ( this as any ) . $getSettings ( MASTER_SETTINGS_KEY , defaults ) ;
} ,
/ * *
* Load account - specific settings - $accountSettings ( )
* @param did DID identifier ( optional , uses current active DID )
* @param defaults Optional default values
* @returns Merged settings object
* /
async $accountSettings ( did? : string , defaults : any = { } ) : Promise < any > {
const currentDid = did || ( this as any ) . activeDid ;
if ( ! currentDid ) {
return await ( this as any ) . $settings ( defaults ) ;
}
return await ( this as any ) . $getMergedSettings ( MASTER_SETTINGS_KEY , currentDid , defaults ) ;
} ,
} ,
} ;
@ -307,3 +407,37 @@ export interface IPlatformServiceMixin {
isElectron : boolean ;
capabilities : any ;
}
// TypeScript declaration merging to eliminate (this as any) type assertions
declare module "@vue/runtime-core" {
interface ComponentCustomProperties {
// Core platform service access
platformService : PlatformService ;
isCapacitor : boolean ;
isWeb : boolean ;
isElectron : boolean ;
capabilities : any ;
// Ultra-concise database methods (shortest possible names)
$db ( sql : string , params? : unknown [ ] ) : Promise < any > ;
$exec ( sql : string , params? : unknown [ ] ) : Promise < any > ;
$one ( sql : string , params? : unknown [ ] ) : Promise < any > ;
// Query + mapping combo methods
$query ( sql : string , params? : unknown [ ] ) : Promise < any [ ] > ;
$first ( sql : string , params? : unknown [ ] ) : Promise < any | null > ;
// Enhanced utility methods
$dbQuery ( sql : string , params? : unknown [ ] ) : Promise < any > ;
$dbExec ( sql : string , params? : unknown [ ] ) : Promise < any > ;
$dbGetOneRow ( sql : string , params? : unknown [ ] ) : Promise < any > ;
$getSettings ( key : string , defaults? : any ) : Promise < any > ;
$getMergedSettings ( key : string , did? : string , defaults? : any ) : Promise < any > ;
$withTransaction < T > ( fn : ( ) = > Promise < T > ) : Promise < T > ;
// Specialized shortcuts for ultra-common patterns
$contacts ( ) : Promise < any [ ] > ;
$settings ( defaults? : any ) : Promise < any > ;
$accountSettings ( did? : string , defaults? : any ) : Promise < any > ;
}
}