refactor!: working WD-4 user discovery

This commit is contained in:
DevMiner 2024-08-20 22:43:26 +02:00
parent cf0053312d
commit 61891d891a
91 changed files with 12768 additions and 5562 deletions

View file

@ -14,10 +14,18 @@ func (Attachment) Fields() []ent.Field {
field.Bytes("sha256"),
field.Int("size"),
field.String("blurhash").Optional().Nillable(),
field.Int("height").Optional().Nillable(),
field.Int("width").Optional().Nillable(),
field.Int("fps").Optional().Nillable(),
field.String("blurhash").
Optional().
Nillable(),
field.Int("height").
Optional().
Nillable(),
field.Int("width").
Optional().
Nillable(),
field.Int("fps").
Optional().
Nillable(),
field.String("mimeType"),
}

View file

@ -11,7 +11,9 @@ type Follow struct{ ent.Schema }
func (Follow) Fields() []ent.Field {
return []ent.Field{
field.Enum("status").Values("pending", "accepted").Default("pending"),
field.Enum("status").
Values("pending", "accepted").
Default("pending"),
}
}

View file

@ -9,7 +9,7 @@ type Image struct{ ent.Schema }
func (Image) Fields() []ent.Field {
return []ent.Field{
field.String("url"),
field.String("url").Validate(ValidateURI),
field.String("mimeType"),
}
}

View file

@ -0,0 +1,71 @@
package schema
import (
"entgo.io/ent"
"entgo.io/ent/schema/edge"
"entgo.io/ent/schema/field"
)
type InstanceMetadata struct{ ent.Schema }
func (InstanceMetadata) Fields() []ent.Field {
return []ent.Field{
field.String("name").NotEmpty(),
field.String("description").
Optional().
Nillable(),
field.String("host").
NotEmpty().
Unique(),
field.Bytes("publicKey"),
field.String("publicKeyAlgorithm"),
field.Bytes("privateKey").Optional(),
field.String("softwareName").NotEmpty(),
field.String("softwareVersion").NotEmpty(),
field.String("sharedInboxURI").Validate(ValidateURI),
field.String("moderatorsURI").
Validate(ValidateURI).
Optional().
Nillable(),
field.String("adminsURI").
Validate(ValidateURI).
Optional().
Nillable(),
field.String("logoEndpoint").
Validate(ValidateURI).
Optional().
Nillable(),
field.String("logoMimeType").
Validate(ValidateURI).
Optional().
Nillable(),
field.String("bannerEndpoint").
Validate(ValidateURI).
Optional().
Nillable(),
field.String("bannerMimeType").
Validate(ValidateURI).
Optional().
Nillable(),
field.Strings("supportedVersions").Default([]string{}),
field.Strings("supportedExtensions").Default([]string{}),
}
}
func (InstanceMetadata) Edges() []ent.Edge {
return []ent.Edge{
edge.To("users", User.Type),
edge.To("moderators", User.Type),
edge.To("admins", User.Type),
}
}
func (InstanceMetadata) Mixin() []ent.Mixin {
return []ent.Mixin{LysandEntityMixin{}}
}

View file

@ -1,43 +0,0 @@
package schema
import (
"entgo.io/ent"
"entgo.io/ent/schema/edge"
"entgo.io/ent/schema/field"
"entgo.io/ent/schema/index"
)
type ServerMetadata struct{ ent.Schema }
func (ServerMetadata) Fields() []ent.Field {
return []ent.Field{
field.String("name").
NotEmpty(),
field.String("description").
Optional().
Nillable(),
field.String("version").
NotEmpty(),
field.Strings("supportedExtensions").
Default([]string{}),
}
}
func (ServerMetadata) Edges() []ent.Edge {
return []ent.Edge{
edge.To("follower", User.Type).Unique().Required(),
edge.To("followee", User.Type).Unique().Required(),
}
}
func (ServerMetadata) Indexes() []ent.Index {
return []ent.Index{
index.Edges("follower", "followee").Unique(),
}
}
func (ServerMetadata) Mixin() []ent.Mixin {
return []ent.Mixin{LysandEntityMixin{}}
}

View file

@ -1,7 +1,6 @@
package schema
import (
"crypto/ed25519"
"errors"
"regexp"
@ -20,17 +19,31 @@ type User struct{ ent.Schema }
func (User) Fields() []ent.Field {
return []ent.Field{
field.String("username").Unique().MaxLen(32).Validate(ValidateUsername),
field.Bytes("passwordHash").Optional().Nillable(),
field.String("username").
Unique().
MaxLen(32).
Validate(ValidateUsername),
field.Bytes("passwordHash").
Optional().
Nillable(),
field.String("displayName").MaxLen(256).Optional().Nillable(),
field.String("biography").Optional().Nillable(),
field.String("displayName").
MaxLen(256).
Optional().
Nillable(),
field.String("biography").
Optional().
Nillable(),
field.Bytes("publicKey").GoType(ed25519.PublicKey([]byte{})),
field.Bytes("privateKey").GoType(ed25519.PrivateKey([]byte{})).Optional(),
field.Bytes("publicKey"),
field.String("publicKeyActor"),
field.String("publicKeyAlgorithm"),
field.Bytes("privateKey").Optional(),
field.Bool("indexable").Default(true),
field.Enum("privacyLevel").Values("public", "restricted", "private").Default("public"),
field.Enum("privacyLevel").
Values("public", "restricted", "private").
Default("public"),
field.JSON("fields", []lysand.Field{}).Default([]lysand.Field{}),
@ -51,6 +64,10 @@ func (User) Edges() []ent.Edge {
edge.From("authoredNotes", Note.Type).Ref("author"),
edge.From("mentionedNotes", Note.Type).Ref("mentions"),
edge.From("servers", InstanceMetadata.Type).Ref("users"),
edge.From("moderatedServers", InstanceMetadata.Type).Ref("moderators"),
edge.From("administeredServers", InstanceMetadata.Type).Ref("admins"),
}
}