Skip to content

Commit

Permalink
Merge branch 'master' into patch-1
Browse files Browse the repository at this point in the history
  • Loading branch information
unicodeveloper authored Feb 16, 2024
2 parents f175c44 + ca61ddf commit 1540351
Show file tree
Hide file tree
Showing 13 changed files with 1,227 additions and 23 deletions.
55 changes: 33 additions & 22 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
Novu's API exposes the entire Novu features via a standardized programmatic interface. Please refer to the full [documentation](https://docs.novu.co/docs/overview/introduction) to learn more.

## Installation & Usage

Install the package to your GoLang project.

```golang
go get github.com/novuhq/go-novu
```
Expand Down Expand Up @@ -61,51 +63,60 @@ func main() {
fmt.Println(integrations)
}
```

**NOTE**
Check the `cmd` directory to see a sample implementation and test files to see sample tests

## Documentation for API Endpoints

Class | Method | HTTP request | Description
------------ |----------------------------------------------------------------------------------|-----------------------------------------| -------------
*EventApi* | [**Trigger**](https://docs.novu.co/api-reference/events/trigger-event) | **Post** /events/trigger | Trigger
*EventApi* | [**TriggerBulk**](https://docs.novu.co/api-reference/events/bulk-trigger-event) | **Post** /v1/events/trigger/bulk | Bulk trigger event
*EventApi* | [**BroadcastToAll**](https://docs.novu.co/api-reference/events/broadcast-event-to-all) | **Post** /v1/events/trigger/broadcast | Broadcast event to all
*EventApi* | [**CancelTrigger**](https://docs.novu.co/api-reference/events/cancel-triggered-event)) | **Delete** /v1/events/trigger/:transactionId | Cancel triggered event
*SubscriberApi* | [**Get**](https://docs.novu.co/api-reference/subscribers/get-subscriber)) | **Get** /subscribers/:subscriberId | Get a subscriber
*SubscriberApi* | [**Identify**](https://docs.novu.co/api-reference/subscribers/create-subscriber) | **Post** /subscribers | Create a subscriber
*SubscriberApi* | [**Update**](https://docs.novu.co/api-reference/subscribers/update-subscriber) | **Put** /subscribers/:subscriberID | Update subscriber data
*SubscriberApi* | [**Delete**](https://docs.novu.co/api-reference/subscribers/delete-subscriber) | **Delete** /subscribers/:subscriberID | Removing a subscriber
*SubscriberApi* | [**Get**](https://docs.novu.co/api-reference/subscribers/get-in-app-notification-feed-for-a-particular-subscriber) | **Get** /subscribers/:subscriberId/notifications/feed | Get a notification feed for a particular subscriber
*SubscriberApi* | [**Get**](https://docs.novu.co/api-reference/subscribers/get-the-unseen-in-app-notifications-count-for-subscribers-feed) | **Get** /subscribers/:subscriberId/notifications/feed | Get the unseen notification count for subscribers feed
*SubscriberApi* | [**Post**](https://docs.novu.co/api-reference/subscribers/mark-a-subscriber-feed-message-as-seen) | **Post** /v1/subscribers/:subscriberId/messages/markAs | Mark a subscriber feed message as seen
*SubscriberApi* | [**Get**](https://docs.novu.co/api-reference/subscribers/get-subscriber-preferences) | **Get** /subscribers/:subscriberId/preferences | Get subscriber preferences
*SubscriberApi* | [**Patch**](https://docs.novu.co/api-reference/subscribers/update-subscriber-preference) | **Patch** /subscribers/:subscriberId/preferences/:templateId | Update subscriber preference
*IntegrationsApi* | [**Create**](https://docs.novu.co/api-reference/integrations/create-integration) | **Post** /integrations | Create an integration
*IntegrationsApi* | [**Update**](https://docs.novu.co/api-reference/integrations/update-integration) | **Put** /integrations/:integrationId | Update an integration
*IntegrationsApi* | [**Delete**](https://docs.novu.co/api-reference/integrations/delete-integration) | **Delete** /integrations/:integrationId | Delete an integration
*IntegrationsApi* | [**Get**](https://docs.novu.co/api-reference/integrations/get-integrations) | **Get** /integrations | Get all integrations
*IntegrationsApi* | [**GetActive**](https://docs.novu.co/api-reference/integrations/get-active-integrations) | **Get** /integrations/active | Get all active integrations
*InboundParserApi* | [**Get**](https://docs.novu.co/api-reference/inbound-parse/validate-the-mx-record-setup-for-the-inbound-parse-functionality) | **Get** /inbound-parse/mx/status | Validate the mx record setup for the inbound parse functionality
*EventApi* | [**Trigger**](https://docs.novu.co/platform/subscribers#removing-a-subscriber) | **Post** /events/trigger | Trigger
*EventApi* | [**TriggerBulk**](https://docs.novu.co/api/trigger-event/) | **Post** /v1/events/trigger/bulk | Bulk trigger event
*EventApi* | [**BroadcastToAll**](https://docs.novu.co/api/broadcast-event-to-all/) | **Post** /v1/events/trigger/broadcast | Broadcast event to all
*EventApi* | [**CancelTrigger**](https://docs.novu.co/api/cancel-triggered-event/) | **Delete** /v1/events/trigger/:transactionId | Cancel triggered event
*SubscriberApi* | [**Get**](https://docs.novu.co/api/get-subscriber/) | **Get** /subscribers/:subscriberId | Get a subscriber
*SubscriberApi* | [**Identify**](https://docs.novu.co/platform/subscribers#creating-a-subscriber) | **Post** /subscribers | Create a subscriber
*SubscriberApi* | [**Update**](https://docs.novu.co/platform/subscribers#updating-subscriber-data) | **Put** /subscribers/:subscriberID | Update subscriber data
*SubscriberApi* | [**Delete**](https://docs.novu.co/platform/subscribers#removing-a-subscriber) | **Delete** /subscribers/:subscriberID | Removing a subscriber
*SubscriberApi* | [**Get**](https://docs.novu.co/api/get-a-notification-feed-for-a-particular-subscriber) | **Get** /subscribers/:subscriberId/notifications/feed | Get a notification feed for a particular subscriber
*SubscriberApi* | [**Get**](https://docs.novu.co/api/get-the-unseen-notification-count-for-subscribers-feed) | **Get** /subscribers/:subscriberId/notifications/feed | Get the unseen notification count for subscribers feed
*SubscriberApi* | [**Post**](https://docs.novu.co/api/mark-a-subscriber-feed-message-as-seen) | **Post** /v1/subscribers/:subscriberId/messages/markAs | Mark a subscriber feed message as seen
*SubscriberApi* | [**Get**](https://docs.novu.co/api/get-subscriber-preferences/) | **Get** /subscribers/:subscriberId/preferences | Get subscriber preferences
*SubscriberApi* | [**Patch**](https://docs.novu.co/api/update-subscriber-preference/) | **Patch** /subscribers/:subscriberId/preferences/:templateId | Update subscriber preference
*TopicsApi* | [**Get**](https://docs.novu.co/api/filter-topics/) | **Get** /topics | Get a list of topics
*TopicsApi* | [**Get**](https://docs.novu.co/api/get-topic/) | **Get** /topics/:topicKey | Get a topic by its topic key
*TopicsApi* | [**Post**](https://docs.novu.co/api/topic-creation/) | **Post** /topics | Create a topic
*TopicsApi* | [**Patch**](https://docs.novu.co/api/rename-a-topic/) | **Patch** /topics/:topicKey | Rename a topic
*TopicsApi* | [**Delete**](https://docs.novu.co/api/delete-topic/) | **Delete** /topics/:topicKey | Delete a topic
*TopicsApi* | [**Post**](https://docs.novu.co/api/subscribers-addition/) | **Post** /topics/:topicKey/subscribers | Add subscribers to a topic by key
*TopicsApi* | [**Post**](https://docs.novu.co/api/subscribers-removal/) | **Post** /topics/:topicKey/subscribers/removal |Remove subscribers from a topic
*IntegrationsApi* | [**Create**](https://docs.novu.co/platform/integrations) | **Post** /integrations | Create an integration
*IntegrationsApi* | [**Update**](https://docs.novu.co/platform/integrations) | **Put** /integrations/:integrationId | Update an integration
*IntegrationsApi* | [**Delete**](https://docs.novu.co/platform/integrations) | **Delete** /integrations/:integrationId | Delete an integration
*IntegrationsApi* | [**Get**](https://docs.novu.co/platform/integrations) | **Get** /integrations | Get all integrations
*IntegrationsApi* | [**GetActive**](https://docs.novu.co/platform/integrations) | **Get** /integrations/active | Get all active integrations
_InboundParserApi_ | [**Get**](https://docs.novu.co/platform/inbound-parse-webhook/) | **Get** /inbound-parse/mx/status | Validate the mx record setup for the inbound parse functionality

## Authorization (api-key)
## Authorization (api-key)

- **Type**: API key
- **API key parameter name**: ApiKey
- **Location**: HTTP header

### For more information about these methods and their parameters, see the [API documentation](https://docs.novu.co/api-reference/overview).

## Support and Feedback

Be sure to visit the Novu official [documentation website](https://docs.novu.co/docs) for additional information about our API.

If you find a bug, please post the issue on [Github](https://github.com/novuhq/go-novu/issues).

As always, if you need additional assistance, join our Discord us a note [here](https://discord.gg/TT6TttXjRe).
As always, if you need additional assistance, join our Discord us a note [here](https://discord.gg/novu).

## Contributors

Name |
Name |
------------ |
[Oyewole Samuel](https://github.com/samsoft00) |
[Dima Grossman](https://github.com/scopsy) |
104 changes: 104 additions & 0 deletions lib/changes.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
package lib

import (
"bytes"
"context"
"encoding/json"
"net/http"
"net/url"
"strconv"
)

type ChangesService service

func (c *ChangesService) GetChangesCount(ctx context.Context) (ChangesCountResponse, error) {
var resp ChangesCountResponse
URL := c.client.config.BackendURL.JoinPath("changes", "count")

req, err := http.NewRequestWithContext(ctx, http.MethodGet, URL.String(), http.NoBody)
if err != nil {
return resp, err
}

_, err = c.client.sendRequest(req, &resp)
if err != nil {
return resp, err
}

return resp, nil
}

func (c *ChangesService) GetChanges(ctx context.Context, q ChangesGetQuery) (ChangesGetResponse, error) {
var resp ChangesGetResponse
URL := c.client.config.BackendURL.JoinPath("changes")
URL.RawQuery = q.BuildQuery()

req, err := http.NewRequestWithContext(ctx, http.MethodGet, URL.String(), http.NoBody)
if err != nil {
return resp, err
}

_, err = c.client.sendRequest(req, &resp)
if err != nil {
return resp, err
}

return resp, nil
}

func (c *ChangesService) ApplyChange(ctx context.Context, changeId string) (ChangesApplyResponse, error) {
var resp ChangesApplyResponse
URL := c.client.config.BackendURL.JoinPath("changes", changeId, "apply")

req, err := http.NewRequestWithContext(ctx, http.MethodPost, URL.String(), http.NoBody)
if err != nil {
return resp, err
}

_, err = c.client.sendRequest(req, &resp)
if err != nil {
return resp, err
}

return resp, nil
}

func (c *ChangesService) ApplyBulkChanges(ctx context.Context, payload ChangesBulkApplyPayload) (ChangesApplyResponse, error) {
var resp ChangesApplyResponse
URL := c.client.config.BackendURL.JoinPath("changes", "bulk", "apply")
jsonBody, err := json.Marshal(payload)
if err != nil {
return resp, err
}
req, err := http.NewRequestWithContext(ctx, http.MethodPost, URL.String(), bytes.NewBuffer(jsonBody))
if err != nil {
return resp, err
}

_, err = c.client.sendRequest(req, &resp)
if err != nil {
return resp, err
}

return resp, nil
}

func (c *ChangesGetQuery) BuildQuery() string {
params := url.Values{}

if c.Page == 0 {
c.Page = 1
}

if c.Limit == 0 {
c.Limit = 10
}

if c.Promoted == "" {
c.Promoted = "false"
}
params.Add("page", strconv.Itoa(c.Page))
params.Add("limit", strconv.Itoa(c.Limit))
params.Add("promoted", c.Promoted)
return params.Encode()
}
Loading

0 comments on commit 1540351

Please sign in to comment.