import { base } from '@repo/data';
// Create a logging provider wrapper
const withLogging = (provider) => {
return {
getList: async (params) => {
console.log('Getting list', params);
const result = await provider.getList(params);
console.log('Got list', result);
return result;
},
getOne: async (params) => {
console.log('Getting one', params);
const result = await provider.getOne(params);
console.log('Got one', result);
return result;
},
create: async (params) => {
console.log('Creating', params);
const result = await provider.create(params);
console.log('Created', result);
return result;
},
update: async (params) => {
console.log('Updating', params);
const result = await provider.update(params);
console.log('Updated', result);
return result;
},
delete: async (params) => {
console.log('Deleting', params);
const result = await provider.delete(params);
console.log('Deleted', result);
return result;
}
};
};
// Create a caching provider wrapper
const withCaching = (provider) => {
const cache = new Map();
return {
getList: async (params) => {
const cacheKey = `getList:${params.resource}:${JSON.stringify(params)}`;
if (cache.has(cacheKey)) {
return cache.get(cacheKey);
}
const result = await provider.getList(params);
cache.set(cacheKey, result);
return result;
},
getOne: async (params) => {
const cacheKey = `getOne:${params.resource}:${params.id}`;
if (cache.has(cacheKey)) {
return cache.get(cacheKey);
}
const result = await provider.getOne(params);
cache.set(cacheKey, result);
return result;
},
create: async (params) => {
const result = await provider.create(params);
// Invalidate cache for this resource
invalidateCache(params.resource);
return result;
},
update: async (params) => {
const result = await provider.update(params);
// Invalidate cache for this resource
invalidateCache(params.resource);
return result;
},
delete: async (params) => {
const result = await provider.delete(params);
// Invalidate cache for this resource
invalidateCache(params.resource);
return result;
}
};
function invalidateCache(resource) {
for (const key of cache.keys()) {
if (key.includes(`:${resource}:`)) {
cache.delete(key);
}
}
}
};
// Compose providers
const baseProvider = providers.supabase.createProvider({
url: process.env.SUPABASE_URL,
key: process.env.SUPABASE_KEY
});
const enhancedProvider = withCaching(withLogging(baseProvider));