mirror of
https://github.com/ent/ent.git
synced 2026-04-28 05:30:56 +03:00
schema/field: add support for type-aware Default and UpdateDefault in time fields (#2289)
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user