# Getting Started

## Install Prerequisites

{% hint style="warning" %}
Start your installations before the presentation begins so that the dependencies are able to download before we start the workshop.
{% endhint %}

Install docker :

* Mac: `https://docs.docker.com/docker-for-mac/install/`&#x20;
* Window: `https://docs.docker.com/docker-for-windows/install/`&#x20;
* Linux: `https://docs.docker.com/install/linux/docker-ce/ubuntu/`

Pull docker images:

```
$ docker pull springcloud/spring-cloud-contract:2.1.1.RELEASE
$ docker pull springcloud/spring-cloud-contract-stub-runner:2.1.1.RELEASE
```

Install Node: `https://nodejs.org/en/`

Clone Repos:

```
$ git clone https://github.com/angularkc/contract-driven-development.git
$ git clone https://github.com/wkorando/produce-contracts.git
```

## Client-Side Developers

From the root of `contract-driven-development` run the following:

```
$ npm install
```

## Server-Side Developers

From the root of `contract-driven-development` run the following:

```
$ cd produce-service
$ ./mvnw package
```

Currently the contract of `addProduce.yml` is always sending the same response, ignoring the contents of the request the client is sending. Spring Cloud Contract can allow contracts to be more dynamic, for example allow fields within the response to pull from the request. Let's update `addProduce.yml` to do this. &#x20;

Update POST contract to respond with request body

Every service is going to be composed of many different contracts. Defining how an API should respond to a given request. It's important that we not only define what happens for successful responses, but unsuccessful ones as well. Currently we have a contract `findProduceByName.yml` that defines what happens when a client successful searches for a subset of produce. Let's write a contract for when a client sends an invalid search request that has special characters in it.&#x20;


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://angularkc-ccd.gitbook.io/workspace/master.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
