Sort of implement personal feeds
This commit is contained in:
parent
1c216e415d
commit
8d2e008125
6 changed files with 47 additions and 5 deletions
|
@ -183,6 +183,17 @@ func createLocalUser(w http.ResponseWriter, r *http.Request) {
|
|||
log.Error().Err(err).Msg("Failed to add links to new user")
|
||||
_ = webutils.ProblemDetailsStatusOnly(w, http.StatusInternalServerError)
|
||||
}
|
||||
err = dbgen.Feed.Create(&models.Feed{
|
||||
Owner: user,
|
||||
OwnerId: user.ID,
|
||||
Name: user.Username + models.FeedDefaultSuffix,
|
||||
IsDefault: true,
|
||||
PublicKey: sql.NullString{Valid: false},
|
||||
})
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("Failed to create default feed for new user")
|
||||
_ = webutils.ProblemDetailsStatusOnly(w, http.StatusInternalServerError)
|
||||
}
|
||||
}
|
||||
|
||||
func deleteUser(w http.ResponseWriter, r *http.Request) {
|
||||
|
|
|
@ -685,6 +685,7 @@ func handleCreate(w http.ResponseWriter, r *http.Request, object map[string]any)
|
|||
log := hlog.FromRequest(r)
|
||||
activity := translators.ActivityCreate{}
|
||||
err := mapstructure.Decode(object, &activity)
|
||||
targetUserId := r.PathValue("id")
|
||||
if err != nil {
|
||||
log.Error().
|
||||
Err(err).
|
||||
|
@ -704,7 +705,7 @@ func handleCreate(w http.ResponseWriter, r *http.Request, object map[string]any)
|
|||
}
|
||||
switch val := activity.Object.(type) {
|
||||
case string:
|
||||
actor, err := dbgen.User.GetById(r.PathValue("id"))
|
||||
actor, err := dbgen.User.GetById(targetUserId)
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("Failed to get local actor for importing targeted note")
|
||||
_ = webutils.ProblemDetailsStatusOnly(w, http.StatusInternalServerError)
|
||||
|
@ -779,6 +780,13 @@ func handleCreate(w http.ResponseWriter, r *http.Request, object map[string]any)
|
|||
dbNote.RepliesTo = sql.NullString{Valid: true, String: replyUrl}
|
||||
}
|
||||
}
|
||||
feed, err := dbgen.Feed.Where(dbgen.Feed.OwnerId.Eq(targetUserId), dbgen.Feed.IsDefault.Is(true)).
|
||||
First()
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("Failed to get feed for targeted user inbox")
|
||||
_ = webutils.ProblemDetailsStatusOnly(w, http.StatusInternalServerError)
|
||||
return false
|
||||
}
|
||||
tx := dbgen.Q.Begin()
|
||||
err = tx.Note.Create(&dbNote)
|
||||
if err != nil {
|
||||
|
@ -800,6 +808,17 @@ func handleCreate(w http.ResponseWriter, r *http.Request, object map[string]any)
|
|||
_ = webutils.ProblemDetailsStatusOnly(w, http.StatusInternalServerError)
|
||||
return false
|
||||
}
|
||||
err = tx.NoteToFeed.Create(&models.NoteToFeed{
|
||||
Reason: string(models.FeedAppearanceReasonFollowUser),
|
||||
NoteId: dbNote.ID,
|
||||
FeedId: uint64(feed.ID),
|
||||
})
|
||||
if err != nil {
|
||||
_ = tx.Rollback()
|
||||
log.Error().Err(err).Any("note", dbNote).Msg("Failed to create note to feed relation in db")
|
||||
_ = webutils.ProblemDetailsStatusOnly(w, http.StatusInternalServerError)
|
||||
return false
|
||||
}
|
||||
err = tx.Commit()
|
||||
if err != nil {
|
||||
log.Error().Err(err).Any("note", dbNote).Msg("Failed to submit note creation in db")
|
||||
|
|
|
@ -175,7 +175,7 @@ func applyBodyHash(headers http.Header, body []byte) error {
|
|||
// If the request is POST, stores it in the db as not processed yet.
|
||||
// This is to ensure data consistency
|
||||
func prePostRequest(
|
||||
method, target string,
|
||||
target string,
|
||||
body []byte,
|
||||
actor *models.User,
|
||||
) (*uint64, error) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue