MCPcopy Create free account
hub / github.com/Permify/permify / Write

Method Write

internal/servers/schema_server.go:46–89  ·  view source on GitHub ↗

Write - Configure new Permify Schema to Permify

(ctx context.Context, request *v1.SchemaWriteRequest)

Source from the content-addressed store, hash-verified

44
45// Write - Configure new Permify Schema to Permify
46func (r *SchemaServer) Write(ctx context.Context, request *v1.SchemaWriteRequest) (*v1.SchemaWriteResponse, error) {
47 ctx, span := internal.Tracer.Start(ctx, "schemas.write")
48 defer span.End()
49
50 sch, err := parser.NewParser(request.GetSchema()).Parse()
51 if err != nil {
52 span.RecordError(err)
53 span.SetStatus(otelCodes.Error, err.Error())
54 return nil, status.Error(GetStatus(err), err.Error()) // Return parse error
55 }
56
57 _, _, err = compiler.NewCompiler(true, sch).Compile()
58 if err != nil {
59 span.RecordError(err)
60 span.SetStatus(otelCodes.Error, err.Error())
61 return nil, status.Error(GetStatus(err), err.Error()) // Return compile error
62 }
63
64 version := xid.New().String()
65
66 cnf := make([]storage.SchemaDefinition, 0, len(sch.Statements))
67 for _, st := range sch.Statements {
68 cnf = append(cnf, storage.SchemaDefinition{
69 TenantID: request.GetTenantId(),
70 Version: version,
71 Name: st.GetName(),
72 SerializedDefinition: []byte(st.String()),
73 })
74 }
75
76 err = r.sw.WriteSchema(ctx, cnf)
77 if err != nil {
78 span.RecordError(err)
79 span.SetStatus(otelCodes.Error, err.Error())
80 slog.ErrorContext(ctx, err.Error())
81 return nil, status.Error(GetStatus(err), err.Error())
82 }
83
84 r.writeSchemaHistogram.Record(ctx, 1)
85
86 return &v1.SchemaWriteResponse{
87 SchemaVersion: version,
88 }, nil
89}
90
91// PartialWrite applies incremental updates to the schema of a specific tenant based on the provided request.
92func (r *SchemaServer) PartialWrite(ctx context.Context, request *v1.SchemaPartialWriteRequest) (*v1.SchemaPartialWriteResponse, error) {

Callers

nothing calls this directly

Implementers 1

UnimplementedSchemaServerpkg/pb/base/v1/service_grpc.pb.go

Calls 12

NewParserFunction · 0.92
NewCompilerFunction · 0.92
GetStatusFunction · 0.85
StartMethod · 0.80
ParseMethod · 0.80
CompileMethod · 0.80
StringMethod · 0.65
GetNameMethod · 0.65
WriteSchemaMethod · 0.65
GetSchemaMethod · 0.45
ErrorMethod · 0.45
GetTenantIdMethod · 0.45

Tested by

no test coverage detected