npm package: @simpleview/sv-reviews-client
Description: Client for communicating with sv-reviews
Author: Colin Booen
Latest version: 1.0.0

# sv-reviews-client

Client for communication with the `sv-reviews` GraphQL system.

It is built in TypeScript and has one peer dependency of `@simpleview/sv-graphql-client`.

## OS Support

The expectation is that this application will be installed in Linux using [sv-kubernetes](https://github.com/simpleviewinc/sv-kubernetes/).

## Prerequisites

* [sv-graphql-client](https://github.com/simpleviewinc/sv-graphql-client/)

## Install

Using npm:
```bash
npm install @simpleview/sv-reviews-client
```

Using yarn:
```bash
yarn install @simpleview/sv-reviews-client
```

## Update

To update to the latest version, rerun the install command.

## Authentication Requirements

Interactions with `sv-reviews` require authentication as a Simpleview user.

Use a Google Service Account when interacting with the service on behalf of a product.

```js
const { AuthPrefix } = require("@simpleview/sv-auth-client");
const { GraphServer } = require("@simpleview/sv-graphql-client");

async function serviceAccountToken() {
	const service_account = JSON.parse(SERVICE_ACCOUNT_JSON);

	const { auth } = new GraphServer({
		graphUrl: AUTH_GRAPHQL_URL,
		prefixes: [AuthPrefix]
	});

	// authorise the service_account return the token
	const { token } = await auth.login_service_account({
		input: {
			email: service_account.client_email,
			private_key: service_account.private_key
		},
		fields: `
			success
			token
		`
	});

	return token;
}
```

The `token` should be added to the `context` for each function call.

## Implementation & Usage

To see the input parameters and output fields of an endpoint, view the Schema in the GraphQL Explorer at https://graphql.simpleviewinc.com/ for the corresponding GraphQL query.

## ReviewsPrefix

`ReviewsPrefix` can be loaded into the `sv-graphql-client` `GraphServer` to use as a client library for accessing `reviews` in GraphQL.

JavaScript:
```js
const { ReviewsPrefix } = require("@simpleview/sv-reviews-client");
const { GraphServer } = require("@simpleview/sv-graphql-client");

module.exports = new GraphServer({ graphUrl: GRAPHQL_URL, prefixes: [ReviewsPrefix] });
```

TypeScript:
```ts
import { ReviewsPrefix } from "@simpleview/sv-reviews-client";
import { GraphServer } from "@simpleview/sv-graphql-client";

export default new GraphServer({ graphUrl: GRAPHQL_URL, prefixes: [ReviewsPrefix] });
```

Where you are making server requests:

JavaScript:
```js
const { reviews } = require("./reviewsGraphServer");
```

TypeScript:
```ts
import { reviews } from "./reviewsGraphServer";
```

### ReviewsPrefix.location_ids

This method wraps the `reviews.location_ids` GraphQL query.

```js
const result = await reviews.location_ids({
	fields: "count docs { service_name location_id created updated }",
	filter: {
		service_name: "tripadvisor",
		updated: {
			gte: new Date("2024-01-01"),
			lte: new Date("2024-12-31")
		}
	},
	options: {
		limit: 100,
		skip: 0,
		sort: [
			{
				field: "updated",
				dir: "desc"
			}
		]
	},
	context: {
		token // from serviceAccountToken call
	}
});
```

### ReviewsPrefix.location_ids_upsert

This method wraps the `reviews.location_ids_upsert` GraphQL mutation.

```js
const result = await reviews.location_ids_upsert({
	fields: "success message",
	input: [
		{
			service_name: "tripadvisor",
			location_id: "ta-location-123456"
		},
		{
			service_name: "tripadvisor",
			location_id: "ta-attraction-789012"
		}
	],
	context: {
		token // from serviceAccountToken call
	}
});
```

## Related Documentation

* [sv-graphql-client](https://github.com/simpleviewinc/sv-graphql-client/)
* [sv-reviews](https://github.com/simpleviewinc/sv-reviews/)

## Troubleshooting

For any assistance please reach out on the [Microservices Support](https://teams.microsoft.com/l/channel/19%3A78cf02f015c543748f2488a4742290f1%40thread.tacv2/Microservices%20Support?groupId=42dd24e6-f6ae-4520-9092-cc21b3b3b730&tenantId=cc1eb3c2-fc0c-4a83-8e6a-8d886b4faeab) Teams channel.