102 lines
3.4 KiB
Markdown
102 lines
3.4 KiB
Markdown
|
# tapas-auction-house
|
||
|
|
||
|
The Auction House is the part of your TAPAS application that is largely responsible for the interactions
|
||
|
with the TAPAS applications developed by the other groups. More precisely, it is responsible for
|
||
|
launching and managing auctions and it is implemented following the Hexagonal Architecture (based on
|
||
|
examples from book "Get Your Hands Dirty on Clean Architecture" by Tom Hombergs).
|
||
|
|
||
|
Technologies: Spring Boot, Maven
|
||
|
|
||
|
**Note:** this repository contains an [EditorConfig](https://editorconfig.org/) file (`.editorconfig`)
|
||
|
with default editor settings. EditorConfig is supported out-of-the-box by the IntelliJ IDE. To help maintain
|
||
|
consistent code styles, we recommend to reuse this editor configuration file in all your services.
|
||
|
|
||
|
## Project Overview
|
||
|
|
||
|
This project provides a partial implementation of the Auction House. The code is documented in detail,
|
||
|
here we only include a summary of implemented features:
|
||
|
* running and managing auctions:
|
||
|
* each auction has a deadline by which it is open for bids
|
||
|
* once the deadline has passed, the auction house closes the auction and selects a random bid
|
||
|
* starting an auction using a command via an HTTP adapter (see sample request below)
|
||
|
* retrieving the list of open auctions via an HTTP adapter, i.e. auctions accepting bids (see sample
|
||
|
request below)
|
||
|
* receiving events when executors are added to the TAPAS application (both via HTTP and MQTT adapters)
|
||
|
* the logic for automatic placement of bids in auctions: the auction house will place a bid in every
|
||
|
auction for which there is at least one executor that can handle the type of task
|
||
|
being auctioned
|
||
|
* discovery of auction houses via a provided resource directory (see assignment sheet for
|
||
|
Exercises 5 & 6 for more details)
|
||
|
|
||
|
## Overview of Adapters
|
||
|
|
||
|
In addition to the overall skeleton of the auction house, the current partial implementation provides
|
||
|
several adapters to help you get started.
|
||
|
|
||
|
### HTTP Adapters
|
||
|
|
||
|
Sample HTTP request for launching an auction:
|
||
|
|
||
|
```shell
|
||
|
curl -i --location --request POST 'http://localhost:8083/auctions/' \
|
||
|
--header 'Content-Type: application/json' \
|
||
|
--data-raw '{
|
||
|
"taskUri" : "http://example.org",
|
||
|
"taskType" : "taskType1",
|
||
|
"deadline" : 10000
|
||
|
}'
|
||
|
|
||
|
HTTP/1.1 201
|
||
|
Content-Type: application/json
|
||
|
Content-Length: 131
|
||
|
Date: Sun, 17 Oct 2021 22:34:13 GMT
|
||
|
|
||
|
{
|
||
|
"auctionId":"1",
|
||
|
"auctionHouseUri":"http://localhost:8083/",
|
||
|
"taskUri":"http://example.org",
|
||
|
"taskType":"taskType1",
|
||
|
"deadline":10000
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Sample HTTP request for retrieving auctions currently open for bids:
|
||
|
|
||
|
```shell
|
||
|
curl -i --location --request GET 'http://localhost:8083/auctions/'
|
||
|
|
||
|
HTTP/1.1 200
|
||
|
Content-Type: application/json
|
||
|
Content-Length: 133
|
||
|
Date: Sun, 17 Oct 2021 22:34:20 GMT
|
||
|
|
||
|
[
|
||
|
{
|
||
|
"auctionId":"1",
|
||
|
"auctionHouseUri":"http://localhost:8083/",
|
||
|
"taskUri":"http://example.org",
|
||
|
"taskType":"taskType1",
|
||
|
"deadline":10000
|
||
|
}
|
||
|
]
|
||
|
```
|
||
|
|
||
|
Sending an [ExecutorAddedEvent](src/main/java/ch/unisg/tapas/auctionhouse/application/port/in/ExecutorAddedEvent.java)
|
||
|
via an HTTP request:
|
||
|
|
||
|
```shell
|
||
|
curl -i --location --request POST 'http://localhost:8083/executors/taskType1/executor1'
|
||
|
|
||
|
HTTP/1.1 204
|
||
|
Date: Sun, 17 Oct 2021 22:38:45 GMT
|
||
|
```
|
||
|
|
||
|
### MQTT Adapters
|
||
|
|
||
|
Sending an [ExecutorAddedEvent](src/main/java/ch/unisg/tapas/auctionhouse/application/port/in/ExecutorAddedEvent.java)
|
||
|
via an MQTT message via HiveMQ's [MQTT CLI](https://hivemq.github.io/mqtt-cli/):
|
||
|
|
||
|
```shell
|
||
|
mqtt pub -t ch/unisg/tapas-group1/executors -m '{ "taskType" : "taskType1", "executorId" : "executor1" }'
|
||
|
```
|