37 lines
742 B
Go
37 lines
742 B
Go
package mixin
|
||
|
||
import (
|
||
"entgo.io/ent"
|
||
"entgo.io/ent/schema/field"
|
||
"entgo.io/ent/schema/index"
|
||
"entgo.io/ent/schema/mixin"
|
||
"github.com/google/uuid"
|
||
)
|
||
|
||
// UUIDMixin 添加 UUID 字段用于跨设备同步
|
||
// 使用 UUIDv7,具有时间有序性,索引性能更好
|
||
type UUIDMixin struct {
|
||
mixin.Schema
|
||
}
|
||
|
||
// Fields of the UUIDMixin.
|
||
func (UUIDMixin) Fields() []ent.Field {
|
||
return []ent.Field{
|
||
field.String("uuid").
|
||
DefaultFunc(func() string {
|
||
return uuid.Must(uuid.NewV7()).String()
|
||
}).
|
||
Unique().
|
||
Immutable().
|
||
StructTag(`json:"uuid"`).
|
||
Comment("UUID for cross-device sync (UUIDv7)"),
|
||
}
|
||
}
|
||
|
||
// Indexes of the UUIDMixin.
|
||
func (UUIDMixin) Indexes() []ent.Index {
|
||
return []ent.Index{
|
||
index.Fields("uuid"),
|
||
}
|
||
}
|