Skip to content

Commit

Permalink
feat: Implement Admin/Moderators (#87)
Browse files Browse the repository at this point in the history
Closes #64
  • Loading branch information
yitsushi committed Mar 21, 2022
1 parent e8e1d69 commit 993da10
Show file tree
Hide file tree
Showing 7 changed files with 189 additions and 0 deletions.
34 changes: 34 additions & 0 deletions services/admin/moderators/add.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package moderators

import (
"github.com/yitsushi/go-misskey/core"
)

// AddRequest represents an Add moderator request.
type AddRequest struct {
UserID string `json:"userId"`
}

// Validate the request.
func (r AddRequest) Validate() error {
if r.UserID == "" {
return core.RequestValidationError{
Request: r,
Message: core.UndefinedRequiredField,
Field: "UserID",
}
}

return nil
}

// Add a moderator.
func (s *Service) Add(userID string) error {
request := AddRequest{UserID: userID}
err := s.Call(
&core.JSONRequest{Request: &request, Path: "/admin/moderators/add"},
&core.EmptyResponse{},
)

return err
}
50 changes: 50 additions & 0 deletions services/admin/moderators/add_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package moderators_test

import (
"log"
"net/http"
"os"
"testing"

"github.com/stretchr/testify/assert"
"github.com/yitsushi/go-misskey"
"github.com/yitsushi/go-misskey/core"
"github.com/yitsushi/go-misskey/services/admin/moderators"
"github.com/yitsushi/go-misskey/test"
)

func TestService_Add(t *testing.T) {
client := test.MakeMockClient(test.SimpleMockOptions{
Endpoint: "/api/admin/moderators/add",
RequestData: &moderators.AddRequest{},
ResponseFile: "empty",
StatusCode: http.StatusNoContent,
})

err := client.Admin().Moderators().Add("88v9vu5nbu")

assert.NoError(t, err)
}

func TestAddRequest_Validate(t *testing.T) {
test.ValidateRequests(
t,
[]core.BaseRequest{
moderators.AddRequest{},
},
[]core.BaseRequest{
moderators.AddRequest{UserID: "asd"},
},
)
}

func ExampleService_Add() {
client := misskey.NewClient("https://slippy.xyz", os.Getenv("MISSKEY_TOKEN"))

err := client.Admin().Moderators().Add("88v9vu5nbu")
if err != nil {
log.Printf("[Admin/Moderators/Add] %s", err)

return
}
}
Empty file.
34 changes: 34 additions & 0 deletions services/admin/moderators/remove.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package moderators

import (
"github.com/yitsushi/go-misskey/core"
)

// RemoveRequest represents an Remove moderator request.
type RemoveRequest struct {
UserID string `json:"userId"`
}

// Validate the request.
func (r RemoveRequest) Validate() error {
if r.UserID == "" {
return core.RequestValidationError{
Request: r,
Message: core.UndefinedRequiredField,
Field: "UserID",
}
}

return nil
}

// Remove a moderator.
func (s *Service) Remove(userID string) error {
request := RemoveRequest{UserID: userID}
err := s.Call(
&core.JSONRequest{Request: &request, Path: "/admin/moderators/remove"},
&core.EmptyResponse{},
)

return err
}
50 changes: 50 additions & 0 deletions services/admin/moderators/remove_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package moderators_test

import (
"log"
"net/http"
"os"
"testing"

"github.com/stretchr/testify/assert"
"github.com/yitsushi/go-misskey"
"github.com/yitsushi/go-misskey/core"
"github.com/yitsushi/go-misskey/services/admin/moderators"
"github.com/yitsushi/go-misskey/test"
)

func TestService_Remove(t *testing.T) {
client := test.MakeMockClient(test.SimpleMockOptions{
Endpoint: "/api/admin/moderators/remove",
RequestData: &moderators.RemoveRequest{},
ResponseFile: "empty",
StatusCode: http.StatusNoContent,
})

err := client.Admin().Moderators().Remove("88v9vu5nbu")

assert.NoError(t, err)
}

func TestRemoveRequest_Validate(t *testing.T) {
test.ValidateRequests(
t,
[]core.BaseRequest{
moderators.RemoveRequest{},
},
[]core.BaseRequest{
moderators.RemoveRequest{UserID: "asd"},
},
)
}

func ExampleService_Remove() {
client := misskey.NewClient("https://slippy.xyz", os.Getenv("MISSKEY_TOKEN"))

err := client.Admin().Moderators().Remove("88v9vu5nbu")
if err != nil {
log.Printf("[Admin/Moderators/Remove] %s", err)

return
}
}
15 changes: 15 additions & 0 deletions services/admin/moderators/service.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package moderators

import (
"github.com/yitsushi/go-misskey/core"
)

// Service is the base for all the endpoints on this service.
type Service struct {
Call core.RequestHandlerFunc
}

// NewService creates a new Service instance.
func NewService(requestHandler core.RequestHandlerFunc) *Service {
return &Service{Call: requestHandler}
}
6 changes: 6 additions & 0 deletions services/admin/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"github.com/yitsushi/go-misskey/services/admin/federation"
"github.com/yitsushi/go-misskey/services/admin/logs"
"github.com/yitsushi/go-misskey/services/admin/moderation"
"github.com/yitsushi/go-misskey/services/admin/moderators"
"github.com/yitsushi/go-misskey/services/admin/queue"
"github.com/yitsushi/go-misskey/services/admin/users"
)
Expand Down Expand Up @@ -61,3 +62,8 @@ func (s *Service) Federation() *federation.Service {
func (s *Service) Drive() *drive.Service {
return drive.NewService(s.Call)
}

// Moderators contains all endpoints for moderators.
func (s *Service) Moderators() *moderators.Service {
return moderators.NewService(s.Call)
}

0 comments on commit 993da10

Please sign in to comment.