This challenge is to build an API for the http server to receive POST requests with information about a visitor and respond with a decision, either: rejection, or accept with a corresponding target url.
-
The decisions should be based on information about the visitor that comes in POST request body
{ "geoState": "ca", "publisher": "abc", "timestamp": "2018-07-19T23:28:59.513Z" } -
No
targetcan receive more traffic per day than it allows. Here's an exampletargetwith max 10 accepts per day{ "id": "1", "url": "http://example.com", "value": "0.50", "maxAcceptsPerDay": "10", "accept": { "geoState": { "$in": ["ca", "ny"] }, "hour": { "$in": [ "13", "14", "15" ] } } } -
All remaining
targetsshould be filtered by criteria they are willing to accept. The abovetargetexample only accepts visitors from either California or New York from 13 to 16 UTC. -
If no
targetsare left, the request is rejected (returns{"decision":"reject"}), otherwise it should return the url of the remainingtargetwith the highest value.
-
New endpoints that needs to be built:
- POST /api/targets
- post a target
- GET /api/targets
- get all targets
- GET /api/target/:id
- get a target by id
- POST /api/target/:id
- update a target by id
- POST /route
- post a request with information about the visitor
- respond with a decision
- POST /api/targets
-
API functional tests.
- each endpoint should have its own test
- write all tests in
test/endpoints.js - be sure to understand how
servertestworks
All persistence should use redis.
Source code should be in lib dir.
Use redis client factory from lib/redis.js and do not edit this file.
How to attempt this challenge:
- Create a new repo in your account and note the git url
- Clone this repo
- Solve the challenge, following our coding guidelines
- Set your new repo as the origin:
git remote set-url origin ${your repo url} - Push your solution to your repo
You must follow these steps for your solution to be accepted -- forks or other methods will not be considered.