diff --git a/pkg/database/ent/decision.go b/pkg/database/ent/decision.go index 3600e3cfe..31ccd8c4b 100644 --- a/pkg/database/ent/decision.go +++ b/pkg/database/ent/decision.go @@ -22,7 +22,7 @@ type Decision struct { // UpdatedAt holds the value of the "updated_at" field. UpdatedAt *time.Time `json:"updated_at,omitempty"` // Until holds the value of the "until" field. - Until time.Time `json:"until,omitempty"` + Until *time.Time `json:"until,omitempty"` // Scenario holds the value of the "scenario" field. Scenario string `json:"scenario,omitempty"` // Type holds the value of the "type" field. @@ -128,7 +128,8 @@ func (d *Decision) assignValues(columns []string, values []interface{}) error { if value, ok := values[i].(*sql.NullTime); !ok { return fmt.Errorf("unexpected type %T for field until", values[i]) } else if value.Valid { - d.Until = value.Time + d.Until = new(time.Time) + *d.Until = value.Time } case decision.FieldScenario: if value, ok := values[i].(*sql.NullString); !ok { @@ -244,8 +245,10 @@ func (d *Decision) String() string { builder.WriteString(", updated_at=") builder.WriteString(v.Format(time.ANSIC)) } - builder.WriteString(", until=") - builder.WriteString(d.Until.Format(time.ANSIC)) + if v := d.Until; v != nil { + builder.WriteString(", until=") + builder.WriteString(v.Format(time.ANSIC)) + } builder.WriteString(", scenario=") builder.WriteString(d.Scenario) builder.WriteString(", type=") diff --git a/pkg/database/ent/decision/where.go b/pkg/database/ent/decision/where.go index 881fef90e..2d6b4d16d 100644 --- a/pkg/database/ent/decision/where.go +++ b/pkg/database/ent/decision/where.go @@ -447,6 +447,20 @@ func UntilLTE(v time.Time) predicate.Decision { }) } +// UntilIsNil applies the IsNil predicate on the "until" field. +func UntilIsNil() predicate.Decision { + return predicate.Decision(func(s *sql.Selector) { + s.Where(sql.IsNull(s.C(FieldUntil))) + }) +} + +// UntilNotNil applies the NotNil predicate on the "until" field. +func UntilNotNil() predicate.Decision { + return predicate.Decision(func(s *sql.Selector) { + s.Where(sql.NotNull(s.C(FieldUntil))) + }) +} + // ScenarioEQ applies the EQ predicate on the "scenario" field. func ScenarioEQ(v string) predicate.Decision { return predicate.Decision(func(s *sql.Selector) { diff --git a/pkg/database/ent/decision_create.go b/pkg/database/ent/decision_create.go index 33bff83fa..ab60433bc 100644 --- a/pkg/database/ent/decision_create.go +++ b/pkg/database/ent/decision_create.go @@ -55,6 +55,14 @@ func (dc *DecisionCreate) SetUntil(t time.Time) *DecisionCreate { return dc } +// SetNillableUntil sets the "until" field if the given value is not nil. +func (dc *DecisionCreate) SetNillableUntil(t *time.Time) *DecisionCreate { + if t != nil { + dc.SetUntil(*t) + } + return dc +} + // SetScenario sets the "scenario" field. func (dc *DecisionCreate) SetScenario(s string) *DecisionCreate { dc.mutation.SetScenario(s) @@ -275,9 +283,6 @@ func (dc *DecisionCreate) defaults() { // check runs all checks and user-defined validators on the builder. func (dc *DecisionCreate) check() error { - if _, ok := dc.mutation.Until(); !ok { - return &ValidationError{Name: "until", err: errors.New(`ent: missing required field "Decision.until"`)} - } if _, ok := dc.mutation.Scenario(); !ok { return &ValidationError{Name: "scenario", err: errors.New(`ent: missing required field "Decision.scenario"`)} } @@ -345,7 +350,7 @@ func (dc *DecisionCreate) createSpec() (*Decision, *sqlgraph.CreateSpec) { Value: value, Column: decision.FieldUntil, }) - _node.Until = value + _node.Until = &value } if value, ok := dc.mutation.Scenario(); ok { _spec.Fields = append(_spec.Fields, &sqlgraph.FieldSpec{ diff --git a/pkg/database/ent/decision_update.go b/pkg/database/ent/decision_update.go index 86b0742d0..b0eb0836e 100644 --- a/pkg/database/ent/decision_update.go +++ b/pkg/database/ent/decision_update.go @@ -59,6 +59,20 @@ func (du *DecisionUpdate) SetUntil(t time.Time) *DecisionUpdate { return du } +// SetNillableUntil sets the "until" field if the given value is not nil. +func (du *DecisionUpdate) SetNillableUntil(t *time.Time) *DecisionUpdate { + if t != nil { + du.SetUntil(*t) + } + return du +} + +// ClearUntil clears the value of the "until" field. +func (du *DecisionUpdate) ClearUntil() *DecisionUpdate { + du.mutation.ClearUntil() + return du +} + // SetScenario sets the "scenario" field. func (du *DecisionUpdate) SetScenario(s string) *DecisionUpdate { du.mutation.SetScenario(s) @@ -386,6 +400,12 @@ func (du *DecisionUpdate) sqlSave(ctx context.Context) (n int, err error) { Column: decision.FieldUntil, }) } + if du.mutation.UntilCleared() { + _spec.Fields.Clear = append(_spec.Fields.Clear, &sqlgraph.FieldSpec{ + Type: field.TypeTime, + Column: decision.FieldUntil, + }) + } if value, ok := du.mutation.Scenario(); ok { _spec.Fields.Set = append(_spec.Fields.Set, &sqlgraph.FieldSpec{ Type: field.TypeString, @@ -612,6 +632,20 @@ func (duo *DecisionUpdateOne) SetUntil(t time.Time) *DecisionUpdateOne { return duo } +// SetNillableUntil sets the "until" field if the given value is not nil. +func (duo *DecisionUpdateOne) SetNillableUntil(t *time.Time) *DecisionUpdateOne { + if t != nil { + duo.SetUntil(*t) + } + return duo +} + +// ClearUntil clears the value of the "until" field. +func (duo *DecisionUpdateOne) ClearUntil() *DecisionUpdateOne { + duo.mutation.ClearUntil() + return duo +} + // SetScenario sets the "scenario" field. func (duo *DecisionUpdateOne) SetScenario(s string) *DecisionUpdateOne { duo.mutation.SetScenario(s) @@ -963,6 +997,12 @@ func (duo *DecisionUpdateOne) sqlSave(ctx context.Context) (_node *Decision, err Column: decision.FieldUntil, }) } + if duo.mutation.UntilCleared() { + _spec.Fields.Clear = append(_spec.Fields.Clear, &sqlgraph.FieldSpec{ + Type: field.TypeTime, + Column: decision.FieldUntil, + }) + } if value, ok := duo.mutation.Scenario(); ok { _spec.Fields.Set = append(_spec.Fields.Set, &sqlgraph.FieldSpec{ Type: field.TypeString, diff --git a/pkg/database/ent/migrate/schema.go b/pkg/database/ent/migrate/schema.go index f6688aa30..81446b409 100644 --- a/pkg/database/ent/migrate/schema.go +++ b/pkg/database/ent/migrate/schema.go @@ -81,7 +81,7 @@ var ( {Name: "id", Type: field.TypeInt, Increment: true}, {Name: "created_at", Type: field.TypeTime, Nullable: true}, {Name: "updated_at", Type: field.TypeTime, Nullable: true}, - {Name: "until", Type: field.TypeTime}, + {Name: "until", Type: field.TypeTime, Nullable: true, SchemaType: map[string]string{"mysql": "datetime"}}, {Name: "scenario", Type: field.TypeString}, {Name: "type", Type: field.TypeString}, {Name: "start_ip", Type: field.TypeInt64, Nullable: true}, @@ -114,6 +114,16 @@ var ( Unique: false, Columns: []*schema.Column{DecisionsColumns[6], DecisionsColumns[7]}, }, + { + Name: "decision_value", + Unique: false, + Columns: []*schema.Column{DecisionsColumns[12]}, + }, + { + Name: "decision_until", + Unique: false, + Columns: []*schema.Column{DecisionsColumns[3]}, + }, }, } // EventsColumns holds the columns for the "events" table. diff --git a/pkg/database/ent/mutation.go b/pkg/database/ent/mutation.go index 9fed27536..29e17d942 100644 --- a/pkg/database/ent/mutation.go +++ b/pkg/database/ent/mutation.go @@ -3482,7 +3482,7 @@ func (m *DecisionMutation) Until() (r time.Time, exists bool) { // OldUntil returns the old "until" field's value of the Decision entity. // If the Decision object wasn't provided to the builder, the object is fetched from the database. // An error is returned if the mutation operation is not UpdateOne, or the database query fails. -func (m *DecisionMutation) OldUntil(ctx context.Context) (v time.Time, err error) { +func (m *DecisionMutation) OldUntil(ctx context.Context) (v *time.Time, err error) { if !m.op.Is(OpUpdateOne) { return v, errors.New("OldUntil is only allowed on UpdateOne operations") } @@ -3496,9 +3496,22 @@ func (m *DecisionMutation) OldUntil(ctx context.Context) (v time.Time, err error return oldValue.Until, nil } +// ClearUntil clears the value of the "until" field. +func (m *DecisionMutation) ClearUntil() { + m.until = nil + m.clearedFields[decision.FieldUntil] = struct{}{} +} + +// UntilCleared returns if the "until" field was cleared in this mutation. +func (m *DecisionMutation) UntilCleared() bool { + _, ok := m.clearedFields[decision.FieldUntil] + return ok +} + // ResetUntil resets all changes to the "until" field. func (m *DecisionMutation) ResetUntil() { m.until = nil + delete(m.clearedFields, decision.FieldUntil) } // SetScenario sets the "scenario" field. @@ -4447,6 +4460,9 @@ func (m *DecisionMutation) ClearedFields() []string { if m.FieldCleared(decision.FieldUpdatedAt) { fields = append(fields, decision.FieldUpdatedAt) } + if m.FieldCleared(decision.FieldUntil) { + fields = append(fields, decision.FieldUntil) + } if m.FieldCleared(decision.FieldStartIP) { fields = append(fields, decision.FieldStartIP) } @@ -4482,6 +4498,9 @@ func (m *DecisionMutation) ClearField(name string) error { case decision.FieldUpdatedAt: m.ClearUpdatedAt() return nil + case decision.FieldUntil: + m.ClearUntil() + return nil case decision.FieldStartIP: m.ClearStartIP() return nil diff --git a/pkg/database/ent/schema/decision.go b/pkg/database/ent/schema/decision.go index 02da5c0cc..d89603aff 100644 --- a/pkg/database/ent/schema/decision.go +++ b/pkg/database/ent/schema/decision.go @@ -2,6 +2,7 @@ package schema import ( "entgo.io/ent" + "entgo.io/ent/dialect" "entgo.io/ent/schema/edge" "entgo.io/ent/schema/field" "entgo.io/ent/schema/index" @@ -22,7 +23,9 @@ func (Decision) Fields() []ent.Field { field.Time("updated_at"). Default(types.UtcNow). UpdateDefault(types.UtcNow).Nillable().Optional(), - field.Time("until"), + field.Time("until").Nillable().Optional().SchemaType(map[string]string{ + dialect.MySQL: "datetime", + }), field.String("scenario"), field.String("type"), field.Int64("start_ip").Optional(), @@ -49,5 +52,7 @@ func (Decision) Edges() []ent.Edge { func (Decision) Indexes() []ent.Index { return []ent.Index{ index.Fields("start_ip", "end_ip"), + index.Fields("value"), + index.Fields("until"), } }