schema/edge: add annotation support for edges (#651)

This commit is contained in:
Ariel Mashraki
2020-08-01 15:38:47 +03:00
committed by GitHub
parent e9b406ca65
commit 05dfd6b78b
11 changed files with 136 additions and 71 deletions

File diff suppressed because one or more lines are too long

View File

@@ -57,15 +57,16 @@ type Field struct {
// Edge represents an ent.Edge that was loaded from a complied user package.
type Edge struct {
Name string `json:"name,omitempty"`
Type string `json:"type,omitempty"`
Tag string `json:"tag,omitempty"`
RefName string `json:"ref_name,omitempty"`
Ref *Edge `json:"ref,omitempty"`
Unique bool `json:"unique,omitempty"`
Inverse bool `json:"inverse,omitempty"`
Required bool `json:"required,omitempty"`
StorageKey *edge.StorageKey `json:"storage_key,omitempty"`
Name string `json:"name,omitempty"`
Type string `json:"type,omitempty"`
Tag string `json:"tag,omitempty"`
RefName string `json:"ref_name,omitempty"`
Ref *Edge `json:"ref,omitempty"`
Unique bool `json:"unique,omitempty"`
Inverse bool `json:"inverse,omitempty"`
Required bool `json:"required,omitempty"`
StorageKey *edge.StorageKey `json:"storage_key,omitempty"`
Annotations map[string]interface{} `json:"annotations,omitempty"`
}
// Index represents an ent.Index that was loaded from a complied user package.
@@ -79,14 +80,18 @@ type Index struct {
// NewEdge creates an loaded edge from edge descriptor.
func NewEdge(ed *edge.Descriptor) *Edge {
ne := &Edge{
Tag: ed.Tag,
Type: ed.Type,
Name: ed.Name,
Unique: ed.Unique,
Inverse: ed.Inverse,
Required: ed.Required,
RefName: ed.RefName,
StorageKey: ed.StorageKey,
Tag: ed.Tag,
Type: ed.Type,
Name: ed.Name,
Unique: ed.Unique,
Inverse: ed.Inverse,
Required: ed.Required,
RefName: ed.RefName,
StorageKey: ed.StorageKey,
Annotations: make(map[string]interface{}),
}
for _, at := range ed.Annotations {
ne.Annotations[at.Name()] = at
}
if ref := ed.Ref; ref != nil {
ne.Ref = NewEdge(ref)

View File

@@ -60,7 +60,8 @@ func (User) Fields() []ent.Field {
func (User) Edges() []ent.Edge {
return []ent.Edge{
edge.To("groups", Group.Type),
edge.To("groups", Group.Type).
Annotations(&OrderConfig{FieldName: "name"}),
edge.To("parent", User.Type).
Unique().
StorageKey(edge.Column("user_parent_id")).
@@ -139,6 +140,10 @@ func TestMarshalSchema(t *testing.T) {
require.Equal(t, "groups", schema.Edges[0].Name)
require.Equal(t, "Group", schema.Edges[0].Type)
require.False(t, schema.Edges[0].Inverse)
require.NotEmpty(t, schema.Edges[0].Annotations)
ant = schema.Edges[0].Annotations["order_config"].(map[string]interface{})
require.Equal(t, ant["FieldName"], "name")
require.Equal(t, "children", schema.Edges[1].Name)
require.Equal(t, "user_parent_id", schema.Edges[1].StorageKey.Columns[0])
require.Equal(t, "User", schema.Edges[1].Type)