mcp-talent-server
Version:
Model Context Protocol server for talent management tools
76 lines • 2.52 kB
JavaScript
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