mirror of
https://github.com/writeas/go-writeas.git
synced 2025-07-27 21:18:19 +00:00
Support creating a collection
This commit is contained in:
parent
f47bf30fe3
commit
8725cd2012
@ -5,9 +5,10 @@ import (
|
||||
"net/http"
|
||||
)
|
||||
|
||||
type (
|
||||
// Collection represents a collection of posts. Blogs are a type of collection
|
||||
// on Write.as.
|
||||
type Collection struct {
|
||||
Collection struct {
|
||||
Alias string `json:"alias"`
|
||||
Title string `json:"title"`
|
||||
Description string `json:"description"`
|
||||
@ -20,6 +21,13 @@ type Collection struct {
|
||||
TotalPosts int `json:"total_posts"`
|
||||
}
|
||||
|
||||
// CollectionParams holds values for creating a collection.
|
||||
CollectionParams struct {
|
||||
Alias string `json:"alias"`
|
||||
Title string `json:"title"`
|
||||
}
|
||||
)
|
||||
|
||||
// GetCollection retrieves a collection, returning the Collection and any error
|
||||
// (in user-friendly form) that occurs. See
|
||||
// https://writeas.github.io/docs/#retrieve-a-collection
|
||||
@ -45,3 +53,35 @@ func (c *Client) GetCollection(alias string) (*Collection, error) {
|
||||
}
|
||||
return coll, nil
|
||||
}
|
||||
|
||||
// CreateCollection creates a new collection, returning a user-friendly error
|
||||
// if one comes up. Requires a Write.as subscription. See
|
||||
// https://writeas.github.io/docs/#create-a-collection
|
||||
func (c *Client) CreateCollection(sp *CollectionParams) (*Collection, error) {
|
||||
p := &Collection{}
|
||||
env, err := c.post("/collections", sp, p)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var ok bool
|
||||
if p, ok = env.Data.(*Collection); !ok {
|
||||
return nil, fmt.Errorf("Wrong data returned from API.")
|
||||
}
|
||||
|
||||
status := env.Code
|
||||
if status == http.StatusCreated {
|
||||
return p, nil
|
||||
} else if status == http.StatusBadRequest {
|
||||
return nil, fmt.Errorf("Bad request: %s", env.ErrorMessage)
|
||||
} else if status == http.StatusForbidden {
|
||||
return nil, fmt.Errorf("Casual or Pro user required.")
|
||||
} else if status == http.StatusConflict {
|
||||
return nil, fmt.Errorf("Collection name is already taken.")
|
||||
} else if status == http.StatusPreconditionFailed {
|
||||
return nil, fmt.Errorf("Reached max collection quota.")
|
||||
} else {
|
||||
return nil, fmt.Errorf("Problem getting post: %s. %v\n", status, err)
|
||||
}
|
||||
return p, nil
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user