Browse Source

Support pinning posts

pull/10/head
Matt Baer 5 years ago
parent
commit
d3ace8c73b
2 changed files with 63 additions and 0 deletions
  1. +49
    -0
      post.go
  2. +14
    -0
      post_test.go

+ 49
- 0
post.go View File

@@ -55,6 +55,20 @@ type (
Collection string `json:"-"`
}

// PinnedPostParams holds values for pinning a post
PinnedPostParams struct {
ID string `json:"id"`
Position int `json:"position"`
}

// BatchPostResult contains the post-specific result as part of a larger
// batch operation.
BatchPostResult struct {
ID string `json:"id,omitempty"`
Code int `json:"code,omitempty"`
ErrorMessage string `json:"error_msg,omitempty"`
}

// ClaimPostResult contains the post-specific result for a request to
// associate a post to an account.
ClaimPostResult struct {
@@ -215,3 +229,38 @@ func (c *Client) GetUserPosts() (*[]Post, error) {
}
return p, nil
}

// PinPost pins a post in the given collection.
// See https://developers.write.as/docs/api/#pin-a-post-to-a-collection
func (c *Client) PinPost(alias string, pp *PinnedPostParams) error {
res := &[]BatchPostResult{}
env, err := c.post(fmt.Sprintf("/collections/%s/pin", alias), []*PinnedPostParams{pp}, res)
if err != nil {
return err
}

var ok bool
if res, ok = env.Data.(*[]BatchPostResult); !ok {
return fmt.Errorf("Wrong data returned from API.")
}

// Check for basic request errors on top level response
status := env.Code
if status != http.StatusOK {
if c.isNotLoggedIn(status) {
return fmt.Errorf("Not authenticated.")
}
return fmt.Errorf("Problem pinning post: %d. %v\n", status, err)
}

// Check the individual post result
if len(*res) == 0 || len(*res) > 1 {
return fmt.Errorf("Wrong data returned from API.")
}
if (*res)[0].Code != http.StatusOK {
return fmt.Errorf("Problem pinning post: %d", (*res)[0].Code)
// TODO: return ErrorMessage (right now it'll be empty)
// return fmt.Errorf("Problem pinning post: %v", res[0].ErrorMessage)
}
return nil
}

+ 14
- 0
post_test.go View File

@@ -73,6 +73,20 @@ func TestGetPost(t *testing.T) {
}
}

func TestPinPost(t *testing.T) {
dwac := NewDevClient()
_, err := dwac.LogIn("demo", "demo")
if err != nil {
t.Fatalf("Unable to log in: %v", err)
}
defer dwac.LogOut()

err = dwac.PinPost("tester", &PinnedPostParams{ID: "olx6uk7064heqltf"})
if err != nil {
t.Fatalf("Pin failed: %v", err)
}
}

func ExampleClient_CreatePost() {
c := NewClient()



Loading…
Cancel
Save