diff --git a/storage-new/models/CollectionTargetType.go b/storage-new/models/CollectionTargetType.go index c6f6f5c..1b2ca4c 100644 --- a/storage-new/models/CollectionTargetType.go +++ b/storage-new/models/CollectionTargetType.go @@ -25,6 +25,6 @@ func (n *CollectionTargetType) Value() (driver.Value, error) { } func (ct *CollectionTargetType) Scan(value any) error { - *ct = CollectionTargetType(value.(uint32)) + *ct = CollectionTargetType(value.(string)) return nil } diff --git a/storage-new/models/Note.go b/storage-new/models/Note.go index 2b6aabb..8c7e351 100644 --- a/storage-new/models/Note.go +++ b/storage-new/models/Note.go @@ -16,7 +16,7 @@ type Note struct { // Soft delete means that this entry still exists in the db, but gorm won't include it anymore unless specifically told to // If not null, this entry is marked as deleted DeletedAt gorm.DeletedAt `gorm:"index"` - Creator User // The user that created this note + Creator *User // The user that created this note CreatorId string // Id of the creator user Remote bool // Whether the note is originally a remote one and just "cached" // Raw content of the note. So without additional formatting applied @@ -26,7 +26,7 @@ type Note struct { RepliesTo sql.NullString // Url of the message this replies to Quotes sql.NullString // url of the message this note quotes AccessLevel NoteAccessLevel // Where to send this message to (public, home, followers, dm) - Origin RemoteServer + Origin *RemoteServer OriginId uint AttachmentRelations []NoteToAttachment `gorm:"foreignKey:NoteId;constraint:OnDelete:CASCADE"` // Attachments added on to this note diff --git a/web/debug/posts.go b/web/debug/posts.go index ce999f4..11295a4 100644 --- a/web/debug/posts.go +++ b/web/debug/posts.go @@ -59,7 +59,7 @@ func postAs(w http.ResponseWriter, r *http.Request) { n := dbgen.Note note := models.Note{ ID: shared.NewId(), - Creator: *user, + Creator: user, CreatorId: user.ID, RawContent: data.Content, Remote: false, @@ -167,3 +167,17 @@ func notesFrom(w http.ResponseWriter, r *http.Request) { }) webutils.SendJson(w, publicNotes) } + +func inReplyTo(w http.ResponseWriter, r *http.Request) { + log := hlog.FromRequest(r) + noteId := r.PathValue("id") + notes, err := dbgen.Note. + Where(dbgen.Note.RepliesTo.Eq(sql.NullString{Valid: true, String: noteId})). + Find() + if err != nil { + log.Error().Err(err).Str("id", noteId).Msg("Error getting replies to note with id") + webutils.ProblemDetailsStatusOnly(w, http.StatusInternalServerError) + return + } + _ = webutils.SendJson(w, notes) +} diff --git a/web/debug/server.go b/web/debug/server.go index 31388a3..4ad5d1b 100644 --- a/web/debug/server.go +++ b/web/debug/server.go @@ -34,6 +34,7 @@ func New(addr string) *Server { handler.HandleFunc("GET /import-server", importServerInfo) handler.HandleFunc("GET /request-follow", kickoffFollow) handler.HandleFunc("POST /send-as", proxyMessageToTarget) + handler.HandleFunc("GET /replies-to/{id}", inReplyTo) web := http.Server{ Addr: addr, Handler: webutils.ChainMiddlewares( diff --git a/web/public/api/activitypub/inbox.go b/web/public/api/activitypub/inbox.go index 8e6abe4..e9b6ed9 100644 --- a/web/public/api/activitypub/inbox.go +++ b/web/public/api/activitypub/inbox.go @@ -740,7 +740,7 @@ func handleCreate(w http.ResponseWriter, r *http.Request, object map[string]any) dbNote := models.Note{ ID: objectNote.Id, CreatedAt: objectNote.Published, - Creator: *actingUser, + Creator: actingUser, CreatorId: actingUser.ID, Remote: true, RawContent: objectNote.Content,