refactor(app): 🎨 improve structure / format of the code

master
Xeronith 2022-09-30 23:09:22 +03:30
rodzic 3c2aac47e5
commit aa0ac76f5b
5 zmienionych plików z 84 dodań i 31 usunięć

Wyświetl plik

@ -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
} }

Wyświetl plik

@ -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
} }

Wyświetl plik

@ -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
} }

Wyświetl plik

@ -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)
} }

Wyświetl plik

@ -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
} }
} }