From c3af1bfd6aa71bb29ac27a021c326dc135aed3f1 Mon Sep 17 00:00:00 2001 From: Xeronith Date: Fri, 19 Aug 2022 17:33:54 +0430 Subject: [PATCH] feat(app): :sparkles: follow request acceptance --- greataped/app/models/repos/followers.go | 10 ++++++++-- greataped/app/models/types/follower.go | 10 ++++++---- greataped/app/routes/followers.go | 11 +++++++++++ greataped/app/routes/inbox.go | 5 +++-- 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/greataped/app/models/repos/followers.go b/greataped/app/models/repos/followers.go index c5829ab..4c1b266 100644 --- a/greataped/app/models/repos/followers.go +++ b/greataped/app/models/repos/followers.go @@ -9,8 +9,9 @@ import ( // Follower struct defines a follower type Follower struct { gorm.Model - Target string `gorm:"not null"` - Handle string `gorm:"not null"` + Target string `gorm:"not null"` + Handle string `gorm:"not null"` + Accepted bool `gorm:"not null"` } // CreateFollower creates a new entry in the followers's table @@ -22,3 +23,8 @@ func CreateFollower(follower *Follower) *gorm.DB { func FindFollowers(dest interface{}, userIden interface{}) *gorm.DB { return db.DB.Model(&Follower{}).Find(dest, "`target` = ?", userIden) } + +// AcceptFollower accepts a follow request +func AcceptFollower(id interface{}) *gorm.DB { + return db.DB.Model(&Follower{}).Where("id = ?", id).Update("accepted", true) +} diff --git a/greataped/app/models/types/follower.go b/greataped/app/models/types/follower.go index d7d95ae..ca20bc0 100644 --- a/greataped/app/models/types/follower.go +++ b/greataped/app/models/types/follower.go @@ -1,11 +1,13 @@ package types type FollowerDTO struct { - Target string `json:"target" validate:"required"` - Handle string `json:"handle" validate:"required"` + Target string `json:"target" validate:"required"` + Handle string `json:"handle" validate:"required"` + Accepted bool `json:"accepted"` } type FollowerResponse struct { - Target string `json:"target"` - Handle string `json:"handle"` + Target string `json:"target"` + Handle string `json:"handle"` + Accepted bool `json:"accepted"` } diff --git a/greataped/app/routes/followers.go b/greataped/app/routes/followers.go index 288d83b..f843504 100644 --- a/greataped/app/routes/followers.go +++ b/greataped/app/routes/followers.go @@ -37,3 +37,14 @@ var Followers = route.New(HttpGet, "/u/:username/followers", func(x IContext) er x.Response().Header("Content-Type", "application/activity+json; charset=utf-8") return x.WriteString(string(json)) }) + +var AcceptFollowRequest = route.New(HttpPut, "/u/:username/followers/:id/accept", func(x IContext) error { + id := x.Request().Params("id") + + err := repos.AcceptFollower(id).Error + if err != nil { + return x.InternalServerError(err.Error()) + } + + return x.Nothing() +}) diff --git a/greataped/app/routes/inbox.go b/greataped/app/routes/inbox.go index 986a9e2..789b1c4 100644 --- a/greataped/app/routes/inbox.go +++ b/greataped/app/routes/inbox.go @@ -66,8 +66,9 @@ var InboxPost = route.New(HttpPost, "/u/:username/inbox", func(x IContext) error } if err := repos.CreateFollower(&repos.Follower{ - Target: x.StringUtil().Format("%s://%s/u/%s", config.PROTOCOL, config.DOMAIN, username), - Handle: follower, + Target: x.StringUtil().Format("%s://%s/u/%s", config.PROTOCOL, config.DOMAIN, username), + Handle: follower, + Accepted: true, }); err.Error != nil { return x.Conflict(err.Error.Error()) }