Skip to content

Commit 449589d

Browse files
committed
feat: implement saveMetaItem method and register PUT route for saving metadata items in RestServer
1 parent c46b4b0 commit 449589d

File tree

3 files changed

+43
-0
lines changed

3 files changed

+43
-0
lines changed

packages/metadata/src/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
// Main Manager
88
export { MetadataManager, type WatchCallback, type MetadataManagerOptions } from './metadata-manager.js';
99

10+
// Plugin
11+
export { MetadataPlugin } from './plugin.js';
12+
1013
// Loaders
1114
export { type MetadataLoader } from './loaders/loader-interface.js';
1215
export { MemoryLoader } from './loaders/memory-loader.js';

packages/objectql/src/protocol.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,4 +271,15 @@ export class ObjectStackProtocolImplementation implements ObjectStackProtocol {
271271
});
272272
}
273273

274+
async saveMetaItem(request: { type: string, name: string, item?: any }) {
275+
if (!request.item) {
276+
throw new Error('Item data is required');
277+
}
278+
// Default implementation saves to Memory Registry
279+
SchemaRegistry.registerItem(request.type, request.item, 'name');
280+
return {
281+
success: true,
282+
message: 'Saved to memory registry'
283+
};
284+
}
274285
}

packages/runtime/src/rest-server.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,35 @@ export class RestServer {
333333
},
334334
});
335335
}
336+
337+
// PUT /meta/:type/:name - Save metadata item
338+
// We always register this route, but return 501 if protocol doesn't support it
339+
// This makes it discoverable even if not implemented
340+
this.routeManager.register({
341+
method: 'PUT',
342+
path: `${metaPath}/:type/:name`,
343+
handler: async (req: any, res: any) => {
344+
try {
345+
if (!this.protocol.saveMetaItem) {
346+
res.status(501).json({ error: 'Save operation not supported by protocol implementation' });
347+
return;
348+
}
349+
350+
const result = await this.protocol.saveMetaItem({
351+
type: req.params.type,
352+
name: req.params.name,
353+
item: req.body
354+
});
355+
res.json(result);
356+
} catch (error: any) {
357+
res.status(400).json({ error: error.message });
358+
}
359+
},
360+
metadata: {
361+
summary: 'Save specific metadata item',
362+
tags: ['metadata'],
363+
},
364+
});
336365
}
337366

338367
/**

0 commit comments

Comments
 (0)