kopia lustrzana https://github.com/reiver/greatape
refactor(app): 🎨 improve structure / format of the code
rodzic
3c2aac47e5
commit
aa0ac76f5b
|
@ -1,8 +1,11 @@
|
||||||
package repos
|
package repos
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"contracts"
|
||||||
"db"
|
"db"
|
||||||
|
"errors"
|
||||||
|
|
||||||
|
"github.com/gofiber/fiber/v2"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -17,26 +20,54 @@ type Follower struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateFollower creates a new entry in the followers's table
|
// CreateFollower creates a new entry in the followers's table
|
||||||
func CreateFollower(follower *Follower) *gorm.DB {
|
func CreateFollower(follower *Follower) error {
|
||||||
return db.Executor.Create(follower)
|
if err := db.Executor.Create(follower).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// FindFollower searches the followers table with the condition given
|
||||||
|
func FindFollower(conds ...any) (*Follower, error) {
|
||||||
|
dest := &Follower{}
|
||||||
|
if err := db.Executor.Model(&Follower{}).Take(dest, conds...).Error; err != nil {
|
||||||
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
|
return nil, &fiber.Error{
|
||||||
|
Code: contracts.StatusNotFound,
|
||||||
|
Message: "follower not found",
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return nil, &fiber.Error{
|
||||||
|
Code: contracts.StatusInternalServerError,
|
||||||
|
Message: err.Error(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return dest, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// FindFollowers finds the user's followers
|
// FindFollowers finds the user's followers
|
||||||
func FindFollowers(dest interface{}, userIden interface{}) *gorm.DB {
|
func FindFollowers(userIden interface{}) ([]Follower, error) {
|
||||||
return db.Executor.Model(&Follower{}).Find(dest, "`target` = ?", userIden)
|
followers := &[]Follower{}
|
||||||
}
|
if err := db.Executor.Model(&Follower{}).Find(followers, "`target` = ?", userIden).Error; err != nil {
|
||||||
|
return *followers, err
|
||||||
|
}
|
||||||
|
|
||||||
// FindFollower searches the follower's table with the condition given
|
return *followers, nil
|
||||||
func FindFollower(dest interface{}, conds ...interface{}) *gorm.DB {
|
|
||||||
return db.Executor.Model(&Follower{}).Take(dest, conds...)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// FindFollowerById searches the followers's table with the id given
|
// FindFollowerById searches the followers's table with the id given
|
||||||
func FindFollowerById(dest interface{}, id uint64) *gorm.DB {
|
func FindFollowerById(id uint64) (*Follower, error) {
|
||||||
return FindFollower(dest, "id = ?", id)
|
return FindFollower("id = ?", id)
|
||||||
}
|
}
|
||||||
|
|
||||||
// AcceptFollower accepts a follow request
|
// AcceptFollower accepts a follow request
|
||||||
func AcceptFollower(id interface{}) *gorm.DB {
|
func AcceptFollower(id interface{}) error {
|
||||||
return db.Executor.Model(&Follower{}).Where("id = ?", id).Update("accepted", true)
|
if err := db.Executor.Model(&Follower{}).Where("id = ?", id).Update("accepted", true).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,11 +14,20 @@ type Following struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateFollowing creates a new entry in the following's table
|
// CreateFollowing creates a new entry in the following's table
|
||||||
func CreateFollowing(following *Following) *gorm.DB {
|
func CreateFollowing(following *Following) error {
|
||||||
return db.Executor.Create(following)
|
if err := db.Executor.Create(following).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// FindFollowing finds what accounts the user is following
|
// FindFollowing finds what accounts the user is following
|
||||||
func FindFollowing(dest interface{}, userIden interface{}) *gorm.DB {
|
func FindFollowing(userIden interface{}) ([]Following, error) {
|
||||||
return db.Executor.Model(&Follower{}).Find(dest, "`handle` = ?", userIden)
|
followings := &[]Following{}
|
||||||
|
if err := db.Executor.Model(&Following{}).Find(followings, "`target` = ?", userIden).Error; err != nil {
|
||||||
|
return *followings, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return *followings, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,6 @@ package routes
|
||||||
import (
|
import (
|
||||||
"activitypub"
|
"activitypub"
|
||||||
"app/models/domain"
|
"app/models/domain"
|
||||||
"app/models/dto"
|
|
||||||
"app/models/repos"
|
"app/models/repos"
|
||||||
"config"
|
"config"
|
||||||
. "contracts"
|
. "contracts"
|
||||||
|
@ -12,6 +11,15 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Followers godoc
|
||||||
|
// @Tags ActivityPub
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
// @Param username path string true "Username"
|
||||||
|
// @Success 200 {object} map[string]interface{}
|
||||||
|
// @Router /u/{username}/followers [get]
|
||||||
|
func _() {}
|
||||||
|
|
||||||
var Followers = route.New(HttpGet, "/u/:username/followers", func(x IContext) error {
|
var Followers = route.New(HttpGet, "/u/:username/followers", func(x IContext) error {
|
||||||
username := domain.Username(x.Request().Params("username"))
|
username := domain.Username(x.Request().Params("username"))
|
||||||
if username.IsEmpty() {
|
if username.IsEmpty() {
|
||||||
|
@ -39,14 +47,13 @@ var Followers = route.New(HttpGet, "/u/:username/followers", func(x IContext) er
|
||||||
actor := x.StringUtil().Format("%s://%s/u/%s", config.PROTOCOL, config.DOMAIN, username)
|
actor := x.StringUtil().Format("%s://%s/u/%s", config.PROTOCOL, config.DOMAIN, username)
|
||||||
id := x.StringUtil().Format("%s://%s/u/%s/followers", config.PROTOCOL, config.DOMAIN, username)
|
id := x.StringUtil().Format("%s://%s/u/%s/followers", config.PROTOCOL, config.DOMAIN, username)
|
||||||
|
|
||||||
followers := &[]dto.FollowerResponse{}
|
followers, err := repos.FindFollowers(actor)
|
||||||
err := repos.FindFollowers(followers, actor).Error
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
items := []string{}
|
items := []string{}
|
||||||
for _, follower := range *followers {
|
for _, follower := range followers {
|
||||||
items = append(items, follower.Handle)
|
items = append(items, follower.Handle)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,8 +77,8 @@ var AcceptFollowRequest = route.New(HttpPut, "/u/:username/followers/:id/accept"
|
||||||
return x.BadRequest("invalid_id")
|
return x.BadRequest("invalid_id")
|
||||||
}
|
}
|
||||||
|
|
||||||
follower := &repos.Follower{}
|
follower, err := repos.FindFollowerById(followerId)
|
||||||
if err := repos.FindFollowerById(follower, followerId).Error; err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,7 +101,7 @@ var AcceptFollowRequest = route.New(HttpPut, "/u/:username/followers/:id/accept"
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := repos.AcceptFollower(follower.ID).Error; err != nil {
|
if err := repos.AcceptFollower(follower.ID); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,13 +3,21 @@ package routes
|
||||||
import (
|
import (
|
||||||
"activitypub"
|
"activitypub"
|
||||||
"app/models/domain"
|
"app/models/domain"
|
||||||
"app/models/dto"
|
|
||||||
"app/models/repos"
|
"app/models/repos"
|
||||||
"config"
|
"config"
|
||||||
. "contracts"
|
. "contracts"
|
||||||
"server/route"
|
"server/route"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Following godoc
|
||||||
|
// @Tags ActivityPub
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
// @Param username path string true "Username"
|
||||||
|
// @Success 200 {object} map[string]interface{}
|
||||||
|
// @Router /u/{username}/following [get]
|
||||||
|
func _() {}
|
||||||
|
|
||||||
var Following = route.New(HttpGet, "/u/:username/following", func(x IContext) error {
|
var Following = route.New(HttpGet, "/u/:username/following", func(x IContext) error {
|
||||||
username := domain.Username(x.Request().Params("username"))
|
username := domain.Username(x.Request().Params("username"))
|
||||||
if username.IsEmpty() {
|
if username.IsEmpty() {
|
||||||
|
@ -37,14 +45,13 @@ var Following = route.New(HttpGet, "/u/:username/following", func(x IContext) er
|
||||||
actor := x.StringUtil().Format("%s://%s/u/%s", config.PROTOCOL, config.DOMAIN, username)
|
actor := x.StringUtil().Format("%s://%s/u/%s", config.PROTOCOL, config.DOMAIN, username)
|
||||||
id := x.StringUtil().Format("%s://%s/u/%s/following", config.PROTOCOL, config.DOMAIN, username)
|
id := x.StringUtil().Format("%s://%s/u/%s/following", config.PROTOCOL, config.DOMAIN, username)
|
||||||
|
|
||||||
followings := &[]dto.FollowerResponse{}
|
followings, err := repos.FindFollowing(actor)
|
||||||
err := repos.FindFollowing(followings, actor).Error
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
items := []string{}
|
items := []string{}
|
||||||
for _, following := range *followings {
|
for _, following := range followings {
|
||||||
items = append(items, following.Target)
|
items = append(items, following.Target)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,8 +61,8 @@ var InboxPost = route.New(HttpPost, "/u/:username/inbox", func(x IContext) error
|
||||||
Accepted: false,
|
Accepted: false,
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := repos.CreateFollower(follower); err.Error != nil {
|
if err := repos.CreateFollower(follower); err != nil {
|
||||||
return x.Conflict(err.Error)
|
return x.Conflict(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if user.Access == repos.ACCESS_PUBLIC {
|
if user.Access == repos.ACCESS_PUBLIC {
|
||||||
|
@ -78,8 +78,7 @@ var InboxPost = route.New(HttpPost, "/u/:username/inbox", func(x IContext) error
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err := repos.AcceptFollower(follower.ID).Error
|
if err := repos.AcceptFollower(follower.ID); err != nil {
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Ładowanie…
Reference in New Issue