schema/field: add support for type-aware Default and UpdateDefault in time fields (#2289)

This commit is contained in:
Ariel Mashraki
2022-01-24 14:27:57 +02:00
committed by GitHub
parent 898991ac79
commit f8c0f02803
12 changed files with 68 additions and 6 deletions

View File

@@ -369,8 +369,8 @@ func (b *timeBuilder) StructTag(s string) *timeBuilder {
// field.Time("created_at").
// Default(time.Now)
//
func (b *timeBuilder) Default(f func() time.Time) *timeBuilder {
b.desc.Default = f
func (b *timeBuilder) Default(fn interface{}) *timeBuilder {
b.desc.Default = fn
return b
}
@@ -381,8 +381,13 @@ func (b *timeBuilder) Default(f func() time.Time) *timeBuilder {
// Default(time.Now).
// UpdateDefault(time.Now),
//
func (b *timeBuilder) UpdateDefault(f func() time.Time) *timeBuilder {
b.desc.UpdateDefault = f
// field.Time("deleted_at").
// Optional().
// GoType(&sql.NullTime{}).
// UpdateDefault(NewNullTime),
//
func (b *timeBuilder) UpdateDefault(fn interface{}) *timeBuilder {
b.desc.UpdateDefault = fn
return b
}
@@ -418,6 +423,9 @@ func (b *timeBuilder) Annotations(annotations ...schema.Annotation) *timeBuilder
// Descriptor implements the ent.Field interface by returning its descriptor.
func (b *timeBuilder) Descriptor() *Descriptor {
if b.desc.Default != nil {
b.desc.checkDefaultFunc(timeType)
}
return b.desc
}

View File

@@ -407,7 +407,7 @@ func TestTime(t *testing.T) {
assert.Equal(t, now, fd.UpdateDefault.(func() time.Time)())
type Time time.Time
fd = field.Time("deleted_at").GoType(Time{}).Descriptor()
fd = field.Time("deleted_at").GoType(Time{}).Default(func() Time { return Time{} }).Descriptor()
assert.NoError(t, fd.Err)
assert.Equal(t, "field_test.Time", fd.Info.Ident)
assert.Equal(t, "entgo.io/ent/schema/field_test", fd.Info.PkgPath)
@@ -423,6 +423,8 @@ func TestTime(t *testing.T) {
assert.True(t, fd.Info.Nillable)
assert.True(t, fd.Info.ValueScanner())
fd = field.Time("deleted_at").GoType(Time{}).Default(time.Now).Descriptor()
assert.Error(t, fd.Err)
fd = field.Time("active").GoType(1).Descriptor()
assert.Error(t, fd.Err)
fd = field.Time("active").GoType(struct{}{}).Descriptor()