11import { UUID , EJSON } from 'bson' ;
22import { UserData , type z } from '@mongodb-js/compass-user-data' ;
3- import { RecentQuerySchema , FavoriteQuerySchema } from './query-storage-schema' ;
3+ import {
4+ RecentQuerySchema ,
5+ FavoriteQuerySchema ,
6+ type RecentQuery ,
7+ type FavoriteQuery ,
8+ } from './query-storage-schema' ;
49import type { FavoriteQueryStorage , RecentQueryStorage } from './query-storage' ;
510
611export type QueryStorageOptions = {
712 basepath ?: string ;
813} ;
914
10- export abstract class CompassQueryStorage < T extends typeof RecentQuerySchema > {
11- protected readonly userData : UserData < T > ;
15+ export interface QueryStorageBackend < TData > {
16+ loadAll ( namespace ?: string ) : Promise < TData [ ] > ;
17+ updateAttributes ( id : string , data : Partial < TData > ) : Promise < TData > ;
18+ delete ( id : string ) : Promise < boolean > ;
19+ saveQuery ( data : Omit < TData , '_id' | '_lastExecuted' > ) : Promise < void > ;
20+ }
21+
22+ export abstract class CompassQueryStorage <
23+ TSchema extends z . Schema ,
24+ TData extends z . output < TSchema > = z . output < TSchema >
25+ > implements QueryStorageBackend < TData >
26+ {
27+ protected readonly userData : UserData < TSchema > ;
1228 constructor (
13- schemaValidator : T ,
29+ schemaValidator : TSchema ,
1430 protected readonly folder : string ,
1531 protected readonly options : QueryStorageOptions
1632 ) {
@@ -22,7 +38,7 @@ export abstract class CompassQueryStorage<T extends typeof RecentQuerySchema> {
2238 } ) ;
2339 }
2440
25- async loadAll ( namespace ?: string ) : Promise < z . output < T > [ ] > {
41+ async loadAll ( namespace ?: string ) : Promise < TData [ ] > {
2642 try {
2743 const { data } = await this . userData . readAll ( ) ;
2844 const sortedData = data
@@ -36,10 +52,7 @@ export abstract class CompassQueryStorage<T extends typeof RecentQuerySchema> {
3652 }
3753 }
3854
39- async updateAttributes (
40- id : string ,
41- data : Partial < z . input < T > >
42- ) : Promise < z . output < T > > {
55+ async updateAttributes ( id : string , data : Partial < TData > ) : Promise < TData > {
4356 await this . userData . write ( id , {
4457 ...( ( await this . userData . readOne ( id ) ) ?? { } ) ,
4558 ...data ,
@@ -50,10 +63,12 @@ export abstract class CompassQueryStorage<T extends typeof RecentQuerySchema> {
5063 async delete ( id : string ) {
5164 return await this . userData . delete ( id ) ;
5265 }
66+
67+ abstract saveQuery ( data : any ) : Promise < void > ;
5368}
5469
5570export class CompassRecentQueryStorage
56- extends CompassQueryStorage < typeof RecentQuerySchema >
71+ extends CompassQueryStorage < typeof RecentQuerySchema , RecentQuery >
5772 implements RecentQueryStorage
5873{
5974 private readonly maxAllowedQueries = 30 ;
@@ -83,7 +98,7 @@ export class CompassRecentQueryStorage
8398}
8499
85100export class CompassFavoriteQueryStorage
86- extends CompassQueryStorage < typeof FavoriteQuerySchema >
101+ extends CompassQueryStorage < typeof FavoriteQuerySchema , FavoriteQuery >
87102 implements FavoriteQueryStorage
88103{
89104 constructor ( options : QueryStorageOptions = { } ) {
0 commit comments