Get a list of dates for a given campsite based on a start date and end date.
URL : /api/v1/campsite/:campsiteId/availabilities?startDate&endDate
URL Parameters :
Param | Type | Required | Description |
---|---|---|---|
campsiteId |
number | true | ID of the Campsite that the user is interested. |
Query Parameters :
Param | Type | Required | Description |
---|---|---|---|
startDate |
date yyyy-MM-dd |
false | If not provided the default value will be today; |
endDate |
date yyyy-MM-dd |
false | If not provided the default value will be today plus one month; |
Method : GET
Success Response :
Code : 200 OK
Content examples
For a campsiteId = 1
and startDate = 2018-11-15
and endDate 2018-11-20
{
"results":[
"2018-11-15",
"2018-11-16",
"2018-11-17",
"2018-11-18",
"2018-11-19"
]
}
For a campsiteId = 1
and startDate = invalid
and endDate 2018-11-20
{
"errors":[
"Start date is not in a valid format yyyy-MM-dd."
],
"status":400
}
Create a new booking for a campsite
URL : /api/v1/campsite/:site_id/booking
URL Parameters :
Param | Type | Required | Description |
---|---|---|---|
campsiteId |
number | true | ID of the Campsite that the user is interested. |
Method : POST
Request Body :
{
"firstName": "Pedro",
"lastName": "Coelho Torres",
"email": "pedro@hire.me",
"startDate": "2018-11-15",
"endDate": "2018-11-17"
}
Success Response :
Condition : If everything all the conditions are met.
Code : 201 CREATED
Content example
{
"results":{
"bookingId": 2,
"bookingCode": "D7LP4W2018",
"camperName": "Pedro Coelho Torres",
"status": "CONFIRMED",
"startDate": "2018-11-19",
"endDate": "2018-11-20"
},
"status":201
}
Error Response :
Condition : If fields are missed or inconsistencies on the values.
Code : 400 BAD REQUEST
Content example
{
"errors":[
"First name is required."
],
"status":400
}
URL : http://localhost:9090/api/v1/campsite/booking/:bookingCode
URL Parameters :
Param | Type | Required | Description |
---|---|---|---|
bookingCode |
string | true | Alphanumeric booking code. |
Method : GET
Success Response :
Code : 200 OK
Content examples
For a bookingCode = D7LP4W2018
{
"results": {
"bookingId": 2,
"bookingCode": "D7LP4W2018",
"camperName": "Pedro Coelho Torres",
"status": "CONFIRMED",
"startDate": "2018-11-19",
"endDate":"2018-11-20"
},
"status":200
}
Error Response :
Code : 404 Not Found
For a bookingCode = 000000
{
"errors": [
"The booking 000000 was not found."
],
"status": 404
}
Method : PUT
Code : 200 OK
Content examples
For a bookingCode = D7LP4W2018
Request Body :
{
"firstName": "Pedro",
"lastName": "Coelho Torres",
"email": "pedro@hire.me",
"startDate": "2018-11-20",
"endDate": "2018-11-22"
}
Success Response :
{
"results": {
"bookingId": 2,
"bookingCode": "D7LP4W2018",
"camperName": "Pedro Coelho Torres",
"status": "CONFIRMED",
"startDate": "2018-11-20",
"endDate":"2018-11-22"
},
"status":200
}
Error Response :
Code : 404 Not Found
For a bookingCode = 000000
{
"errors": [
"The booking 000000 was not found."
],
"status": 404
}
URL : http://localhost:9090/api/v1/campsite/booking/:bookingCode/cancel
Method : PUT
Code : 200 OK
Content examples
For a bookingCode = D7LP4W2018
Success Response :
{
"status":200
}
Error Response :
Code : 404 Not Found
For a bookingCode = 000000
{
"errors": [
"The booking 000000 was not found."
],
"status": 404
}
mvn clean install spring-boot:run
A http server will be started at the http port 9090
.
TODO
- Not allow a modification of a booking that was already cancelled.
- Adds a comprehensive unit tests coverage, specially on the services.
- Adds integration tests for all endpoints.
- Improve bossiness validation rules. Currently, the validations are quite "messy", Bean Validation would be a better approach.
- Reduce dependencies on BookingService. The service is doing certain behaviours not directly related to its responsibility.
- Improve JSON serialization with jackson. Vertx does not accept certain types to be parsed within the proxy calls. Some time need to be spent in order figure that out.
- Adds swagger in order to better document all the endpoints.
- Deploy application on a could provider (heroku) so stress tests could be performed to guarantee the resilience of the solution.