mirror of
https://github.com/ent/ent.git
synced 2026-05-24 09:31:56 +03:00
schema/edge: add annotation support for edges (#651)
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user