From 6fed0edf4dbfe3082399f98b5daa4717254bbed7 Mon Sep 17 00:00:00 2001 From: Dan Anglin Date: Mon, 26 Feb 2024 23:44:27 +0000 Subject: [PATCH] the client can get and update a single list --- cmd/enbas/show.go | 2 +- internal/client/lists.go | 52 ++++++++++++++++++++++++++++++++++++++-- 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/cmd/enbas/show.go b/cmd/enbas/show.go index a0600e4..b2ad365 100644 --- a/cmd/enbas/show.go +++ b/cmd/enbas/show.go @@ -164,7 +164,7 @@ func (c *showCommand) showTimeline(gts *client.Client) error { } func (c *showCommand) showLists(gts *client.Client) error { - lists, err := gts.GetLists() + lists, err := gts.GetAllLists() if err != nil { return fmt.Errorf("unable to retrieve the lists; %w", err) } diff --git a/internal/client/lists.go b/internal/client/lists.go index b567b1b..86f6896 100644 --- a/internal/client/lists.go +++ b/internal/client/lists.go @@ -9,8 +9,12 @@ import ( "codeflow.dananglin.me.uk/apollo/enbas/internal/model" ) -func (g *Client) GetLists() ([]model.List, error) { - url := g.Authentication.Instance + "/api/v1/lists" +const ( + listPath string = "/api/v1/lists" +) + +func (g *Client) GetAllLists() ([]model.List, error) { + url := g.Authentication.Instance + listPath var lists []model.List @@ -24,6 +28,21 @@ func (g *Client) GetLists() ([]model.List, error) { return lists, nil } +func (g *Client) GetList(listID string) (model.List, error) { + url := g.Authentication.Instance + listPath + "/" + listID + + var list model.List + + if err := g.sendRequest(http.MethodGet, url, nil, &list); err != nil { + return model.List{}, fmt.Errorf( + "received an error after sending the request to get the list; %w", + err, + ) + } + + return list, nil +} + func (g *Client) CreateList(title string, repliesPolicy model.ListRepliesPolicy) (model.List, error) { params := struct { Title string `json:"title"` @@ -53,6 +72,35 @@ func (g *Client) CreateList(title string, repliesPolicy model.ListRepliesPolicy) return list, nil } +func (g *Client) UpdateList(listToUpdate model.List) (model.List, error) { + params := struct { + Title string `json:"title"` + RepliesPolicy model.ListRepliesPolicy `json:"replies_policy"` + }{ + Title: listToUpdate.Title, + RepliesPolicy: listToUpdate.RepliesPolicy, + } + + data, err := json.Marshal(params) + if err != nil { + return model.List{}, fmt.Errorf("unable to marshal the request body; %w", err) + } + + requestBody := bytes.NewBuffer(data) + url := g.Authentication.Instance + listPath + "/" + listToUpdate.ID + + var updatedList model.List + + if err := g.sendRequest(http.MethodPut, url, requestBody, &updatedList); err != nil { + return model.List{}, fmt.Errorf( + "received an error after sending the request to update the list; %w", + err, + ) + } + + return updatedList, nil +} + func (g *Client) DeleteList(listID string) error { url := g.Authentication.Instance + "/api/v1/lists/" + listID