This is a simple spring boot application that provides a web service endpoint that calculates rewards points for customers based on the amount of purchases over the last 3 months.
The API endpoint accepts POST requests to /customer/calculate with a list of purchases to be provided as the request body in JSON format (an example request with a list of purchases is included in the postman directory).
A functional implementation is included in the 'functional' branch. No external mutable container (ie. ArrayList) is used, instead Sets are used, HashSet is the implementation, and a custom Collector is defined to create the mutable container (HashSet) for the stream, an accumulator BiConsumer is defined to add CustomerRewardsResponse objects to the container, and a combiner BiConsumer is defined to merge two containers together. It is non-deterministic, allowing for parallel processing of the stream.
- Purchase amounts and rewards points won't exceed the size limit of an integer even when summed.
- The prior 3-month period is set to be January, February, and March. This is done to isolate the dates as a separate concern and simplify data used for testing.
- The data passed in is valid and well-formed.
- Clone
- Run mvn spring-boot:run
postman/Rewards Calculator.postman_collection.json
import this collection, there is only one request, and run it.