UNPKG

mcp-talent-server

Version:

Model Context Protocol server for talent management tools

76 lines 2.52 kB
import mongoose, { Schema } from "mongoose"; // Schema for tracking dynamic schemas per sheet const SheetSchemaTrackerSchema = new Schema({ sheetId: { type: String, required: true, unique: true }, userId: { type: String, required: true }, sheetName: { type: String, required: true }, schema: { type: Schema.Types.Mixed, required: true, default: {} }, fieldTypes: { type: Schema.Types.Mixed, required: true, default: {} }, nestedPaths: { type: [String], default: [] }, lastUpdated: { type: Date, default: Date.now }, version: { type: Number, default: 1 } }, { timestamps: true }); // Indexes SheetSchemaTrackerSchema.index({ userId: 1 }); const SheetSchemaTracker = mongoose.model("SheetSchemaTracker", SheetSchemaTrackerSchema); function parseSchema(schema, depth = 0) { if (!schema || typeof schema !== 'object') return null; // Handle multiple types with structure preservation if (schema.types) { const result = { dataTypes: schema.types }; // Add object properties if object is one of the types if (schema.types.includes('object') && schema.properties) { const properties = {}; for (const key in schema.properties) { properties[key] = parseSchema(schema.properties[key], depth + 1); } result.objectProperties = properties; } // Add array items if array is one of the types if (schema.types.includes('array') && schema.items) { result.arrayItems = parseSchema(schema.items, depth + 1); } return result; } // Handle single types if (schema.type === 'object' && schema.properties) { const result = {}; for (const key in schema.properties) { result[key] = parseSchema(schema.properties[key], depth + 1); } return result; } else if (schema.type === 'array' && schema.items) { return [parseSchema(schema.items, depth + 1)]; } else { return schema.type; } } async function getSchemas() { const schemas = await SheetSchemaTracker.find({}); return schemas.map((sheet) => { return { sheetId: sheet.sheetId, sheetName: sheet.sheetName, originalData: parseSchema(sheet.schema) }; }); ; } export { getSchemas, SheetSchemaTracker }; //# sourceMappingURL=sheet-schema-tracker.model.js.map