chore: implement instance metadata import

This commit is contained in:
DevMiner 2024-09-22 01:08:21 +02:00
parent 5f9b611921
commit 95cff10def
13 changed files with 173 additions and 20 deletions

View file

@ -47,7 +47,7 @@ type InstanceMetadata struct {
// SoftwareVersion holds the value of the "softwareVersion" field. // SoftwareVersion holds the value of the "softwareVersion" field.
SoftwareVersion string `json:"softwareVersion,omitempty"` SoftwareVersion string `json:"softwareVersion,omitempty"`
// SharedInboxURI holds the value of the "sharedInboxURI" field. // SharedInboxURI holds the value of the "sharedInboxURI" field.
SharedInboxURI string `json:"sharedInboxURI,omitempty"` SharedInboxURI *string `json:"sharedInboxURI,omitempty"`
// ModeratorsURI holds the value of the "moderatorsURI" field. // ModeratorsURI holds the value of the "moderatorsURI" field.
ModeratorsURI *string `json:"moderatorsURI,omitempty"` ModeratorsURI *string `json:"moderatorsURI,omitempty"`
// AdminsURI holds the value of the "adminsURI" field. // AdminsURI holds the value of the "adminsURI" field.
@ -231,7 +231,8 @@ func (im *InstanceMetadata) assignValues(columns []string, values []any) error {
if value, ok := values[i].(*sql.NullString); !ok { if value, ok := values[i].(*sql.NullString); !ok {
return fmt.Errorf("unexpected type %T for field sharedInboxURI", values[i]) return fmt.Errorf("unexpected type %T for field sharedInboxURI", values[i])
} else if value.Valid { } else if value.Valid {
im.SharedInboxURI = value.String im.SharedInboxURI = new(string)
*im.SharedInboxURI = value.String
} }
case instancemetadata.FieldModeratorsURI: case instancemetadata.FieldModeratorsURI:
if value, ok := values[i].(*sql.NullString); !ok { if value, ok := values[i].(*sql.NullString); !ok {
@ -383,8 +384,10 @@ func (im *InstanceMetadata) String() string {
builder.WriteString("softwareVersion=") builder.WriteString("softwareVersion=")
builder.WriteString(im.SoftwareVersion) builder.WriteString(im.SoftwareVersion)
builder.WriteString(", ") builder.WriteString(", ")
builder.WriteString("sharedInboxURI=") if v := im.SharedInboxURI; v != nil {
builder.WriteString(im.SharedInboxURI) builder.WriteString("sharedInboxURI=")
builder.WriteString(*v)
}
builder.WriteString(", ") builder.WriteString(", ")
if v := im.ModeratorsURI; v != nil { if v := im.ModeratorsURI; v != nil {
builder.WriteString("moderatorsURI=") builder.WriteString("moderatorsURI=")

View file

@ -851,6 +851,16 @@ func SharedInboxURIHasSuffix(v string) predicate.InstanceMetadata {
return predicate.InstanceMetadata(sql.FieldHasSuffix(FieldSharedInboxURI, v)) return predicate.InstanceMetadata(sql.FieldHasSuffix(FieldSharedInboxURI, v))
} }
// SharedInboxURIIsNil applies the IsNil predicate on the "sharedInboxURI" field.
func SharedInboxURIIsNil() predicate.InstanceMetadata {
return predicate.InstanceMetadata(sql.FieldIsNull(FieldSharedInboxURI))
}
// SharedInboxURINotNil applies the NotNil predicate on the "sharedInboxURI" field.
func SharedInboxURINotNil() predicate.InstanceMetadata {
return predicate.InstanceMetadata(sql.FieldNotNull(FieldSharedInboxURI))
}
// SharedInboxURIEqualFold applies the EqualFold predicate on the "sharedInboxURI" field. // SharedInboxURIEqualFold applies the EqualFold predicate on the "sharedInboxURI" field.
func SharedInboxURIEqualFold(v string) predicate.InstanceMetadata { func SharedInboxURIEqualFold(v string) predicate.InstanceMetadata {
return predicate.InstanceMetadata(sql.FieldEqualFold(FieldSharedInboxURI, v)) return predicate.InstanceMetadata(sql.FieldEqualFold(FieldSharedInboxURI, v))

View file

@ -134,6 +134,14 @@ func (imc *InstanceMetadataCreate) SetSharedInboxURI(s string) *InstanceMetadata
return imc return imc
} }
// SetNillableSharedInboxURI sets the "sharedInboxURI" field if the given value is not nil.
func (imc *InstanceMetadataCreate) SetNillableSharedInboxURI(s *string) *InstanceMetadataCreate {
if s != nil {
imc.SetSharedInboxURI(*s)
}
return imc
}
// SetModeratorsURI sets the "moderatorsURI" field. // SetModeratorsURI sets the "moderatorsURI" field.
func (imc *InstanceMetadataCreate) SetModeratorsURI(s string) *InstanceMetadataCreate { func (imc *InstanceMetadataCreate) SetModeratorsURI(s string) *InstanceMetadataCreate {
imc.mutation.SetModeratorsURI(s) imc.mutation.SetModeratorsURI(s)
@ -410,9 +418,6 @@ func (imc *InstanceMetadataCreate) check() error {
return &ValidationError{Name: "softwareVersion", err: fmt.Errorf(`ent: validator failed for field "InstanceMetadata.softwareVersion": %w`, err)} return &ValidationError{Name: "softwareVersion", err: fmt.Errorf(`ent: validator failed for field "InstanceMetadata.softwareVersion": %w`, err)}
} }
} }
if _, ok := imc.mutation.SharedInboxURI(); !ok {
return &ValidationError{Name: "sharedInboxURI", err: errors.New(`ent: missing required field "InstanceMetadata.sharedInboxURI"`)}
}
if v, ok := imc.mutation.SharedInboxURI(); ok { if v, ok := imc.mutation.SharedInboxURI(); ok {
if err := instancemetadata.SharedInboxURIValidator(v); err != nil { if err := instancemetadata.SharedInboxURIValidator(v); err != nil {
return &ValidationError{Name: "sharedInboxURI", err: fmt.Errorf(`ent: validator failed for field "InstanceMetadata.sharedInboxURI": %w`, err)} return &ValidationError{Name: "sharedInboxURI", err: fmt.Errorf(`ent: validator failed for field "InstanceMetadata.sharedInboxURI": %w`, err)}
@ -544,7 +549,7 @@ func (imc *InstanceMetadataCreate) createSpec() (*InstanceMetadata, *sqlgraph.Cr
} }
if value, ok := imc.mutation.SharedInboxURI(); ok { if value, ok := imc.mutation.SharedInboxURI(); ok {
_spec.SetField(instancemetadata.FieldSharedInboxURI, field.TypeString, value) _spec.SetField(instancemetadata.FieldSharedInboxURI, field.TypeString, value)
_node.SharedInboxURI = value _node.SharedInboxURI = &value
} }
if value, ok := imc.mutation.ModeratorsURI(); ok { if value, ok := imc.mutation.ModeratorsURI(); ok {
_spec.SetField(instancemetadata.FieldModeratorsURI, field.TypeString, value) _spec.SetField(instancemetadata.FieldModeratorsURI, field.TypeString, value)
@ -846,6 +851,12 @@ func (u *InstanceMetadataUpsert) UpdateSharedInboxURI() *InstanceMetadataUpsert
return u return u
} }
// ClearSharedInboxURI clears the value of the "sharedInboxURI" field.
func (u *InstanceMetadataUpsert) ClearSharedInboxURI() *InstanceMetadataUpsert {
u.SetNull(instancemetadata.FieldSharedInboxURI)
return u
}
// SetModeratorsURI sets the "moderatorsURI" field. // SetModeratorsURI sets the "moderatorsURI" field.
func (u *InstanceMetadataUpsert) SetModeratorsURI(v string) *InstanceMetadataUpsert { func (u *InstanceMetadataUpsert) SetModeratorsURI(v string) *InstanceMetadataUpsert {
u.Set(instancemetadata.FieldModeratorsURI, v) u.Set(instancemetadata.FieldModeratorsURI, v)
@ -1225,6 +1236,13 @@ func (u *InstanceMetadataUpsertOne) UpdateSharedInboxURI() *InstanceMetadataUpse
}) })
} }
// ClearSharedInboxURI clears the value of the "sharedInboxURI" field.
func (u *InstanceMetadataUpsertOne) ClearSharedInboxURI() *InstanceMetadataUpsertOne {
return u.Update(func(s *InstanceMetadataUpsert) {
s.ClearSharedInboxURI()
})
}
// SetModeratorsURI sets the "moderatorsURI" field. // SetModeratorsURI sets the "moderatorsURI" field.
func (u *InstanceMetadataUpsertOne) SetModeratorsURI(v string) *InstanceMetadataUpsertOne { func (u *InstanceMetadataUpsertOne) SetModeratorsURI(v string) *InstanceMetadataUpsertOne {
return u.Update(func(s *InstanceMetadataUpsert) { return u.Update(func(s *InstanceMetadataUpsert) {
@ -1793,6 +1811,13 @@ func (u *InstanceMetadataUpsertBulk) UpdateSharedInboxURI() *InstanceMetadataUps
}) })
} }
// ClearSharedInboxURI clears the value of the "sharedInboxURI" field.
func (u *InstanceMetadataUpsertBulk) ClearSharedInboxURI() *InstanceMetadataUpsertBulk {
return u.Update(func(s *InstanceMetadataUpsert) {
s.ClearSharedInboxURI()
})
}
// SetModeratorsURI sets the "moderatorsURI" field. // SetModeratorsURI sets the "moderatorsURI" field.
func (u *InstanceMetadataUpsertBulk) SetModeratorsURI(v string) *InstanceMetadataUpsertBulk { func (u *InstanceMetadataUpsertBulk) SetModeratorsURI(v string) *InstanceMetadataUpsertBulk {
return u.Update(func(s *InstanceMetadataUpsert) { return u.Update(func(s *InstanceMetadataUpsert) {

View file

@ -194,6 +194,12 @@ func (imu *InstanceMetadataUpdate) SetNillableSharedInboxURI(s *string) *Instanc
return imu return imu
} }
// ClearSharedInboxURI clears the value of the "sharedInboxURI" field.
func (imu *InstanceMetadataUpdate) ClearSharedInboxURI() *InstanceMetadataUpdate {
imu.mutation.ClearSharedInboxURI()
return imu
}
// SetModeratorsURI sets the "moderatorsURI" field. // SetModeratorsURI sets the "moderatorsURI" field.
func (imu *InstanceMetadataUpdate) SetModeratorsURI(s string) *InstanceMetadataUpdate { func (imu *InstanceMetadataUpdate) SetModeratorsURI(s string) *InstanceMetadataUpdate {
imu.mutation.SetModeratorsURI(s) imu.mutation.SetModeratorsURI(s)
@ -609,6 +615,9 @@ func (imu *InstanceMetadataUpdate) sqlSave(ctx context.Context) (n int, err erro
if value, ok := imu.mutation.SharedInboxURI(); ok { if value, ok := imu.mutation.SharedInboxURI(); ok {
_spec.SetField(instancemetadata.FieldSharedInboxURI, field.TypeString, value) _spec.SetField(instancemetadata.FieldSharedInboxURI, field.TypeString, value)
} }
if imu.mutation.SharedInboxURICleared() {
_spec.ClearField(instancemetadata.FieldSharedInboxURI, field.TypeString)
}
if value, ok := imu.mutation.ModeratorsURI(); ok { if value, ok := imu.mutation.ModeratorsURI(); ok {
_spec.SetField(instancemetadata.FieldModeratorsURI, field.TypeString, value) _spec.SetField(instancemetadata.FieldModeratorsURI, field.TypeString, value)
} }
@ -978,6 +987,12 @@ func (imuo *InstanceMetadataUpdateOne) SetNillableSharedInboxURI(s *string) *Ins
return imuo return imuo
} }
// ClearSharedInboxURI clears the value of the "sharedInboxURI" field.
func (imuo *InstanceMetadataUpdateOne) ClearSharedInboxURI() *InstanceMetadataUpdateOne {
imuo.mutation.ClearSharedInboxURI()
return imuo
}
// SetModeratorsURI sets the "moderatorsURI" field. // SetModeratorsURI sets the "moderatorsURI" field.
func (imuo *InstanceMetadataUpdateOne) SetModeratorsURI(s string) *InstanceMetadataUpdateOne { func (imuo *InstanceMetadataUpdateOne) SetModeratorsURI(s string) *InstanceMetadataUpdateOne {
imuo.mutation.SetModeratorsURI(s) imuo.mutation.SetModeratorsURI(s)
@ -1423,6 +1438,9 @@ func (imuo *InstanceMetadataUpdateOne) sqlSave(ctx context.Context) (_node *Inst
if value, ok := imuo.mutation.SharedInboxURI(); ok { if value, ok := imuo.mutation.SharedInboxURI(); ok {
_spec.SetField(instancemetadata.FieldSharedInboxURI, field.TypeString, value) _spec.SetField(instancemetadata.FieldSharedInboxURI, field.TypeString, value)
} }
if imuo.mutation.SharedInboxURICleared() {
_spec.ClearField(instancemetadata.FieldSharedInboxURI, field.TypeString)
}
if value, ok := imuo.mutation.ModeratorsURI(); ok { if value, ok := imuo.mutation.ModeratorsURI(); ok {
_spec.SetField(instancemetadata.FieldModeratorsURI, field.TypeString, value) _spec.SetField(instancemetadata.FieldModeratorsURI, field.TypeString, value)
} }

File diff suppressed because one or more lines are too long

View file

@ -114,7 +114,7 @@ var (
{Name: "private_key", Type: field.TypeBytes, Nullable: true}, {Name: "private_key", Type: field.TypeBytes, Nullable: true},
{Name: "software_name", Type: field.TypeString}, {Name: "software_name", Type: field.TypeString},
{Name: "software_version", Type: field.TypeString}, {Name: "software_version", Type: field.TypeString},
{Name: "shared_inbox_uri", Type: field.TypeString}, {Name: "shared_inbox_uri", Type: field.TypeString, Nullable: true},
{Name: "moderators_uri", Type: field.TypeString, Nullable: true}, {Name: "moderators_uri", Type: field.TypeString, Nullable: true},
{Name: "admins_uri", Type: field.TypeString, Nullable: true}, {Name: "admins_uri", Type: field.TypeString, Nullable: true},
{Name: "logo_endpoint", Type: field.TypeString, Nullable: true}, {Name: "logo_endpoint", Type: field.TypeString, Nullable: true},

View file

@ -3071,7 +3071,7 @@ func (m *InstanceMetadataMutation) SharedInboxURI() (r string, exists bool) {
// OldSharedInboxURI returns the old "sharedInboxURI" field's value of the InstanceMetadata entity. // OldSharedInboxURI returns the old "sharedInboxURI" field's value of the InstanceMetadata entity.
// If the InstanceMetadata object wasn't provided to the builder, the object is fetched from the database. // If the InstanceMetadata object wasn't provided to the builder, the object is fetched from the database.
// An error is returned if the mutation operation is not UpdateOne, or the database query fails. // An error is returned if the mutation operation is not UpdateOne, or the database query fails.
func (m *InstanceMetadataMutation) OldSharedInboxURI(ctx context.Context) (v string, err error) { func (m *InstanceMetadataMutation) OldSharedInboxURI(ctx context.Context) (v *string, err error) {
if !m.op.Is(OpUpdateOne) { if !m.op.Is(OpUpdateOne) {
return v, errors.New("OldSharedInboxURI is only allowed on UpdateOne operations") return v, errors.New("OldSharedInboxURI is only allowed on UpdateOne operations")
} }
@ -3085,9 +3085,22 @@ func (m *InstanceMetadataMutation) OldSharedInboxURI(ctx context.Context) (v str
return oldValue.SharedInboxURI, nil return oldValue.SharedInboxURI, nil
} }
// ClearSharedInboxURI clears the value of the "sharedInboxURI" field.
func (m *InstanceMetadataMutation) ClearSharedInboxURI() {
m.sharedInboxURI = nil
m.clearedFields[instancemetadata.FieldSharedInboxURI] = struct{}{}
}
// SharedInboxURICleared returns if the "sharedInboxURI" field was cleared in this mutation.
func (m *InstanceMetadataMutation) SharedInboxURICleared() bool {
_, ok := m.clearedFields[instancemetadata.FieldSharedInboxURI]
return ok
}
// ResetSharedInboxURI resets all changes to the "sharedInboxURI" field. // ResetSharedInboxURI resets all changes to the "sharedInboxURI" field.
func (m *InstanceMetadataMutation) ResetSharedInboxURI() { func (m *InstanceMetadataMutation) ResetSharedInboxURI() {
m.sharedInboxURI = nil m.sharedInboxURI = nil
delete(m.clearedFields, instancemetadata.FieldSharedInboxURI)
} }
// SetModeratorsURI sets the "moderatorsURI" field. // SetModeratorsURI sets the "moderatorsURI" field.
@ -4053,6 +4066,9 @@ func (m *InstanceMetadataMutation) ClearedFields() []string {
if m.FieldCleared(instancemetadata.FieldPrivateKey) { if m.FieldCleared(instancemetadata.FieldPrivateKey) {
fields = append(fields, instancemetadata.FieldPrivateKey) fields = append(fields, instancemetadata.FieldPrivateKey)
} }
if m.FieldCleared(instancemetadata.FieldSharedInboxURI) {
fields = append(fields, instancemetadata.FieldSharedInboxURI)
}
if m.FieldCleared(instancemetadata.FieldModeratorsURI) { if m.FieldCleared(instancemetadata.FieldModeratorsURI) {
fields = append(fields, instancemetadata.FieldModeratorsURI) fields = append(fields, instancemetadata.FieldModeratorsURI)
} }
@ -4091,6 +4107,9 @@ func (m *InstanceMetadataMutation) ClearField(name string) error {
case instancemetadata.FieldPrivateKey: case instancemetadata.FieldPrivateKey:
m.ClearPrivateKey() m.ClearPrivateKey()
return nil return nil
case instancemetadata.FieldSharedInboxURI:
m.ClearSharedInboxURI()
return nil
case instancemetadata.FieldModeratorsURI: case instancemetadata.FieldModeratorsURI:
m.ClearModeratorsURI() m.ClearModeratorsURI()
return nil return nil

View file

@ -25,7 +25,10 @@ func (InstanceMetadata) Fields() []ent.Field {
field.String("softwareName").NotEmpty(), field.String("softwareName").NotEmpty(),
field.String("softwareVersion").NotEmpty(), field.String("softwareVersion").NotEmpty(),
field.String("sharedInboxURI").Validate(ValidateURI), field.String("sharedInboxURI").
Validate(ValidateURI).
Optional().
Nillable(),
field.String("moderatorsURI"). field.String("moderatorsURI").
Validate(ValidateURI). Validate(ValidateURI).
Optional(). Optional().

2
go.mod
View file

@ -14,6 +14,7 @@ require (
github.com/google/uuid v1.6.0 github.com/google/uuid v1.6.0
github.com/jackc/pgx/v5 v5.6.0 github.com/jackc/pgx/v5 v5.6.0
github.com/joho/godotenv v1.5.1 github.com/joho/godotenv v1.5.1
github.com/ldez/mimetype v0.3.0
github.com/nats-io/nats.go v1.36.0 github.com/nats-io/nats.go v1.36.0
github.com/pkg/errors v0.9.1 github.com/pkg/errors v0.9.1
github.com/rs/zerolog v1.33.0 github.com/rs/zerolog v1.33.0
@ -43,7 +44,6 @@ require (
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
github.com/jackc/puddle/v2 v2.2.1 // indirect github.com/jackc/puddle/v2 v2.2.1 // indirect
github.com/klauspost/compress v1.17.9 // indirect github.com/klauspost/compress v1.17.9 // indirect
github.com/ldez/mimetype v0.3.0 // indirect
github.com/leodido/go-urn v1.4.0 // indirect github.com/leodido/go-urn v1.4.0 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-isatty v0.0.20 // indirect

View file

@ -10,6 +10,8 @@ import (
type InstanceMetadata struct { type InstanceMetadata struct {
*ent.InstanceMetadata *ent.InstanceMetadata
URI *versiautils.URL
Moderators []User Moderators []User
ModeratorsCollection *versiautils.URL ModeratorsCollection *versiautils.URL
@ -35,9 +37,14 @@ func NewInstanceMetadata(dbData *ent.InstanceMetadata) (*InstanceMetadata, error
return nil, err return nil, err
} }
if n.SharedInbox, err = versiautils.ParseURL(dbData.SharedInboxURI); err != nil { if n.URI, err = versiautils.ParseURL(dbData.URI); err != nil {
return nil, err return nil, err
} }
if dbData.SharedInboxURI != nil {
if n.SharedInbox, err = versiautils.ParseURL(*dbData.SharedInboxURI); err != nil {
return nil, err
}
}
if dbData.ModeratorsURI != nil { if dbData.ModeratorsURI != nil {
if n.ModeratorsCollection, err = versiautils.ParseURL(*dbData.ModeratorsURI); err != nil { if n.ModeratorsCollection, err = versiautils.ParseURL(*dbData.ModeratorsURI); err != nil {
return nil, err return nil, err

View file

@ -4,6 +4,7 @@ import (
"context" "context"
"git.devminer.xyz/devminer/unitel" "git.devminer.xyz/devminer/unitel"
"github.com/go-logr/logr" "github.com/go-logr/logr"
"github.com/ldez/mimetype"
"github.com/versia-pub/versia-go/ent" "github.com/versia-pub/versia-go/ent"
"github.com/versia-pub/versia-go/ent/instancemetadata" "github.com/versia-pub/versia-go/ent/instancemetadata"
"github.com/versia-pub/versia-go/internal/entity" "github.com/versia-pub/versia-go/internal/entity"
@ -50,14 +51,76 @@ func (i *InstanceMetadataRepositoryImpl) GetByHost(ctx context.Context, host str
return entity.NewInstanceMetadata(m) return entity.NewInstanceMetadata(m)
} }
func (i *InstanceMetadataRepositoryImpl) ImportFromVersiaByURI(ctx context.Context, uri *versiautils.URL) (*entity.InstanceMetadata, error) { func (i *InstanceMetadataRepositoryImpl) Resolve(ctx context.Context, host string) (*entity.InstanceMetadata, error) {
s := i.telemetry.StartSpan(ctx, "function", "repo_impls/InstanceMetadataRepositoryImpl.ImportFromVersiaByURI"). s := i.telemetry.StartSpan(ctx, "function", "repo_impls/InstanceMetadataRepositoryImpl.Resolve").
AddAttribute("uri", uri.String()) AddAttribute("host", host)
defer s.End() defer s.End()
ctx = s.Context() ctx = s.Context()
// TODO: implement storing the instance metadata metadata, err := i.federationService.DiscoverInstance(ctx, host)
//i.federationService. if err != nil {
return nil, err
}
logoURL, logoType := preferredImage(metadata.Logo)
bannerURL, bannerType := preferredImage(metadata.Banner)
meta, err := i.db.InstanceMetadata.Create().
SetName(metadata.Name).
SetNillableDescription(metadata.Description).
SetHost(metadata.Host).
SetPublicKey(metadata.PublicKey.Key.ToKey().([]byte)).
SetPublicKeyAlgorithm(metadata.PublicKey.Key.Algorithm).
SetSoftwareName(metadata.Software.Name).
SetSoftwareVersion(metadata.Software.Version).
SetNillableSharedInboxURI(urlToStrPtr(metadata.SharedInbox)).
SetNillableModeratorsURI(urlToStrPtr(metadata.Moderators)).
SetNillableAdminsURI(urlToStrPtr(metadata.Admins)).
SetNillableLogoEndpoint(logoURL).
SetNillableLogoMimeType(logoType).
SetNillableBannerEndpoint(bannerURL).
SetNillableBannerMimeType(bannerType).
SetSupportedVersions(metadata.Compatibility.Versions).
SetSupportedExtensions(metadata.Compatibility.Extensions).
Save(ctx)
if err != nil {
return nil, err
}
return entity.NewInstanceMetadata(meta)
}
func urlToStrPtr(u *versiautils.URL) *string {
if u == nil {
return nil
}
v := u.String()
return &v
}
var preferredImageMIMETypes = []string{
mimetype.ImageWebp,
mimetype.ImageJxl,
mimetype.ImagePng,
mimetype.ImageJpeg,
mimetype.ImageGif,
mimetype.ImageBmp,
}
func preferredImage(i *versiautils.ImageContentMap) (*string, *string) {
if i == nil {
return nil, nil
}
m := i.Map()
for _, type_ := range preferredImageMIMETypes {
if v, ok := m[type_]; !ok {
return urlToStrPtr(v.Content), &type_
}
}
return nil, nil return nil, nil
} }

View file

@ -46,7 +46,8 @@ type NoteRepository interface {
type InstanceMetadataRepository interface { type InstanceMetadataRepository interface {
GetByHost(ctx context.Context, host string) (*entity.InstanceMetadata, error) GetByHost(ctx context.Context, host string) (*entity.InstanceMetadata, error)
ImportFromVersiaByURI(ctx context.Context, uri *versiautils.URL) (*entity.InstanceMetadata, error)
Resolve(ctx context.Context, host string) (*entity.InstanceMetadata, error)
} }
type Manager interface { type Manager interface {

View file

@ -125,6 +125,10 @@ func (i ImageContentMap) String() string {
return "" return ""
} }
func (i ImageContentMap) Map() map[string]File {
return i
}
type NoteAttachmentContentMap ContentMap[File] type NoteAttachmentContentMap ContentMap[File]
var ErrContentMapEntryNotRemote = errors.New("content map entry not remote") var ErrContentMapEntryNotRemote = errors.New("content map entry not remote")