diff --git a/greataped/app/go.mod b/greataped/app/go.mod index cedab5c..60bbff7 100644 --- a/greataped/app/go.mod +++ b/greataped/app/go.mod @@ -3,31 +3,22 @@ module app go 1.19 require ( - github.com/gofiber/fiber/v2 v2.38.1 github.com/google/uuid v1.3.0 github.com/mazen160/go-random v0.0.0-20210308102632-d2b501c85c03 github.com/mitchellh/mapstructure v1.5.0 github.com/swaggo/swag v1.8.6 - gorm.io/gorm v1.23.8 ) require ( github.com/KyleBanks/depth v1.2.1 // indirect github.com/PuerkitoBio/purell v1.1.1 // indirect github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect - github.com/andybalholm/brotli v1.0.4 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect github.com/go-openapi/jsonreference v0.19.6 // indirect github.com/go-openapi/spec v0.20.4 // indirect github.com/go-openapi/swag v0.19.15 // indirect - github.com/jinzhu/inflection v1.0.0 // indirect - github.com/jinzhu/now v1.1.4 // indirect github.com/josharian/intern v1.0.0 // indirect - github.com/klauspost/compress v1.15.0 // indirect github.com/mailru/easyjson v0.7.6 // indirect - github.com/valyala/bytebufferpool v1.0.0 // indirect - github.com/valyala/fasthttp v1.40.0 // indirect - github.com/valyala/tcplisten v1.0.0 // indirect golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4 // indirect golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9 // indirect golang.org/x/text v0.3.7 // indirect diff --git a/greataped/app/go.sum b/greataped/app/go.sum index e197f29..af224bd 100644 --- a/greataped/app/go.sum +++ b/greataped/app/go.sum @@ -4,8 +4,6 @@ github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tN github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= -github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -20,18 +18,10 @@ github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7 github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.15 h1:D2NRCBzS9/pEY3gP9Nl8aDqGUcPFrwG2p+CNFrLyrCM= github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/gofiber/fiber/v2 v2.38.1 h1:GEQ/Yt3Wsf2a30iTqtLXlBYJZso0JXPovt/tmj5H9jU= -github.com/gofiber/fiber/v2 v2.38.1/go.mod h1:t0NlbaXzuGH7I+7M4paE848fNWInZ7mfxI/Er1fTth8= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= -github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= -github.com/jinzhu/now v1.1.4 h1:tHnRBy1i5F2Dh8BAFxqFzxKqqvezXrL2OW1TnX+Mlas= -github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/klauspost/compress v1.15.0 h1:xqfchp4whNFxn5A4XFyyYtitiWI8Hy5EW59jEwcyL6U= -github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= @@ -55,28 +45,15 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/swaggo/swag v1.8.6 h1:2rgOaLbonWu1PLP6G+/rYjSvPg0jQE0HtrEKuE380eg= github.com/swaggo/swag v1.8.6/go.mod h1:jMLeXOOmYyjk8PvHTsXBdrubsNd9gUJTTCzL5iBnseg= -github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.40.0 h1:CRq/00MfruPGFLTQKY8b+8SfdK60TxNztjRMnH0t1Yc= -github.com/valyala/fasthttp v1.40.0/go.mod h1:t/G+3rLek+CyY9bnIE+YlMRddxVAAGjhxndDB4i4C0I= -github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8= -github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= -golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 h1:kQgndtyPBW/JIYERgdxfwMYh3AVStj88WQTlNDi2a+o= golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4 h1:HVyaeDAYux4pnY+D/SiwmLOR36ewZ4iGQIIrtnuCjFA= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9 h1:nhht2DYV/Sn3qOayu8lM+cU1ii9sTLUeBQwQQfUHtrs= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= @@ -94,5 +71,3 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gorm.io/gorm v1.23.8 h1:h8sGJ+biDgBA1AD1Ha9gFCx7h8npU7AsLdlkX0n2TpE= -gorm.io/gorm v1.23.8/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= diff --git a/greataped/app/main.go b/greataped/app/main.go index ff1fdce..593a396 100644 --- a/greataped/app/main.go +++ b/greataped/app/main.go @@ -2,11 +2,11 @@ package main import ( "app/docs" - "app/models/repos" "app/routes" "caching" "config" "db" + "db/repos" "fmt" "logging" "server" diff --git a/greataped/app/models/repos/all.go b/greataped/app/models/repos/all.go deleted file mode 100644 index 9667453..0000000 --- a/greataped/app/models/repos/all.go +++ /dev/null @@ -1,9 +0,0 @@ -package repos - -var All = []interface{}{ - &User{}, - &IncomingActivity{}, - &OutgoingActivity{}, - &Follower{}, - &Following{}, -} diff --git a/greataped/app/models/repos/auth.go b/greataped/app/models/repos/auth.go deleted file mode 100644 index 528f2c6..0000000 --- a/greataped/app/models/repos/auth.go +++ /dev/null @@ -1,87 +0,0 @@ -package repos - -import ( - "contracts" - "db" - "errors" - - "github.com/gofiber/fiber/v2" - "gorm.io/gorm" -) - -type Access int64 - -const ( - ACCESS_PUBLIC Access = iota - ACCESS_PRIVATE -) - -// User struct defines the user -type User struct { - gorm.Model - Username string `gorm:"uniqueIndex;not null"` - Email string `gorm:"uniqueIndex;not null"` - Password string `gorm:"not null"` - DisplayName string - Bio string - Github string - ApiKey string - PrivateKey string - PublicKey string - Avatar string - Banner string - Access Access -} - -// CreateUser create a user entry in the user's table -func CreateUser(user *User) error { - if err := db.Executor.Create(user).Error; err != nil { - return err - } - - return nil -} - -// FindUser searches the user's table with the condition given -func FindUser(conds ...any) (*User, error) { - dest := &User{} - if err := db.Executor.Model(dest).Take(dest, conds...).Error; err != nil { - if errors.Is(err, gorm.ErrRecordNotFound) { - return nil, &fiber.Error{ - Code: contracts.StatusNotFound, - Message: "user not found", - } - } else { - return nil, &fiber.Error{ - Code: contracts.StatusInternalServerError, - Message: err.Error(), - } - } - } - - return dest, nil -} - -// FindUserById searches the user's table with the id given -func FindUserById(id uint) (*User, error) { - return FindUser("id = ?", id) -} - -// FindUserByEmail searches the user's table with the email given -func FindUserByEmail(email string) (*User, error) { - return FindUser("email = ?", email) -} - -// FindUserByUsername searches the user's table with the name given -func FindUserByUsername(username string) (*User, error) { - return FindUser("username = ?", username) -} - -// UpdateProfile updates the user's profile with the info given -func UpdateProfile(userId interface{}, data interface{}) error { - if err := db.Executor.Model(&User{}).Where("id = ?", userId).Updates(data).Error; err != nil { - return err - } - - return nil -} diff --git a/greataped/app/models/repos/followers.go b/greataped/app/models/repos/followers.go deleted file mode 100644 index cd7ff4e..0000000 --- a/greataped/app/models/repos/followers.go +++ /dev/null @@ -1,73 +0,0 @@ -package repos - -import ( - "contracts" - "db" - "errors" - - "github.com/gofiber/fiber/v2" - "gorm.io/gorm" -) - -// Follower struct defines a follower -type Follower struct { - gorm.Model - Target string `gorm:"not null"` - Handle string `gorm:"not null"` - HandleInbox string - Activity string - Accepted bool -} - -// CreateFollower creates a new entry in the followers's table -func CreateFollower(follower *Follower) error { - 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 -func FindFollowers(userIden interface{}) ([]Follower, error) { - result := &[]Follower{} - if err := db.Executor.Model(&Follower{}).Find(result, "`target` = ?", userIden).Error; err != nil { - return *result, err - } - - return *result, nil -} - -// FindFollowerById searches the followers's table with the id given -func FindFollowerById(id uint64) (*Follower, error) { - return FindFollower("id = ?", id) -} - -// AcceptFollower accepts a follow request -func AcceptFollower(id interface{}) error { - if err := db.Executor.Model(&Follower{}).Where("id = ?", id).Update("accepted", true).Error; err != nil { - return err - } - - return nil -} diff --git a/greataped/app/models/repos/following.go b/greataped/app/models/repos/following.go deleted file mode 100644 index 346ffda..0000000 --- a/greataped/app/models/repos/following.go +++ /dev/null @@ -1,33 +0,0 @@ -package repos - -import ( - "db" - - "gorm.io/gorm" -) - -// Following struct defines an account that the user follows -type Following struct { - gorm.Model - Target string `gorm:"not null"` - Handle string `gorm:"not null"` -} - -// CreateFollowing creates a new entry in the following's table -func CreateFollowing(following *Following) error { - if err := db.Executor.Create(following).Error; err != nil { - return err - } - - return nil -} - -// FindFollowing finds what accounts the user is following -func FindFollowing(userIden interface{}) ([]Following, error) { - followings := &[]Following{} - if err := db.Executor.Model(&Following{}).Find(followings, "`target` = ?", userIden).Error; err != nil { - return *followings, err - } - - return *followings, nil -} diff --git a/greataped/app/models/repos/inbox.go b/greataped/app/models/repos/inbox.go deleted file mode 100644 index 1d56e7c..0000000 --- a/greataped/app/models/repos/inbox.go +++ /dev/null @@ -1,70 +0,0 @@ -package repos - -import ( - "contracts" - "db" - "errors" - - "github.com/gofiber/fiber/v2" - "gorm.io/gorm" -) - -// IncomingActivity struct defines the activity -type IncomingActivity struct { - gorm.Model - Timestamp int64 - From string `gorm:"not null"` - To string `gorm:"not null"` - Guid string `gorm:"uniqueIndex;not null"` - Content string `gorm:"not null"` -} - -// CreateIncomingActivity creates an activity entry in the incoming activities table -func CreateIncomingActivity(activity *IncomingActivity) error { - if err := db.Executor.Create(activity).Error; err != nil { - return err - } - - return nil -} - -// FindIncomingActivity searches the incoming activities table with the condition given -// and returns a single record. -func FindIncomingActivity(conds ...interface{}) (*IncomingActivity, error) { - dest := &IncomingActivity{} - if err := db.Executor.Model(&IncomingActivity{}).Take(dest, conds...).Error; err != nil { - if errors.Is(err, gorm.ErrRecordNotFound) { - return nil, &fiber.Error{ - Code: contracts.StatusNotFound, - Message: "activity not found", - } - } else { - return nil, &fiber.Error{ - Code: contracts.StatusInternalServerError, - Message: err.Error(), - } - } - } - - return dest, nil -} - -// FindIncomingActivitiesForUser finds the activities posted to user -func FindIncomingActivitiesForUser(userIden interface{}) ([]IncomingActivity, error) { - result := &[]IncomingActivity{} - if err := db.Executor.Model(&IncomingActivity{}).Find(result, "`to` = ?", userIden).Error; err != nil { - return *result, err - } - - return *result, nil -} - -// FindIncomingActivityById searches the incoming activities table with the id given -func FindIncomingActivityById(id uint) (*IncomingActivity, error) { - return FindIncomingActivity("id = ?", id) -} - -// FindIncomingActivityByGuid searches the incoming activities table with the guid given -func FindIncomingActivityByGuid(guid string) (*IncomingActivity, error) { - return FindIncomingActivity("guid = ?", guid) -} diff --git a/greataped/app/routes/followers.go b/greataped/app/routes/followers.go index 243ae61..71ff907 100644 --- a/greataped/app/routes/followers.go +++ b/greataped/app/routes/followers.go @@ -3,9 +3,9 @@ package routes import ( "activitypub" "app/models/domain" - "app/models/repos" "config" . "contracts" + "db/repos" "encoding/json" "server/route" "strconv" @@ -47,7 +47,7 @@ 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) id := x.StringUtil().Format("%s://%s/u/%s/followers", config.PROTOCOL, config.DOMAIN, username) - followers, err := repos.FindFollowers(actor) + followers, err := repos.Default.FindFollowers(actor) if err != nil { return err } @@ -77,7 +77,7 @@ var AcceptFollowRequest = route.New(HttpPut, "/u/:username/followers/:id/accept" return x.BadRequest("invalid_id") } - follower, err := repos.FindFollowerById(followerId) + follower, err := repos.Default.FindFollowerById(followerId) if err != nil { return err } @@ -90,7 +90,7 @@ var AcceptFollowRequest = route.New(HttpPut, "/u/:username/followers/:id/accept" Object: follower.Activity, }) - user, err := repos.FindUserByUsername(username) + user, err := repos.Default.FindUserByUsername(username) if err != nil { return err } @@ -101,7 +101,7 @@ var AcceptFollowRequest = route.New(HttpPut, "/u/:username/followers/:id/accept" return err } - if err := repos.AcceptFollower(follower.ID); err != nil { + if err := repos.Default.AcceptFollower(follower.ID); err != nil { return err } diff --git a/greataped/app/routes/following.go b/greataped/app/routes/following.go index c955d6e..491901d 100644 --- a/greataped/app/routes/following.go +++ b/greataped/app/routes/following.go @@ -3,9 +3,9 @@ package routes import ( "activitypub" "app/models/domain" - "app/models/repos" "config" . "contracts" + "db/repos" "server/route" ) @@ -45,7 +45,7 @@ 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) id := x.StringUtil().Format("%s://%s/u/%s/following", config.PROTOCOL, config.DOMAIN, username) - followings, err := repos.FindFollowing(actor) + followings, err := repos.Default.FindFollowing(actor) if err != nil { return err } diff --git a/greataped/app/routes/helpers.go b/greataped/app/routes/helpers.go index 092a0bc..fd55ba2 100644 --- a/greataped/app/routes/helpers.go +++ b/greataped/app/routes/helpers.go @@ -2,8 +2,8 @@ package routes import ( "activitypub" - "app/models/repos" "config" + "db/repos" "encoding/hex" "fmt" "server/mime" diff --git a/greataped/app/routes/inbox.go b/greataped/app/routes/inbox.go index 48fa1fc..10b1f88 100644 --- a/greataped/app/routes/inbox.go +++ b/greataped/app/routes/inbox.go @@ -2,9 +2,9 @@ package routes import ( "activitypub" - "app/models/repos" "config" . "contracts" + "db/repos" "encoding/json" "server/route" "time" @@ -20,7 +20,7 @@ var InboxPost = route.New(HttpPost, "/u/:username/inbox", func(x IContext) error return x.BadRequest("Bad request") } - user, err := repos.FindUserByUsername(username) + user, err := repos.Default.FindUserByUsername(username) if err != nil { return err } @@ -60,7 +60,7 @@ var InboxPost = route.New(HttpPost, "/u/:username/inbox", func(x IContext) error Accepted: false, } - if err := repos.CreateFollower(follower); err != nil { + if err := repos.Default.CreateFollower(follower); err != nil { return x.Conflict(err) } @@ -77,7 +77,7 @@ var InboxPost = route.New(HttpPost, "/u/:username/inbox", func(x IContext) error return err } - if err := repos.AcceptFollower(follower.ID); err != nil { + if err := repos.Default.AcceptFollower(follower.ID); err != nil { return err } } @@ -106,7 +106,7 @@ var InboxPost = route.New(HttpPost, "/u/:username/inbox", func(x IContext) error Content: note.Content, } - if err := repos.CreateIncomingActivity(message); err != nil { + if err := repos.Default.CreateIncomingActivity(message); err != nil { return x.Conflict(err) } @@ -127,7 +127,7 @@ var InboxGet = route.New(HttpGet, "/u/:username/inbox", func(x IContext) error { actor := x.StringUtil().Format("%s://%s/u/%s", config.PROTOCOL, config.DOMAIN, username) id := x.StringUtil().Format("%s://%s/u/%s/inbox", config.PROTOCOL, config.DOMAIN, username) - messages, err := repos.FindIncomingActivitiesForUser(actor) + messages, err := repos.Default.FindIncomingActivitiesForUser(actor) if err != nil { return err } diff --git a/greataped/app/routes/login.go b/greataped/app/routes/login.go index f4497e0..0de3f30 100644 --- a/greataped/app/routes/login.go +++ b/greataped/app/routes/login.go @@ -2,8 +2,8 @@ package routes import ( "app/models/dto" - "app/models/repos" . "contracts" + "db/repos" "encoding/json" "server/route" "utility/jwt" @@ -26,7 +26,7 @@ var Login = route.New(HttpPost, "/api/v1/login", func(x IContext) error { return err } - user, err := repos.FindUserByEmail(body.Email) + user, err := repos.Default.FindUserByEmail(body.Email) if err != nil { return x.Unauthorized("invalid email or password") } diff --git a/greataped/app/routes/message.go b/greataped/app/routes/message.go index cb74a51..a52af3a 100644 --- a/greataped/app/routes/message.go +++ b/greataped/app/routes/message.go @@ -1,8 +1,8 @@ package routes import ( - "app/models/repos" . "contracts" + "db/repos" "server/route" ) @@ -12,7 +12,7 @@ var Message = route.New(HttpGet, "/m/:guid", func(x IContext) error { return x.BadRequest("bad_request") } - response, err := repos.FindOutgoingActivityByGuid(guid) + response, err := repos.Default.FindOutgoingActivityByGuid(guid) if err != nil { return err } diff --git a/greataped/app/routes/outbox.go b/greataped/app/routes/outbox.go index 88491b4..8ea7679 100644 --- a/greataped/app/routes/outbox.go +++ b/greataped/app/routes/outbox.go @@ -2,9 +2,9 @@ package routes import ( "activitypub" - "app/models/repos" "config" . "contracts" + "db/repos" "encoding/json" "server/route" "time" @@ -18,7 +18,7 @@ var OutboxPost = route.New(HttpPost, "/u/:username/outbox", func(x IContext) err return x.BadRequest(err) } - user, err := repos.FindUserByUsername(username) + user, err := repos.Default.FindUserByUsername(username) if err != nil { return err } @@ -60,7 +60,7 @@ var OutboxPost = route.New(HttpPost, "/u/:username/outbox", func(x IContext) err Content: note.Content, } - if err := repos.CreateOutgoingActivity(message); err != nil { + if err := repos.Default.CreateOutgoingActivity(message); err != nil { return x.Conflict(err) } @@ -76,7 +76,7 @@ var OutboxGet = route.New(HttpGet, "/u/:username/outbox", func(x IContext) error actor := x.StringUtil().Format("%s://%s/u/%s", config.PROTOCOL, config.DOMAIN, username) id := x.StringUtil().Format("%s://%s/u/%s/outbox", config.PROTOCOL, config.DOMAIN, username) - messages, err := repos.FindOutgoingActivitiesByUser(actor) + messages, err := repos.Default.FindOutgoingActivitiesByUser(actor) if err != nil { return err } diff --git a/greataped/app/routes/profile.go b/greataped/app/routes/profile.go index 63eb7e0..91343a2 100644 --- a/greataped/app/routes/profile.go +++ b/greataped/app/routes/profile.go @@ -2,9 +2,9 @@ package routes import ( "app/models/dto" - "app/models/repos" "config" . "contracts" + "db/repos" "encoding/json" "server/route" ) @@ -27,7 +27,7 @@ var Profile = route.New(HttpGet, "/profile", func(x IContext) error { func _() {} var GetProfile = route.New(HttpGet, "/api/v1/profile", func(x IContext) error { - user, err := repos.FindUserById(x.GetUser()) + user, err := repos.Default.FindUserById(x.GetUser()) if err != nil { return x.Unauthorized(err) } @@ -55,7 +55,7 @@ var UpdateProfile = route.New(HttpPost, "/api/v1/profile", func(x IContext) erro return err } - user, err := repos.FindUserById(x.GetUser()) + user, err := repos.Default.FindUserById(x.GetUser()) if err != nil { return x.Unauthorized(err) } @@ -65,7 +65,7 @@ var UpdateProfile = route.New(HttpPost, "/api/v1/profile", func(x IContext) erro access = repos.ACCESS_PRIVATE } - if err := repos.UpdateProfile(user.ID, + if err := repos.Default.UpdateProfile(user.ID, Values{ "display_name": body.DisplayName, "bio": body.Bio, diff --git a/greataped/app/routes/signup.go b/greataped/app/routes/signup.go index 18b7c42..486aa80 100644 --- a/greataped/app/routes/signup.go +++ b/greataped/app/routes/signup.go @@ -2,8 +2,8 @@ package routes import ( "app/models/dto" - "app/models/repos" . "contracts" + "db/repos" "encoding/json" "server/route" "utility" @@ -26,7 +26,7 @@ var Signup = route.New(HttpPost, "/api/v1/signup", func(x IContext) error { return err } - if _, err := repos.FindUserByEmail(body.Email); err == nil { + if _, err := repos.Default.FindUserByEmail(body.Email); err == nil { return x.Conflict("email already exists") } @@ -95,7 +95,7 @@ var Verify = route.New(HttpPost, "/api/v1/verify", func(x IContext) error { } user := registration.user - if err := repos.CreateUser(user); err != nil { + if err := repos.Default.CreateUser(user); err != nil { return x.Conflict(err) } diff --git a/greataped/app/routes/user.go b/greataped/app/routes/user.go index bc4b935..97ff247 100644 --- a/greataped/app/routes/user.go +++ b/greataped/app/routes/user.go @@ -2,9 +2,9 @@ package routes import ( "app/models/domain" - "app/models/repos" "config" "contracts" + "db/repos" "server/route" ) @@ -36,7 +36,7 @@ var User = route.New(contracts.HttpGet, "/u/:username", func(x contracts.IContex return x.Activity(actor) } else { - user, err := repos.FindUserByUsername(username.String()) + user, err := repos.Default.FindUserByUsername(username.String()) if err != nil { return err } diff --git a/greataped/app/routes/webfinger.go b/greataped/app/routes/webfinger.go index 3e6d5c0..55711f5 100644 --- a/greataped/app/routes/webfinger.go +++ b/greataped/app/routes/webfinger.go @@ -1,9 +1,9 @@ package routes import ( - "app/models/repos" "config" . "contracts" + "db/repos" "fmt" "server/route" ) @@ -26,7 +26,7 @@ var WebFinger = route.New(HttpGet, "/.well-known/webfinger", func(x IContext) er username := x.StringUtil().Replace(resource, "acct:", "", -1) username = x.StringUtil().Replace(username, fmt.Sprintf("@%s", config.DOMAIN), "", -1) - user, err := repos.FindUserByUsername(username) + user, err := repos.Default.FindUserByUsername(username) if err != nil { return err } diff --git a/greataped/app/models/repos/outbox.go b/greataped/db/repos/outbox.go similarity index 60% rename from greataped/app/models/repos/outbox.go rename to greataped/db/repos/outbox.go index 982c8e0..8e11e22 100644 --- a/greataped/app/models/repos/outbox.go +++ b/greataped/db/repos/outbox.go @@ -2,7 +2,6 @@ package repos import ( "contracts" - "db" "errors" "github.com/gofiber/fiber/v2" @@ -20,8 +19,8 @@ type OutgoingActivity struct { } // CreateOutgoingActivity creates an activity entry in the outgoing activities table -func CreateOutgoingActivity(activity *OutgoingActivity) error { - if err := db.Executor.Create(activity).Error; err != nil { +func (repo *repository) CreateOutgoingActivity(activity *OutgoingActivity) error { + if err := repo.Storage.Create(activity).Error; err != nil { return err } @@ -30,9 +29,9 @@ func CreateOutgoingActivity(activity *OutgoingActivity) error { // FindOutgoingActivity searches the outgoing activities table with the condition given // and returns a single record. -func FindOutgoingActivity(conds ...interface{}) (*OutgoingActivity, error) { +func (repo *repository) FindOutgoingActivity(conds ...interface{}) (*OutgoingActivity, error) { dest := &OutgoingActivity{} - if err := db.Executor.Model(&OutgoingActivity{}).Take(dest, conds...).Error; err != nil { + if err := repo.Storage.Model(&OutgoingActivity{}).Take(dest, conds...).Error; err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return nil, &fiber.Error{ Code: contracts.StatusNotFound, @@ -50,9 +49,9 @@ func FindOutgoingActivity(conds ...interface{}) (*OutgoingActivity, error) { } // FindOutgoingActivitiesByUser finds the activities posted by user -func FindOutgoingActivitiesByUser(userIden interface{}) ([]OutgoingActivity, error) { +func (repo *repository) FindOutgoingActivitiesByUser(userIden interface{}) ([]OutgoingActivity, error) { result := &[]OutgoingActivity{} - if err := db.Executor.Model(&OutgoingActivity{}).Find(result, "`from` = ?", userIden).Error; err != nil { + if err := repo.Storage.Model(&OutgoingActivity{}).Find(result, "`from` = ?", userIden).Error; err != nil { return *result, err } @@ -60,11 +59,11 @@ func FindOutgoingActivitiesByUser(userIden interface{}) ([]OutgoingActivity, err } // FindOutgoingActivityById searches the outgoing activities table with the id given -func FindOutgoingActivityById(id uint) (*OutgoingActivity, error) { - return FindOutgoingActivity("id = ?", id) +func (repo *repository) FindOutgoingActivityById(id uint) (*OutgoingActivity, error) { + return repo.FindOutgoingActivity("id = ?", id) } // FindOutgoingActivityByGuid searches the outgoing activities table with the guid given -func FindOutgoingActivityByGuid(guid string) (*OutgoingActivity, error) { - return FindOutgoingActivity("guid = ?", guid) +func (repo *repository) FindOutgoingActivityByGuid(guid string) (*OutgoingActivity, error) { + return repo.FindOutgoingActivity("guid = ?", guid) } diff --git a/greataped/go.work.sum b/greataped/go.work.sum index 482a71f..6c1116d 100644 --- a/greataped/go.work.sum +++ b/greataped/go.work.sum @@ -1,5 +1,7 @@ github.com/99designs/httpsignatures-go v0.0.0-20170731043157-88528bf4ca7e/go.mod h1:Xa6lInWHNQnuWoF0YPSsx+INFA9qk7/7pTjwb3PInkY= github.com/go-fed/httpsig v1.1.0/go.mod h1:RCMrTZvN1bJYtofsG4rd5NaO5obxQ5xBkdiS7xsT7bM= +github.com/gofiber/fiber/v2 v2.38.1 h1:GEQ/Yt3Wsf2a30iTqtLXlBYJZso0JXPovt/tmj5H9jU= +github.com/gofiber/fiber/v2 v2.38.1/go.mod h1:t0NlbaXzuGH7I+7M4paE848fNWInZ7mfxI/Er1fTth8= github.com/jackc/chunkreader v1.0.0 h1:4s39bBR8ByfqH+DKm8rQA3E1LHZWB9XWcrz8fqaZbe0= github.com/jackc/pgproto3 v1.1.0 h1:FYYE4yRw+AgI8wXIinMlNjBbp/UitDJwfj5LqqewP1A= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=