mirror of
https://github.com/bitechdev/ResolveSpec.git
synced 2026-04-05 07:32:26 +00:00
* Implement hooks for CRUD operations: before/after handle, read, create, update, delete. * Introduce HookContext and HookRegistry for managing hooks. * Allow registration and execution of multiple hooks per operation. feat(resolvemcp): implement MCP tools for CRUD operations * Register tools for reading, creating, updating, and deleting records. * Define tool arguments and handle requests with appropriate responses. * Support for resource registration with metadata. fix(restheadspec): enhance cursor handling for joins * Improve cursor filter generation to support lateral joins. * Update join alias extraction to handle lateral joins correctly. * Ensure cursor filters do not contain empty comparisons. test(restheadspec): add tests for cursor filters and join alias extraction * Create tests for lateral join scenarios in cursor filter generation. * Validate join alias extraction for various join types, including lateral joins.
72 lines
1.8 KiB
Go
72 lines
1.8 KiB
Go
package resolvemcp
|
|
|
|
import "context"
|
|
|
|
type contextKey string
|
|
|
|
const (
|
|
contextKeySchema contextKey = "schema"
|
|
contextKeyEntity contextKey = "entity"
|
|
contextKeyTableName contextKey = "tableName"
|
|
contextKeyModel contextKey = "model"
|
|
contextKeyModelPtr contextKey = "modelPtr"
|
|
)
|
|
|
|
func WithSchema(ctx context.Context, schema string) context.Context {
|
|
return context.WithValue(ctx, contextKeySchema, schema)
|
|
}
|
|
|
|
func GetSchema(ctx context.Context) string {
|
|
if v := ctx.Value(contextKeySchema); v != nil {
|
|
return v.(string)
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func WithEntity(ctx context.Context, entity string) context.Context {
|
|
return context.WithValue(ctx, contextKeyEntity, entity)
|
|
}
|
|
|
|
func GetEntity(ctx context.Context) string {
|
|
if v := ctx.Value(contextKeyEntity); v != nil {
|
|
return v.(string)
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func WithTableName(ctx context.Context, tableName string) context.Context {
|
|
return context.WithValue(ctx, contextKeyTableName, tableName)
|
|
}
|
|
|
|
func GetTableName(ctx context.Context) string {
|
|
if v := ctx.Value(contextKeyTableName); v != nil {
|
|
return v.(string)
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func WithModel(ctx context.Context, model interface{}) context.Context {
|
|
return context.WithValue(ctx, contextKeyModel, model)
|
|
}
|
|
|
|
func GetModel(ctx context.Context) interface{} {
|
|
return ctx.Value(contextKeyModel)
|
|
}
|
|
|
|
func WithModelPtr(ctx context.Context, modelPtr interface{}) context.Context {
|
|
return context.WithValue(ctx, contextKeyModelPtr, modelPtr)
|
|
}
|
|
|
|
func GetModelPtr(ctx context.Context) interface{} {
|
|
return ctx.Value(contextKeyModelPtr)
|
|
}
|
|
|
|
func withRequestData(ctx context.Context, schema, entity, tableName string, model, modelPtr interface{}) context.Context {
|
|
ctx = WithSchema(ctx, schema)
|
|
ctx = WithEntity(ctx, entity)
|
|
ctx = WithTableName(ctx, tableName)
|
|
ctx = WithModel(ctx, model)
|
|
ctx = WithModelPtr(ctx, modelPtr)
|
|
return ctx
|
|
}
|