# Delivery Address Service

If you only require specific functionality from the delivery address service, you can import the `DeliveryAddressService` module separately to the main SDK.

For example:

```javascript
const { DeliveryAddressService } = require('n-membership-sdk');
const DeliveryAddressService = new DeliveryAddressService(config);
```

## Table of Contents

* [Config](#config)
	* [How to obtain a key](#how-to-obtain-a-key)
* [Methods](#methods)
	* [getDeliveryAddresses](#getDeliveryAddresses)
	* [getDeliveryAddressesById](#getDeliveryAddressById)
	* [createDeliveryAddresses](#createDeliveryAddresses)
	* [updateDeliveryAddresses](#updateDeliveryAddresses)
	* [updateFutureDeliveryAddresses](#updateFutureDeliveryAddresses)
	* [deleteDeliveryAddress](#deleteDeliveryAddress)
* [Membership Documentation](#membership-documentation)
* [Membership Responses](#membership-responses)

## Config

* See common configuration options in the [README file](./README.doc)
* `deliveryAddressApiKey`

```javascript
const config = new ProductionConfiguration({
	deliveryAddressApiKey: 'secret',
});
```

### How to obtain a key

Do one of the following:

1. Check in Doppler for your app to see if the API key you need already exists.
2. Contact #membership-support slack channel for a key for the service i.e. delivery-address-svc.

## Methods

### getDeliveryAddresses

```javascript
const deliveryAddresses = DeliveryAddressService.getDeliveryAddresses(subscriptionNumber);
```

| Parameters  | Required | Type   | Example | Description   |
| ----------- | -------- | -------| --------| ------------- |
| subscriptionNumber | yes | String | A-XXXXXXXXXXX | User's subscription number. |

**Response** items array seen in [Membership Responses](#Response-when-a-delivery-address-is-returned)

### getDeliveryAddressById

```javascript
const deliveryAddress = DeliveryAddressService.getDeliveryAddressById(addressId);
```

| Parameters  | Required | Type   | Example | Description   |
| ----------- | -------- | -------| --------| ------------- |
| addressId   | yes      | String | A-XXXXXXXXXXX | ID of a user's delivery address. See [getDeliveryAddresses](#getDeliveryAddresses) |

**Response** single object in the items array. See [Membership Responses](#Response-when-a-delivery-address-is-returned)

### createDeliveryAddresses

```javascript
const { addressId } = await DeliveryAddressService.createDeliveryAddress(deliveryAddress);
```

| Parameters  | Required | Type   | Example | Description   |
| ----------- | -------- | -------| --------| ------------- |
| deliveryAddress   | yes      | Object | [DeliveryAddress](../../src/models/delivery-address.ts) | User's delivery address. |

**Response** single object with addressId. See [Membership Responses](#Response-when-a-delivery-address-is-created)

### updateDeliveryAddress

```javascript
const { deliveryAddress } = await DeliveryAddressService.updateDeliveryAddress(addressId, deliveryAddressNotes);
```

| Parameters  | Required | Type   | Example | Description   |
| ----------- | -------- | -------| --------| ------------- |
| addressId   | yes      | String | A-XXXXXXXXXXX | ID of a user's delivery address. See [getDeliveryAddresses](#getDeliveryAddresses) |
| deliveryAddressNotes   | yes      | Object | [DeliveryAddressNotes](../../src/types/delivery-address.ts) | User's delivery address notes. |

**Response** single object with the updated delivery address. See [Membership Responses](#Response-when-a-single-delivery-address-is-returned)

### updateFutureDeliveryAddresses

```javascript
const { addressId } = await DeliveryAddressService.updateFutureDeliveryAddress(addressId, deliveryAddress);
```

| Parameters  | Required | Type   | Example | Description   |
| ----------- | -------- | -------| --------| ------------- |
| addressId   | yes      | String | A-XXXXXXXXXXX | ID of a user's delivery address. See [getDeliveryAddresses](#getDeliveryAddresses) |
| deliveryAddress   | yes      | Object | [DeliveryAddress](../../src/models/delivery-address.ts) | User's delivery address. |

**Response** single object with addressId. See [Membership Responses](#Response-when-a-delivery-address-is-created)

### deleteDeliveryAddress

```javascript
await DeliveryAddressService.deleteDeliveryAddress(addressId);
```

| Parameters  | Required | Type   | Example | Description   |
| ----------- | -------- | -------| --------| ------------- |
| addressId   | yes      | String | A-XXXXXXXXXXX | ID of a user's delivery address. See [getDeliveryAddresses](#getDeliveryAddresses) ||

**Response** None

## Membership Responses

### Response when a delivery address is returned

This can be either a single delivery address object as per the example in  [DeliveryAddress](docs/mdoels/DELIVERY-ADDRESS.md) or an array of deliver addresses with key 'items' as below:

```Json
{
	"items": [
		{
			//... delivery address as per the Delilvery Address model.
		}
	]
}
```

### Response when a delivery address is created

```Json
{
	"addressId": "Xxxxxxxxx-xxxxx-xxxx-xxxxx-xxxxxxxxxxxxx"
}
```

## Membership Documentation

| API Documentation | Confluence  | Description | Owner |
| -------------- | -------- | -------- | -------- |
| [Delivery Address API](https://newspaper-delivery-address-svc-lb-eu-west-1-prod.memb.ft.com/__api) |  [Delivery Address Documentation](https://confluence.ft.com/display/MEMB/Newspaper+Delivery+Address+Service) | Documentation for the delivery address service | FT Core - Membership |
