2024-08-11 03:51:22 +02:00
|
|
|
package schema
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"entgo.io/ent"
|
|
|
|
|
"entgo.io/ent/schema/field"
|
|
|
|
|
"entgo.io/ent/schema/mixin"
|
|
|
|
|
"github.com/google/uuid"
|
2024-08-28 00:25:25 +02:00
|
|
|
"github.com/versia-pub/versia-go/pkg/versia"
|
2024-08-22 23:03:38 +02:00
|
|
|
"net/url"
|
|
|
|
|
"time"
|
2024-08-11 03:51:22 +02:00
|
|
|
)
|
|
|
|
|
|
2024-08-22 23:09:58 +02:00
|
|
|
type VersiaEntityMixin struct{ mixin.Schema }
|
2024-08-11 03:51:22 +02:00
|
|
|
|
2024-08-22 23:09:58 +02:00
|
|
|
var _ ent.Mixin = (*VersiaEntityMixin)(nil)
|
2024-08-11 03:51:22 +02:00
|
|
|
|
2024-08-22 23:09:58 +02:00
|
|
|
func (VersiaEntityMixin) Fields() []ent.Field {
|
2024-08-11 03:51:22 +02:00
|
|
|
return []ent.Field{
|
|
|
|
|
field.UUID("id", uuid.UUID{}).
|
|
|
|
|
Default(uuid.New).
|
|
|
|
|
Immutable(),
|
|
|
|
|
field.Bool("isRemote"),
|
|
|
|
|
field.String("uri").Validate(ValidateURI),
|
|
|
|
|
|
2024-08-22 23:03:38 +02:00
|
|
|
field.JSON("extensions", versia.Extensions{}).Default(versia.Extensions{}),
|
2024-08-11 03:51:22 +02:00
|
|
|
|
|
|
|
|
field.Time("created_at").
|
|
|
|
|
Immutable().
|
|
|
|
|
Default(time.Now),
|
|
|
|
|
field.Time("updated_at").
|
|
|
|
|
Default(time.Now).
|
|
|
|
|
UpdateDefault(time.Now),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func ValidateURI(s string) error {
|
|
|
|
|
_, err := url.Parse(s)
|
|
|
|
|
return err
|
|
|
|
|
}
|