Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/koko37/challenge-ping-tree
NodeJS simple web server
https://github.com/koko37/challenge-ping-tree
Last synced: 4 days ago
JSON representation
NodeJS simple web server
- Host: GitHub
- URL: https://github.com/koko37/challenge-ping-tree
- Owner: koko37
- Created: 2020-10-29T09:38:50.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2020-10-31T16:54:25.000Z (about 4 years ago)
- Last Synced: 2023-10-27T04:26:58.399Z (about 1 year ago)
- Language: JavaScript
- Size: 77.1 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# challenge-ping-tree
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.
## Decisioning
1) 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"
}2) No `target` can receive more traffic per day than it allows. Here's an example `target` with 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" ]
}
}
}4) All remaining `targets` should be filtered by criteria they are willing to accept. The above `target` example only accepts visitors from either California or New York from 13 to 16 UTC.
5) If no `targets` are left, the request is rejected (returns `{"decision":"reject"}`), otherwise it should return the url of the remaining `target` with the highest value.
## Requirements
1. 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 decision2. API functional tests.
- each endpoint should have its own test
- write all tests in `test/endpoints.js`
- be sure to understand how [`servertest`](https://github.com/rvagg/servertest) worksAll persistence should use [redis](http://redis.io).
Source code should be in `lib` dir.
Use redis client factory from `lib/redis.js` and do not edit this file.## Instructions
How to attempt this challenge:
1. Create a new repo in your account and note the git url
2. Clone this repo
3. Solve the challenge, following our [coding guidelines](https://github.com/Interlincx/adnet-onboarding)
4. Set your new repo as the origin: `git remote set-url origin ${your repo url}`
5. Push your solution to your repoYou must follow these steps for your solution to be accepted -- forks or other methods will not be considered.