# Suspension Model

## Request

- When requesting `suspension.getUserSuspensions()` a Suspension model is returned.

**Response**: Returns an [Suspension instance](../../src/models/suspension.ts).

## Table of Contents

* [Initiate Suspension Class](#Initiate-Suspension-Class)
* [Prototypes](#Prototypes)
* [Membership documentation](#membership-documentation)
* [Membership response types](#membership-response-types)

### Initiate Suspension Class

```javascript
 const suspensionInstance = new Suspension(suspensionData);
```

| Parameters  | Required | Type   | Description                              | Example |
| ----------  | -------- | ------ | ---------------------------------------- | --------|
| suspensionData | Yes   | Object | A single item from the membership suspension data response | see [Membership Suspension Response](#membership-documentation) |

### Prototypes

* [isActive](#isActive)
* [isFuture](#isFuture)
* [hasPast](#hasPast)
* [canEndActiveSuspension](#canEndActiveSuspension)
* [canDeleteFutureSuspension](#canDeleteFutureSuspension)
* [canEndFutureSuspension](#canEndFutureSuspension)

#### isActive

```javascript
const activeSuspension = suspensionInstance.isActive();
```

- Returns true if today's date falls within the user's suspension period.

```
	Parameters: none
	Response: boolean
```

#### isFuture

```javascript
const futureSuspension = suspensionInstance.isFuture();
```

- Returns true if today's date is before the suspension start date

```
	Parameters: none
	Response: boolean
```

#### hasPast

```javascript
const futureSuspension = suspensionInstance.hasPast();
```

- Returns true if today's date is after the suspension end date

```
	Parameters: none
	Response: boolean
```

#### canEndActiveSuspension

- An active suspension can be ended but this request needs to be made at least 2 working days before the suspension date has ended.

```javascript
const futureSuspension = suspensionInstance.canEndActiveSuspension(firstSuspensionDate);
```

| Parameters  | Required | Type   | Description                              | Example |
| ----------  | -------- | ------ | ---------------------------------------- | --------|
| firstSuspensionDate | Yes   | String | The first possible suspension date. This is used because its provides us with more accurate results as it takes into account non-working days. | see [suspension.firstSuspensionDate](../services/SUSPENSION.md#firstSuspensionDate) |

- returns true if:
	-	suspension is active and
	-	today's date is at least 2 working days before the suspension endDate.

```
	Parameters: none
	Response: boolean
```

#### canDeleteFutureSuspension

- A future suspension can be deleted as long as the request is made at least 2 working days before the suspension date has started.

```javascript
const futureSuspension = suspensionInstance.canEndActiveSuspension(firstSuspensionDate);
```

- Returns true if:
	- there is a future suspension and
	- today's date is at least 2 working days before the suspension startDate.

```
	Parameters: none
	Response: boolean
```

### canEndFutureSuspension

- A future suspension that can't be deleted (because it starts too soon) can - in many cases - be ended.

```javascript
const futureSuspension = suspensionInstance.canEndFutureSuspension(firstSuspensionDate);
```

- Returns true if:
	- is a suspension that is not yet Active
	- today's date is within 2 working days before the suspension startDate.

```
	Parameters: none
	Response: boolean
```


### Membership documentation

| Documentation     | Description | Owner |
| -------------- | -------- | -------- |
| [FT Newspaper Suspension Service](https://newspaper-suspensions-svc-lb-eu-west-1-prod.memb.ft.com/__api) | Documentation for the Suspension API | FT Core - Membership |

### Membership response types

Membership returns an array of items.

For a single suspension item response from membership see [MembershipSuspensionResponse types](../../types/suspension.ts). The
